例如,考虑文件“abc.txt”具有以下内容
{apple_Text "1"}
{banana_Text "2"}
{orange_Text "3"}
现在,我想在该文件中搜索“apple_Text”关键字,如果找到它应该在其中打印第二列值,即“1”。我可以知道如何在 Tcl 中做到这一点吗?
例如,考虑文件“abc.txt”具有以下内容
{apple_Text "1"}
{banana_Text "2"}
{orange_Text "3"}
现在,我想在该文件中搜索“apple_Text”关键字,如果找到它应该在其中打印第二列值,即“1”。我可以知道如何在 Tcl 中做到这一点吗?
这是我的解决方案:
set f [open abc.txt]
while {[gets $f line] != -1} {
if {[regexp {apple_Text\s+"(.*)"} $line all value]} {
puts $value
}
}
close $f
基本上,我在每一行中搜索“apple_Text”并从该行中提取值。
这是一个甜蜜的简短解决方案:
set fd [open abc.txt r]
set data [read $fd]
close $fd
puts [lindex [lsearch -inline -index 0 -inline $data "apple_Text"] 1]
这只会找到第一个结果通过。
我认为输入是 Tcl 列表的有效 Tcl 列表。({apple_Text "1"}
是一个带有 1 个元素的 Tcl 列表:apple_Text "1"
,它本身就是一个带有 2 个元素的有效 Tcl 列表:apple_Text
和1
)
如果这与您的输入不匹配,那么事情会稍微复杂一些。
你可以使用以下
set fp [open "abc.txt" r]
set filecontent [read $fp]
set input_list [split $filecontent "\n"]
set appleTextList [lsearch -all -inline $input_list "apple_Text*"]
foreach elem $appleTextList {
puts "[lindex $elem 1]"
}
close $fp