Einzelnen Beitrag anzeigen
  #2 (permalink)  
Alt 15-03-2013, 00:01
Benutzerbild von fireweasel fireweasel
 Registrierter Benutzer
Links : Onlinestatus : fireweasel ist offline
Registriert seit: Sep 2008
Ort: At home
Beiträge: 851
fireweasel wird schon bald berühmt werdenfireweasel wird schon bald berühmt werden
fireweasel eine Nachricht über AIM schicken fireweasel eine Nachricht über Yahoo! schicken
Standard

Zitat:
Zitat von andygyr Beitrag anzeigen
... Desshalb die Frage, gibt es eine Alternative eine Datei von hinten nach vorne zu lesen?
Keine fertig gebackene (sprich in der PHP-Standard-Library) und meines Wissens auch keine anderswo (PEAR, phpclasses.org, e.t.c.).

Siehe auch: read csv backwards php - Google-Suche

Zeilen "rückwärts" einzulesen ist nicht so trivial, wie es auf den ersten Blick scheint:

http://metacpan.org/module/File::ReadBackwards
php - Read a file backwards line by line using fseek - Stack Overflow

Zitat:
Zitat von andygyr Beitrag anzeigen
Ich könnte die ganze Datei in ein Array wandeln, dieses Umkehren und dann das gesammte Array wieder durchlaufen. Aber nach meinen Einschätzungen braucht das noch länger als es onehin schon braucht.
Was ist dir wichtiger? Laufzeit- oder Speicherverbrauchsoptimierung? Wenn alle Zeilen (Datensätze) zweimal in den Hauptspeicher passen, ist das Einlesen und Umsortieren die schnellste Variante. Nur falls der Hauptspeicher nicht reicht, musst du das Umsortieren auf den Massenspeicher auslagern, bspw. als SQLite-Datenbank-Tabelle (die kann man auch "rückwärts" auslesen).

Die ReverseFileReader-Klasse nutzt einen netten Trick: Zuerst werden die Zeilenumbrüche (vorwärts) eingelesen. Anschließend kann man auf diese Daten zurückgreifen und per fseek() und Co. rückwärts Zeile um Zeile "richtig" einlesen. Das spart Hauptspeicher, ist aber sehr langsam.

Geändert von fireweasel (26-01-2014 um 14:23 Uhr) Grund: Zeilenumbruch in url für ReverseFileReader-Klasse entfernt
Mit Zitat antworten