If 블록이 특정 파일 안에 있는지 찾아야합니다. 다음과 같이Tcl [regexp] : 변수가 내부에있는 블록과 일치하는 표현
나는 new.tcl 파일이 있습니다
if { [info exists var1] } {
if { "$var1" == "val1" } {
puts "var1 has value as val1"
}
} else {
puts "var1 does not exists"
}
나는 또 다른 Tcl의 기능에서이 파일을 읽고 일치하려고 regexp
기능과 가치와 변수를 통해 블록은이 기능에 사용되는 경우 변수입니다. 내 구현 파일의 모양
,
set valueDict [list 'var1' 'val1']
set valDictLen [llength $valueDict]
set myFilePtr [open "new.tcl" "r"]
set myFileContent [read $myFilePtr]
close $myFilePtr
for { set index 0 } { $index < $valDictLen } { incr index 2 } {
set currVar [lindex $valueDict $index]
set currVal [lindex $valueDict [expr $index + 1]]
# I actually want to match the entire if block content here
if { ![regexp "if \{ \[info exists $currVal\] \}" $myFileContent] } {
puts "Code not present"
}
}
코드가 멋지게 포맷 된 경우 \ s *? {\ s *? \ [info exists var1 \ s *?] \ s *와 같이 ['(? : \ n | ^)]와 같은 정규식을 사용할 수 있습니다. } \ s *? {. *? \ n} (? : \ n | $)'] (https://regex101.com/r/PUpBvb/1) (Tcl에서는 테스트되지 않음), 모든 경우에 작동 할 것입니다. 정규식으로 코드를 파싱하는 것은 일반적으로 나쁜 생각입니다. –
참고 :'var1' 대신 정규식에서'$ currVal' 변수를 직접 사용하려고합니다. – Ashwin
이 답을 살펴보고 문제가 해결되는지 알려주십시오. http://stackoverflow.com/questions/14237376/how-to-use-regexp-to-match-a-tcl – user2141046