Jak odczytać cześć pliku od końca
-
- Posty: 114
- Rejestracja: 31 paź 2005 00:00
- Wersja środowiska: LabVIEW 8.2
- Lokalizacja: Cz-wa / Wa-wa
Jak odczytać cześć pliku od końca
Witam,
Jak do tej pory myślałem że to kwestia bardziej niż banalna. Ba miałem pewność że taka funkcja jest dostępna w LV i już kiedyś z niej korzystałem...
Przeszukałem halpa... przeszukałem forum.... i tak myślę że albo wpisywałem błędne hasła wyszukiwania albo nic na ten temat nie ma (to drugi raczej dziwne bo taka funkcja pewnie nie jednemu by sie przydała).
Mam większy plik tekstowy(tak około 30 MB).
W mojej aplikacji jest około 30 różnych takich plików(tej samej wielkości) które będę musiał kontrolować co minutę.
Potrzebuję odczytać ostatnie sto wierszy z każdego pliku co minutę.
Jak to zrobić?
Używam LV 8.2 i nie znalazłem nic co by pomogło rozwiązać ten problem?
Myślałem nad zrobieniem podprogramu który będzie "przechwytywał" dane dopisywane do plików tekstowych i trzymał je w jakiejś komórce lokalnej ale... nie będzie to dobrze rozwiązanie ponieważ przy restarcie programu komórka będzie pusta lub będzie zawierać nieaktualne dane.
Pozostaje wg mnie tylko odczyt końca pliku - czy ktoś ma jakieś pomysły jak to zrobić?
Dodaj to swojego profilu wersję LabVIEW, z której korzystasz. Pitol
Jak do tej pory myślałem że to kwestia bardziej niż banalna. Ba miałem pewność że taka funkcja jest dostępna w LV i już kiedyś z niej korzystałem...
Przeszukałem halpa... przeszukałem forum.... i tak myślę że albo wpisywałem błędne hasła wyszukiwania albo nic na ten temat nie ma (to drugi raczej dziwne bo taka funkcja pewnie nie jednemu by sie przydała).
Mam większy plik tekstowy(tak około 30 MB).
W mojej aplikacji jest około 30 różnych takich plików(tej samej wielkości) które będę musiał kontrolować co minutę.
Potrzebuję odczytać ostatnie sto wierszy z każdego pliku co minutę.
Jak to zrobić?
Używam LV 8.2 i nie znalazłem nic co by pomogło rozwiązać ten problem?
Myślałem nad zrobieniem podprogramu który będzie "przechwytywał" dane dopisywane do plików tekstowych i trzymał je w jakiejś komórce lokalnej ale... nie będzie to dobrze rozwiązanie ponieważ przy restarcie programu komórka będzie pusta lub będzie zawierać nieaktualne dane.
Pozostaje wg mnie tylko odczyt końca pliku - czy ktoś ma jakieś pomysły jak to zrobić?
Dodaj to swojego profilu wersję LabVIEW, z której korzystasz. Pitol
kapitan7
- Pitol
- Moderator
- Posty: 987
- Rejestracja: 19 lip 2007 00:00
- Wersja środowiska: LabVIEW 2019
- Lokalizacja: Kraków
Re: Jak odczytać cześć pliku od końca
Pewnie da się prościej, ale chciałem zrobić coś fajnego:
Czytamy od końca po jednym bajcie i sprawdzamy czy jest to znak Line Feed. Jeśli tak, to zwiększamy licznik nowych linii i przesuwamy licznik pozycji kolejnego znaku o 2 (a nie o jeden, jak to jest normalnie). Dlaczego o 2? Bo znak końca linii składa się z dwóch bajtów (Line Feed i Carriage Return).
Nie mam pojęcia, czy to rozwiązanie sprawdzi się w Twoim przypadku, ale chciałem sobie udowodnić, że się da to zrobić szybko
i się udało...
Idea jest prosta:Czytamy od końca po jednym bajcie i sprawdzamy czy jest to znak Line Feed. Jeśli tak, to zwiększamy licznik nowych linii i przesuwamy licznik pozycji kolejnego znaku o 2 (a nie o jeden, jak to jest normalnie). Dlaczego o 2? Bo znak końca linii składa się z dwóch bajtów (Line Feed i Carriage Return).
Nie mam pojęcia, czy to rozwiązanie sprawdzi się w Twoim przypadku, ale chciałem sobie udowodnić, że się da to zrobić szybko

- Załączniki
-
- file_8.2.vi
- LabVIEW 8.2
- (13.62 KiB) Pobrany 265 razy
- bartus
- Posty: 141
- Rejestracja: 07 maja 2007 00:00
- Wersja środowiska: LabVIEW 2009
- Lokalizacja: Wrocław/Żory
Jak odczytać cześć pliku od końca
Brawo Pitol, jeszcze tylko odwrócić tablicę i będzie zgodnie z kolejnością zapisu 

