Dlaczego w plikach typu TextFile nie działa procedura Seek, ewentualnie jak w inny sposób przejść do wybranego bajtu i odczytać linijkę.
Pozdrawiam!
Dlaczego w plikach typu TextFile nie działa procedura Seek, ewentualnie jak w inny sposób przejść do wybranego bajtu i odczytać linijkę.
Pozdrawiam!
Jezeli chodzi o linijki to możesz spróbowac robić puste czytanie (readln; ) bo seek się naprawde dziwnie zachowuje w plikach textowych, równierz możesz przecież stosowac file of char i czytac znak po znaku
[Dopisane do postu ponizej]
A ja niby co napisałem? oczy ci g***** zarosły ((c) lofix)
Mnie do głowy przychodzą dwa rozwiązania:
// do postu niżej
Przeczytaj punkt 1.
Wszystko pięknie ładnie. ALE!
... ale ja muszę mieć skok do danego bajtu, bo mój plik ma 30MB i puste czytanie mnie nie zbawia!
Wszystko pięknie ładnie. ALE!
... ale ja muszę mieć skok do danego bajtu, bo mój plik ma 30MB i puste czytanie mnie nie zbawia!
Do danego bajtu to spoko: otwierasz jako file, file of byte, lub file of char (co wygodniej) i robisz Seek. No a skoro masz przeczytac\linijke, to potem czytasz w petli bajty/chary az znajdziesz CR/LF.
Ale jesli skok do danej linijki to nic nie poradzisz - puste czytanie, albo TStringList.LoadFromFile (i zawalenie pamieci)
Wiecie, że czas potrzebny na sprawdzenie całego pliku wzrósł SZEŚCIOKROTNIE! Ale mniejsza z tym, bo podunęłó mi to nową myśl...
To może by tak potraktować plik jako niezdefiniowany (file) i odczyt wykonywac poprzez blockread (bardzo szybkie i wygodne :-) )
Przy plikach niezdefiniowanych można również korzystać z seek
To może by tak potraktować plik jako niezdefiniowany (file) i odczyt wykonywac poprzez blockread (bardzo szybkie i wygodne :-) )
Przy plikach niezdefiniowanych można również korzystać z seek
file, file of byte, file of char - wszystko jedno. Jesli jednak potrzebny jest odczyt linijki, to moj ukochany BlockRead nic nie da - po trzeba czytac po jednym az do CR/LF. Chyba, zeby czytac BlockReadem po wiekszym kawalku i przeszukiwac odczytane czy jest koniec linii. Jak tak, to obciac gdzie trzeba, jak nie, czytac nastepna porcje i sklejac. Odczyt moze byc szybszy, ale to klejenie potem...
A moim zdaniem przy takim wielkim pliku tekstowym takie kombinacje nic nie dadzą.. i tak będzie długo czytać.