まず、使用している正規表現は、そもそも inの文字を除くすべてで構成される文字のセット[^country]
に一致するため、まったく正しいことを行っていません (そのため、 in以降のみに一致する必要があるため、その後)。country
h
eth1
country
デフォルトでは、Tcl は文字列全体を照合に使用し、改行は単なる通常の文字です。( も指定して特別なものにするオプションがありますが、-line
デフォルトではオンになっていません。)これは、文字列全体を使用regexp
して正規表現でフィードすると機能することを意味します(まあ、おそらくstring trim $country_value
いくつかの点)。これは、実際の問題は、照合する正しい文字列を提示することにあることを意味します。
一度に 1 行ずつ表示し (おそらくファイルから読み取る)、ある行に対する一致を使用して次の処理をトリガーする場合は、正規表現一致以外の処理が必要です。
set found_country 0
while {[gets $channel line] >= 0} {
if {$found_country} {
# Process the data...
puts "post-country data is $line"
# Reset the flag
set found_country 0
} elseif {[regexp {(.*) country$} $line -> leading_bits]} {
# Process some leading data...
puts "pre-country data is $leading_bits"
# Set the flag to handle the next line specially
set found_country 1
}
}
空行を完全にスキップしたい場合は、. のif {$line eq ""} continue
前に a を置きif {$found_country} ...
ます。