使用TCL从文件中读取多行?

时间:2012-09-27 05:12:17

标签: tcl

如何使用tcl读取文件中的多行?这是默认情况下,gets命令读取直到找到新行,如何更改此行为以读取文件,直到找到特定字符?

3 个答案:

答案 0 :(得分:4)

如果您不介意阅读,可以通过循环使用getsread来完成:

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

答案 1 :(得分:3)

使用fconfigure

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

答案 2 :(得分:2)

除了Donal的好建议之外,您还可以通过阅读整个文件并在记录分隔符上拆分来获取记录列表:

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

Documentation