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?
Antworten
Zu viele Anzeigen?
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.
slackwing
Punkte
27391
glenn jackman
Punkte
221248