正規表現関数を使用して、1行のデータをさまざまな変数に一致させようとしている次のコードがあります。(入力行の)データの数、次に正規表現関数の変数名の数は変化する可能性があるため、$ varLine(以前は実際のコードで処理されていました)を使用します。
set in_stim "13 1 1 0 1 0 0 0 2 03"
set regex {^(\d+)\s([01])\s([01])\s([01])\s([01])\s([01])\s([01])\s([01])\s(\d+)\s(\d+)}
set varLine "sig1 sig2 sig3 sig4 sig5 sig6 sig7 sig8 sig8"
regexp $regex $in_stim whole sig0 $varLine
puts "sig0: $sig0"
puts $sig1
実行すると、次のエラーが発生します($ sig0が正しく表示されます)。
sig0: 13
can't read "sig1": no such variable
while executing
"puts $sig1"
$ varLineを正規表現行に手動で置き換えると、エラーは消えます。
set in_stim "13 1 1 0 1 0 0 0 2 03"
set regex {^(\d+)\s([01])\s([01])\s([01])\s([01])\s([01])\s([01])\s([01])\s(\d+)\s(\d+)}
regexp $regex $in_stim whole sig0 sig1 sig2 sig3 sig4 sig5 sig6 sig7 sig8 sig8
puts $sig0
puts $sig1
次の正しい出力が得られます。
13
1
誰かが私のコードに間違いを見つけたり、助けたりできますか?ありがとう!