Tcl 在文件中查找搜索字符串并在该行中打印下一个单词 例如,考虑一个文件“abc .txt”具有以下内容 {apple_Text "1"} {banana_Text "2"} {orange_Text "3"}

Tcl 在文件中查找搜索字符串并在该行中打印下一个单词 例如,考虑一个文件“abc .txt”具有以下内容 {apple_Text "1"} {banana_Text "2"} {orange_Text "3"},tcl,Tcl,现在,我想在该文件中搜索“apple_Text”关键字,如果找到,应该打印该文件中的第二列值,即“1”。我能知道如何在Tcl中做到这一点吗 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 $apple

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

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

这里有一个简短的解决方案:

set fd [open abc.txt r]
set data [read $fd]
close $fd
puts [lindex [lsearch -inline -index 0 -inline $data "apple_Text"] 1]
set f [open abc.txt]
while {[gets $f line] != -1} {
    if {[regexp {apple_Text\s+"(.*)"} $line all value]} {
        puts $value
    }
}
close $f
这将仅通过查找第一个结果

我认为输入是TCL列表的有效TCL列表。(

{apple_Text“1”}
是一个包含1个元素的Tcl列表:
apple_Text“1”
,它本身就是一个包含2个元素的有效Tcl列表:
apple_Text
1

如果这与您的输入不匹配,那么事情就有点复杂了。

以下是我的解决方案:

set fd [open abc.txt r]
set data [read $fd]
close $fd
puts [lindex [lsearch -inline -index 0 -inline $data "apple_Text"] 1]
set f [open abc.txt]
while {[gets $f line] != -1} {
    if {[regexp {apple_Text\s+"(.*)"} $line all value]} {
        puts $value
    }
}
close $f

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

您有编写的代码吗?我有python代码。我比tcl更了解python。这些带有文本的行之间有空行吗?它们是文件的不同版本,还是什么?(只是试图准确地理解输入内容。)如果需要帮助正确显示文本,请参阅--通常缩进4个空格即可。