Michael Schröpl: Ressourcenschonend die letzten 10 Zeilen einer Textdatei ausg.

Beitrag lesen

Hi Philipp Hasenfratz,

Der Modulo-Operator ([pref:t=52959&m=292762]) hat noch mehr Anwendungsgebiete:
Ich habe mir gerade überlegt, wie man dies a) möglichst performant und b)
speicherschonend umsetzen kann.

hast Du mal den Quelltext von "tail" gelesen?

Mein Ansatzpunkt für eine wirklich performante [tm] Lösung wäre, alles zu verwenden, was an Information vorhanden ist.

Im Verzeichniseintrag der Datei innerhalb des Dateisystems muß es irgendwie eine Beschreibung geben, welche Blöcke auf der Festplatte die entsprechende Datei enthalten. Das mag dateisystemspezifisch sein - aber das ist mir im Moment egal (vielleicht gibt es eine API dafür in einer System-Bibliothek).

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.

Dies würde die Disk-I/O-Rate bei großen Dateien wahrscheinlich stark reduzieren.

Das Grundprinzip:
Es soll _nicht_ die ganze Datei in ein Array gepackt werden!

Eben. Meine Idee versucht sogar, gar nicht erst die ganze Datei zu lesen.

Viele Grüße
      Michael

--
T'Pol: I apologize if I acted inappropriately.
V'Lar: Not at all. In fact, your bluntness made me reconsider some of my positions. Much as it has now.
(sh:| fo:} ch:] rl:( br:^ n4:( ie:% mo:) va:| de:/ zu:| fl:( ss:) ls:~ js:|)
 => http://www.peter.in-berlin.de/projekte/selfcode/?code=sh%3A|+fo%3A}+ch%3A]+rl%3A(+br%3A^+n4%3A(+ie%3A%25+mo%3A)+va%3A|+de%3A%2F+zu%3A|+fl%3A(+ss%3A)+ls%3A~+js%3A|
Auch diese Signatur wird an korrekt konfigurierte Browser gzip-komprimiert übertragen.