2

例如,考虑文件“abc.txt”具有以下内容

{apple_Text "1"}

{banana_Text "2"}

{orange_Text "3"}

现在,我想在该文件中搜索“apple_Text”关键字,如果找到它应该在其中打印第二列值,即“1”。我可以知道如何在 Tcl 中做到这一点吗?

4

3 回答 3

5

这是我的解决方案:

set f [open abc.txt]
while {[gets $f line] != -1} {
    if {[regexp {apple_Text\s+"(.*)"} $line all value]} {
        puts $value
    }
}
close $f

基本上,我在每一行中搜索“apple_Text”并从该行中提取值。

于 2013-05-23T17:57:46.203 回答
2

这是一个甜蜜的简短解决方案:

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_Text1
如果这与您的输入不匹配,那么事情会稍微复杂一些。

于 2013-05-23T14:11:06.330 回答
0

你可以使用以下

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
于 2013-05-23T13:52:45.203 回答