Pliki tekstowe

0

Dlaczego w plikach typu TextFile nie działa procedura Seek, ewentualnie jak w inny sposób przejść do wybranego bajtu i odczytać linijkę.

Pozdrawiam!

0

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)

0

Mnie do głowy przychodzą dwa rozwiązania:

  1. Otworzyć plik nie jako textfile, ale zwykły file.
  2. Jeśli już textfile, to można otworzyć i wczytać tyle znaków (ew. linii) ile potrzeba, żeby przejść do żądanej. Zawsze można zrobić funkcję :-)

// do postu niżej
Przeczytaj punkt 1.

0

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!

0

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)

0

Wiecie, że czas potrzebny na sprawdzenie całego pliku wzrósł SZEŚCIOKROTNIE! Ale mniejsza z tym, bo podunęłó mi to nową myśl...

0

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

0

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...

0

A moim zdaniem przy takim wielkim pliku tekstowym takie kombinacje nic nie dadzą.. i tak będzie długo czytać.

1 użytkowników online, w tym zalogowanych: 0, gości: 1