을 시도 할 수 있습니다 그것은 당신이 찾을 때 다음 쉽게 추가 라인을 읽을 수 있기 때문에, 한 번에 하나 개의 라인을 읽는하는 while
루프와 함께 할 수있는 좀 더 쉽게입니다 당신의 트리거의 경우 (당신이 그들에 "ABC"
과 라인의 실행이없는 가정) :이 foreach
와 어색
set fd [open $theFilename]
while {[gets $fd line] >= 0} {
if {
[string match *"ABC"* $line]
&& [gets $fd line] >= 0
&& [regexp {\d+} $line -> num]
} then { # I like to use 'then' after a multi-line conditional; it's optional
puts "Found number $num after \"ABC\""
}
}
close $fd
이유는이 같은 N을 처리 항상 것입니다 반복 할 때마다 매번 요소 수. 실행-의 라인 문제가있을 수 있습니다 당신이 데이터를 처리하는 경우
는 호기심 충분히 foreach
와 떨어져 실제로 더 나은, 위의 언급 :
set fd [open $theFilename]
set lines [split [read $fd] \n]
close $fd
foreach line $lines {
incr idx; # Always the index of the *next* line
if {
[string match *"ABC"* $line]
&& [regexp {\d+} [lindex $lines $idx] -> num]
} then {
puts "Found number $num after \"ABC\""
}
}
이는 당신이 할 때 lindex
의 작동 무언가가 끝나면 빈 문자열 (간단한 정규식과 일치하지 않음)이 생성됩니다.
철저한 답변 주셔서 감사합니다. – user1270123