Dzielenie pliku TXT

Tematy związane z tworzeniem dużych aplikacji. Zaganiednia dotyczące architektury oraz zasad tworzenia optymalnych rozwiązań.
Awatar użytkownika
Harnas
Posty: 152
Rejestracja: 16 mar 2011 09:56
Wersja środowiska: LabVIEW 2009

Dzielenie pliku TXT

Post autor: Harnas »

Witam,

moj plik TXT ma 450Mb i zawiera pomiary. Potrzebuje go podzielic na mniejsze pliki o rozmiarze powiedzmy 60Mb.
Napisalem VI, ktory do dla mnie robil. Przy pliku TXT 80Mb nie bylo problemow. Przy 450Mb zapelnia mi pamiec RAM i program sie wysypuje.
Na zalaczniku jest moje rozwiazanie.
Otwieram moj plik TXT, czytam jego zawartosc i wysylam do petli While. Z kazda interacja petli While z pliku TXT ma byc wyciete 10tys wierszy i zapisane do nast pliku TXT. Gdy nowe pliki maja mniej niz 1kB zatrzymuje petle While, bo plik TXT z pomiarami zostal juz caly pociete na mniejsze.

Jak to mozna zoptymalizowac, zebym mogl tez pliki po 400-500Mb otwierac i ciac na mniejsze? Komputer ma 4GB pamieci RAM a teraz LV po uruchomieniu pogramu zapelnia ponad 3GB i krzyczy, ze pamiec sie skonczyla :P
Załączniki
test1.PNG
Awatar użytkownika
Pitol
Moderator
Posty: 982
Rejestracja: 19 lip 2007 00:00
Wersja środowiska: LabVIEW 2019
Lokalizacja: Kraków

Re: Dzielenie pliku TXT

Post autor: Pitol »

Najlepsze rozwiązanie to czytać po kawałku a nie cały plik na raz:
ChopFile.png
ObrazekObrazekObrazek
Chcesz taki podpis? Zajrzyj tutaj
Awatar użytkownika
Harnas
Posty: 152
Rejestracja: 16 mar 2011 09:56
Wersja środowiska: LabVIEW 2009

Dzielenie pliku TXT

Post autor: Harnas »

W Twoim przykladzie tne jeden plik na kolejne o ustalonej ilosci Bytow. U mnie pojawil sie problem, ze przy dzieleniu na kolejne pliki tekstowe polowa wiersza zapisywana jest do jednego pliku a polowa do drugiego.
Czy teraz jedyna mozliwoscia jest ustalenie ile Bytow ma jeden wiersz i na tej podstawie dzielenie jednego pliku na kolejne o ustalonej ilosci wierszy czy mozna to zrobic w inny sposob?
Awatar użytkownika
Pitol
Moderator
Posty: 982
Rejestracja: 19 lip 2007 00:00
Wersja środowiska: LabVIEW 2019
Lokalizacja: Kraków

Re: Dzielenie pliku TXT

Post autor: Pitol »

Możesz to zrobić, nawet prościej niż poprzedni przykład.
Musisz tylko w bloczku Read Text File zaznaczyć Read Lines.

Jedyny problem będzie przy ostatnim odczycie, ponieważ liczba linii nie będzie się zgadzać i zostanie zgłoszony błąd 4. Wystarczy go odpowiednio obsłużyć.
Wydaje mi się, że nie ma prostej możliwości obliczenia liczby linii w pliku bez wczytania go w całości. Możnaby w sumie skorzystać z poprzedniego przykładu i liczyć ile tam znaków nowej linii wystąpiło i dopiero potem znów odczytywać plik wg wyznaczonej liczby linii. Dużo więcej zabawy, nie wiem czy opłacalne. Lepiej obsłużyć błąd :)
ChopFile2.gif
ObrazekObrazekObrazek
Chcesz taki podpis? Zajrzyj tutaj
Awatar użytkownika
Harnas
Posty: 152
Rejestracja: 16 mar 2011 09:56
Wersja środowiska: LabVIEW 2009

Dzielenie pliku TXT

Post autor: Harnas »

Dzieki :)
Nie wiedzialem, ze bloczek Read Text File ma mozliwosc ustawienia ilosci wierszy, ktore maja byc odczytane :)
ODPOWIEDZ