Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: efektywne czytanie z pliku
Forum PHP.pl > Forum > PHP
Rzepa
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
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
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
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
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.
Invision Power Board © 2001-2025 Invision Power Services, Inc.