regexp 함수를 통해 한 행의 데이터를 다른 변수에 일치시키려는 다음 코드가 있습니다. 데이터의 수 (입력 행의)와 변수 이름이 인 regexp 기능이 다를 수 있으므로 그 이유는 이전에 내 실제 코드에서 처리 된 $ varLine을 사용하기 때문입니다. 내가 그것을 실행하고 때TCL, regexp 함수 및 매개 변수 대체
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
을
누구든지 내 코드에서 실수를 보거나 도움이 될 수 있습니까? 감사합니다.
문제 해결 :
이 주변 작업의 가장 간단한 방법은 변수리스트를 확장하는 것이다! 감사합니다 kostix! 'eval' 명령을 처리해야 겠지만 목록 팁을 잊어 버렸습니다.그리고 나는 {*}에 대해 읽었지만 이해하지 못했습니다. 당신의 링크는 완벽했습니다! – feronjb