0

Tclでファイルを解析しましたが、次のような行を読みました:

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

そして私は自分のパターンをそのように検索します

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

行 n+2 を変数に格納したいのですが、どうすればそれを行うことができますか (常に変化しているため、次の行でパターンを見つけようとすることはできません)?

どうもありがとう

4

2 に答える 2

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
    }
    # ...
}
于 2012-06-21T14:48:30.623 に答える
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]
    }
}

ループを 3 回通過した後、は常に最新の 3 行を保持します。私のサンプルでは、​​出力は次のようになります。

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

その後、正規表現を使用してループ内のを検索できます。

于 2012-06-21T14:53:35.440 に答える