Christian Seiler: Ressourcenschonend die letzten 10 Zeilen einer Textdatei ausg.

Beitrag lesen

Hallo Michael,

Ein Programm könnte also

  1. den letzten Block der Datei einlesen,
  2. diesen in Sätze zerlegen,
  3. zählen, ob das genug Sätze sind, und
       a) ja   => die passenden Sätze extrahieren und aufhören bzw.
       b) nein => den vorletzten Block lesen und weiter bei 2.

Diese Idee hatte ich gestern abend auch, allerdings bin ich mit ihrer Umsetung an meinen nicht wirklich guten Perl-Kenntnissen gescheitert.

Heute habe ich mir überlegt, dass, bevor ich groß rummache, ich das ganze lieber in PHP schreibe, das kann ich wenigstens: http://www.christian-seiler.de/temp/lastlines.phps

Ich habe Philipps Beispiel mal in PHP übersetzt (um gleiche Testbedingungen zu machen) und die Werte für eine Textdatei mit 12000 Zeilen und einem Knappen MB getestet.

Folgende Werte für 1000 Durchläufe: (die Datei dürfte im Speichercache liegen, d.h. bei noch auf der Festplatte liegenden Dateien dürfte der Geschwindigkeitsunterschied noch größer sein.

Dabei hat Philipps Beispiel durchschnittlich so abgeschnitten:
real    3m16.526s
user    2m35.260s
sys     0m7.020s

Mein Beispiel dagegen erledigte die Aufgabe in durchschnittlich:
real    0m32.489s
user    0m26.660s
sys     0m4.380s

Viele Grüße,
Christian