3 Stimmen

Lesen mehrerer Zeilen aus einer Datei mit TCL?

Wie kann ich mit tcl mehr als eine Zeile in einer Datei lesen? Der Befehl gets liest standardmäßig so lange, bis eine neue Zeile gefunden wird. Wie kann ich dieses Verhalten ändern, um eine Datei zu lesen, bis ein bestimmtes Zeichen gefunden wird?

4voto

Donal Fellows Punkte 125686

Wenn es Ihnen nichts ausmacht, ein wenig zu lesen, können Sie dies durch eine Schleife mit gets o read in einer Schleife:

set data ""
while {[gets $chan line] >= 0} {
    set idx [string first $whatToLookFor $line]
    if {$idx == -1} {
        append data $line\n
    } else {
        # Decrement idx; don't want first character of $whatToLookFor
        append data [string range $line 0 [incr idx -1]]
        break
    }
}
# Data has everything up to but not including $whatToLookFor

Wenn Sie nach mehrzeiligen Mustern suchen, schlage ich vor, die gesamte Datei in den Speicher zu lesen und daran zu arbeiten. Das ist viel einfacher, als zu versuchen, einen korrekten Matcher zu schreiben:

set data [read $chan]
set idx [string first $whatToLookFor $data]
if {$idx > -1} {
    set data [string range $data 0 [incr idx -1]]
}

Diese letztere Form funktioniert auch mit binären Daten sehr gut. Denken Sie nur daran, dass fconfigure $chan -translation binary wenn Sie das tun.

3voto

slackwing Punkte 27391

Utilice fconfigure .

set fp [open "somefile" r]
fconfigure $fp -eofchar "char"
set data [read $fp]
close $fp

2voto

glenn jackman Punkte 221248

Zusätzlich zu Donals guten Ratschlägen können Sie eine Liste von Datensätzen erhalten, indem Sie die gesamte Datei lesen und am Satztrennzeichen aufteilen:

package require textutil::split
set records [textutil::splitx [read $chan] "record_separator"]

Dokumentation

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X