Tcl 如何在foreach循环中插入换行符并获取数据
我有一组字段要从文件中解析,我在foreach循环中一行一行地解析,我想知道如何跳过一行转到下一行 例如:如果遇到一个名为“ABC”的字符串,我需要在下一行中获取一个数字 some characters "ABC" 123 “ABC”几个字 123 问题是文件中有很多数字,但我需要抓取一个数字,特别是字符串“ABC”后的换行符后的数字 我该怎么做Tcl 如何在foreach循环中插入换行符并获取数据,tcl,Tcl,我有一组字段要从文件中解析,我在foreach循环中一行一行地解析,我想知道如何跳过一行转到下一行 例如:如果遇到一个名为“ABC”的字符串,我需要在下一行中获取一个数字 some characters "ABC" 123 “ABC”几个字 123 问题是文件中有很多数字,但我需要抓取一个数字,特别是字符串“ABC”后的换行符后的数字 我该怎么做 你可以试试这个简单的解决方案 set trigger 0 set fh [open "your_file" "r"] while {[gets $f
你可以试试这个简单的解决方案
set trigger 0
set fh [open "your_file" "r"]
while {[gets $fh line] != -1} {
if {[regexp -- {"ABC"} $line]} {
incr trigger
continue
}
if {$trigger > 0} {
puts $line ; # or do something else
incr trigger -1
}
}
close $fh
你可以试试这个简单的解决方案
set trigger 0
set fh [open "your_file" "r"]
while {[gets $fh line] != -1} {
if {[regexp -- {"ABC"} $line]} {
incr trigger
continue
}
if {$trigger > 0} {
puts $line ; # or do something else
incr trigger -1
}
}
close $fh
使用
while
循环更容易一些,每次读取一行,因为当您找到触发器案例时,您可以很容易地读取额外的一行(假设您没有包含“ABC”
):
对于foreach
来说,这样做很尴尬,因为它每次通过循环时都会处理相同数量的元素
如果您处理的数据可能会出现上面提到的行运行问题,那么使用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
时,它会产生空字符串(与简单的正则表达式不匹配)。在循环时执行会更容易一些,一次读取一行,因为当你找到你的触发器时,你可以很容易地读取额外的一行(假设您没有一行中有“ABC”
):
对于foreach
来说,这样做很尴尬,因为它每次通过循环时都会处理相同数量的元素
如果您处理的数据可能会出现上面提到的行运行问题,那么使用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
操作时,它会生成空字符串(与简单的正则表达式不匹配)