![]() |
![]() ![]() |
![]() |
![]()
Post
#1
|
|
Grupa: Zarejestrowani Postów: 25 Pomógł: 0 Dołączył: 13.01.2004 Ostrzeżenie: (0%) ![]() ![]() |
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. |
|
|
![]()
Post
#2
|
|
![]() Grupa: Zarejestrowani Postów: 225 Pomógł: 18 Dołączył: 30.06.2003 Skąd: Wrocław Ostrzeżenie: (0%) ![]() ![]() |
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.
-------------------- |
|
|
![]()
Post
#3
|
|
Grupa: Zarejestrowani Postów: 25 Pomógł: 0 Dołączył: 13.01.2004 Ostrzeżenie: (0%) ![]() ![]() |
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. |
|
|
![]()
Post
#4
|
|
Grupa: Zarejestrowani Postów: 1 Pomógł: 0 Dołączył: 12.02.2004 Ostrzeżenie: (0%) ![]() ![]() |
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.. |
|
|
![]()
Post
#5
|
|
![]() Grupa: Przyjaciele php.pl Postów: 1 467 Pomógł: 13 Dołączył: 22.02.2003 Ostrzeżenie: (0%) ![]() ![]() |
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? |
|
|
![]() ![]() |
![]() |
Wersja Lo-Fi | Aktualny czas: 13.06.2025 - 06:38 |