Tclでファイルを解析しましたが、次のような行を読みました:
while {[gets $thefile line] >= 0} { ...
そして私は自分のパターンをそのように検索します
if { [regexp {pattern} $line] } { ...
行 n+2 を変数に格納したいのですが、どうすればそれを行うことができますか (常に変化しているため、次の行でパターンを見つけようとすることはできません)?
どうもありがとう
最も簡単な方法は、本体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
}
# ...
}
実行時にパターン空間をリストとして構築できます。例えば:
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
その後、正規表現を使用してループ内の行を検索できます。