如何使用 tcl 在文件中读取多行?也就是说,默认情况下,gets 命令会读取直到找到新行,如何更改此行为以读取文件直到找到特定字符?
问问题
3500 次
3 回答
4
如果您不介意阅读一下,可以通过循环gets
或read
循环来完成:
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
如果您正在寻找多行模式,我建议将整个文件读入内存并进行处理。这比尝试编写正确的匹配器要容易得多:
set data [read $chan]
set idx [string first $whatToLookFor $data]
if {$idx > -1} {
set data [string range $data 0 [incr idx -1]]
}
后一种形式也适用于二进制数据。fconfigure $chan -translation binary
如果你这样做,请记住首先。
于 2012-09-27T09:55:40.313 回答
3
使用fconfigure
.
set fp [open "somefile" r]
fconfigure $fp -eofchar "char"
set data [read $fp]
close $fp
于 2012-09-27T05:39:27.077 回答
2
除了 Donal 的好建议之外,您还可以通过读取整个文件并在记录分隔符上拆分来获取记录列表:
package require textutil::split
set records [textutil::splitx [read $chan] "record_separator"]
于 2012-09-27T10:41:45.263 回答