2017-08-03 3 views
0

Ich habe dieses Problem:
Ich brauche manchmal große Textdateien zu verarbeiten.
In einigen Fällen weiß ich, dass die Daten, die mir wichtig sind, im Endstück der Datei sind. Wenn ich normal geöffnet benutze, muss ich durch die Zeilen scrollen. Gibt es eine Möglichkeit, "vom Ende zu starten" und Zeit zu sparen, vielleicht die Datei rückwärts zu lesen?In TCL, öffne ich eine Datei aus dem Schwanz

+0

Was meinst du mit "blättern"? Willst du mit der Maus/Pfeiltasten scrollen oder meinst du Zeile für Zeile lesen? – slebetman

+0

Überprüfen Sie den Befehl ['seek'] (https://tcl.tk/man/tcl8.6/TclCmd/seek.htm). –

Antwort

2

Sie können den seek Befehl:

set linesz 256 ; # assume an approximate line size 
set fh [open myfile.txt] 
seek $fh [expr {$linesz*-5}] end 
gets $fh line ; # this first line is probably a partial line, ignore it. 
while { [gets $fh line] >= 0 } { 
    # process 
} 
close $fh 

Referenzen: seek

+1

Die einzigen Komplikationen bei diesem Ansatz bestehen darin, die Rate für die Zeilenlänge und die Anzahl der zurückzulegenden Zeilen zu berechnen ("-5"). Um gute Werte für sie zu erhalten, müssen die Daten bekannt sein. –

+1

Wenn die Länge der Datenzeile sehr variabel ist oder die Kenntnis der Daten gering ist, müssen die Zeilengröße und/oder die Anzahl der zurückzuleitenden Zeilen erhöht werden. –

+0

Ich sehe, dass es keine Möglichkeit gibt, dies in einer genauen Weise, d. H. Rätselraten müssen verwendet werden. Ich vermutete so viel, wollte nur sicher sein – user1134991