Rzepa
12.02.2004, 08:58:10
Witam,
Potrzebna mi efektywna (czasowo) metoda na pobieranie x ostatnich linii z pliku. Do tej pory stosowałem funkcję file(), ale moje pliki wciąż rosną i obawiam się, że wczytywanie całości do tablicy za jakiś czas stanie się zbyt powolne...
Pozdrawiam,
:wink:
Rzepa.
zulus
12.02.2004, 09:45:39
też się nad tym zastanawiam i doszedłem do wiosku, że jak będę wiedział które chcę linijki, to przesunę wskażnik na sam koniec pliku i zacznę czytać od końca.
Rzepa
12.02.2004, 13:28:44
tak, tak, tylko mi chodzi o efektywny sposób wybierania linii z pliku.
np. żeby skoczyć na koniec można użyć fseek(), aby wczytać jedną linię - fgets(), a jak sprytnie skoczyć np. 5 linii do tyłu?
:?:
pozdr.
Rzepa.
delerium
12.02.2004, 15:36:02
mysle ze najbardziej efektywnym sposobem jest prowadzenie drugiego pliku w ktorym zapisujesz pozycje w pliku kolenych linii. dzieki temu w latwy sposb mozna odczytac polozenie lini w pliku.
jedyna wada tego rozwiazania to jesli ilosc lini wzrosnie do powiedzmy 50 000 to praswoanie pliku z indexami moze zjac chiwle... no coz w C mozna bybylo zrzucic fizycznie zawartosc tablicy do pliku i tylko ja spowrotem wrzucac.. nie wiem czy w php takie cos przejdzie..
Jabol
12.02.2004, 16:22:06
skocz fseekiem na przedostatni, a potem czytaj pięć kolejnych linijek (przesuwając deskryptor do tyłu cały czas o 2 od aktualnej pozycji i czytając jeden znak).
Potem jak już znajdziesz piątą linijke zacznij czytać. A czemu to jest wydajne (conajmniej na unixach)? Ponieważ biblioteka standardowa tak naprawde i tak czyta najpierw plik do bufora, a potem wszystkie operacje wykonują się na pamięci a nie na dysku.
Inne co Ci moge zaproponować to możesz jeszcze spróbować zmienić układ pliku na odwrotny (tzn. to co byłoby ostanie będzie pierwsze). Tak chyba byłoby łatwiej?
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę
kliknij tutaj.