Jest pare rzeczy dla których warto zyc - TO,UE i nie zmienia sie nic 

- Pitol
- Moderator
- Posty: 987
- Rejestracja: 19 lip 2007 00:00
- Wersja środowiska: LabVIEW 2019
- Lokalizacja: Kraków
Re: Jak odczytać cześć pliku od końca
Tam jest string a nie tablica. Wyjściowy string jest już odwrócony (tylko indykator znajduje się wewnątrz pętli). Wszystko jest wg wymagań Pana Kapitana ;)
EDIT: W sumie nie trzeba odwracać stringa na końcu, tylko w bloczku Concatenate zamienić ze sobą wejścia (tak, aby nowy znak dodawał się na początku).
EDIT: W sumie nie trzeba odwracać stringa na końcu, tylko w bloczku Concatenate zamienić ze sobą wejścia (tak, aby nowy znak dodawał się na początku).
-
- Posty: 114
- Rejestracja: 31 paź 2005 00:00
- Wersja środowiska: LabVIEW 8.2
- Lokalizacja: Cz-wa / Wa-wa
Re: Jak odczytać cześć pliku od końca
No i działa piknie 
Proste jasne i oczywiste. Bardzo dziękuje za pomoc.
Ma się rozumieć że LV nie daje takiego bloczku defaultowo? - szkoda bo wydaje mi się bardzo przydatny.

Proste jasne i oczywiste. Bardzo dziękuje za pomoc.
Ma się rozumieć że LV nie daje takiego bloczku defaultowo? - szkoda bo wydaje mi się bardzo przydatny.
kapitan7
- Pitol
- Moderator
- Posty: 987
- Rejestracja: 19 lip 2007 00:00
- Wersja środowiska: LabVIEW 2019
- Lokalizacja: Kraków
Jak odczytać cześć pliku od końca
Najwyraźniej nikt o tym nie pomyślał wcześniej ;)
Tak dla wyjaśnienia: jeśli wczytujesz duży plik (~30MB) to wywal z tego przykładu odczyt całego pliku, bo to on najwięcej zżera czasu. Sam "algorytm" działa w miarę szybko. Testowałem to na 25MB pliku logu z jakiegoś programu.
Zauważyłem dodatkowo, że program nie jest odporny na kodowanie pliku. Plik txt musi być zapisany w ANSI. Jeśli jest w Unicode, to tam każdy znak zajmuje 2 bajty więc trzeba by przerobić. Jeśli interesowała by Cię taka wersja to daj znać. Coś się wymyśli.
Tak dla wyjaśnienia: jeśli wczytujesz duży plik (~30MB) to wywal z tego przykładu odczyt całego pliku, bo to on najwięcej zżera czasu. Sam "algorytm" działa w miarę szybko. Testowałem to na 25MB pliku logu z jakiegoś programu.
Zauważyłem dodatkowo, że program nie jest odporny na kodowanie pliku. Plik txt musi być zapisany w ANSI. Jeśli jest w Unicode, to tam każdy znak zajmuje 2 bajty więc trzeba by przerobić. Jeśli interesowała by Cię taka wersja to daj znać. Coś się wymyśli.
- Pitol
- Moderator
- Posty: 987
- Rejestracja: 19 lip 2007 00:00
- Wersja środowiska: LabVIEW 2019
- Lokalizacja: Kraków
Re: Jak odczytać cześć pliku od końca
Nie było to takie trudne. W załączniku wersja niezależna od kodowania pliku.
- Załączniki
-
- ReadingLinesFromEndOfFile_8.2.vi
- LV 8.2
- (51.29 KiB) Pobrany 241 razy
-
- ReadingLinesFromEndOfFile.vi
- LV 10.0
- (41.63 KiB) Pobrany 254 razy
-
- Posty: 114
- Rejestracja: 31 paź 2005 00:00
- Wersja środowiska: LabVIEW 8.2
- Lokalizacja: Cz-wa / Wa-wa
Re: Jak odczytać cześć pliku od końca
Widzę że jesteś jak Tefal - myślisz o wszystkim
Na razie nie potrzebuję innego kodowania to co jest w zupełności mi wystarczy.
Teraz staję przed zadaniem zrobienia wykresu 3D z pliku 700MB
- na razie poszukam na forum jak nic nie znajdę to będę znowu błagał o pomoc 
Pozdrawiam,

Na razie nie potrzebuję innego kodowania to co jest w zupełności mi wystarczy.
Teraz staję przed zadaniem zrobienia wykresu 3D z pliku 700MB


Pozdrawiam,
kapitan7