如何在tcl中删除解析文件中的行

时间:2012-06-21 14:16:08

标签: parsing tcl

我在tcl中解析了一个文件,我读了这样的行:

while {[gets $thefile line] >= 0} { ...

我按照那样搜索我的模式

   if { [regexp {pattern} $line] } { ...

我想将行n + 2存储在一个变量中,我该怎么做(我不能尝试在下一行中找到一个模式,因为它总是在变化)?

非常感谢

2 个答案:

答案 0 :(得分:1)

最简单的方法是在gets正文中添加额外的if

while {[gets $thefile line] >= 0} {
    # ...
    if { [regexp {pattern} $line] } {
        if {[gets $thefile secondline] < 0} break
        # Now $line is the first line, and $secondline is the one after
    }
    # ...
}

答案 1 :(得分:0)

您可以在运行时将模式空间构建为列表。例如:

set lines {}
set file [open /tmp/foo]
while { [gets $file line] >=0 } {
    if { [llength $lines] >= 3 } {
        set lines [lrange $lines 1 2]
    }
    lappend lines $line
    if { [llength $lines] >= 3 } {
        puts [join $lines]
    }
}

第三次通过循环后, lines 将始终保持最近的三行。在我的示例中,输出如下所示:

line 1 line 2 line 3
line 2 line 3 line 4
line 3 line 4 line 5
line 4 line 5 line 6
line 5 line 6 line 7
line 6 line 7 line 8
line 7 line 8 line 9

然后,您可以使用正则表达式搜索循环内的