Tcl:在文本文件中搜索并输出下一行的部分内容

问题描述 投票:0回答:1

我有一个 xml 文件,其中包含以下几行:

    <Integer Name="XMLVersionVal">
        <Value>16</Value>
    </Integer>

我想创建一个 tcl 脚本来查找参数 XMLVersionVal 的值,在本例中为“16”。

我已经制作了这个脚本(见下文),它工作正常,但我发现它丑陋而且太长。我想知道是否有更好的方法来做我想做的事。我基本上查看文件的每一行,找到 Name="XMLVersionVal" 的行,然后从下一行中删除 和 。

感谢您的帮助

set filePath "C:/tclWork/xml_file.xml"
if {[file exist $filePath]} {
    set xmlFile [open $filePath r]
    set file_content [read $xmlFile]
    close $xmlFile
    set xmlVerFound 0
    foreach {line} $file_content {
        if {[regexp {1} $xmlVerFound]} {
            regsub {<Value>} $line {} line
            regsub {</Value>} $line {} line
            set xmlVer $line
        }
    if {[string first {Name="XMLVersionVal"} $line] != -1} {
            set xmlVerFound 1
    } else {
            set xmlVerFound 0
        }
   }
}
tcl
1个回答
0
投票

为了简单起见,我建议如下:

## just for testing
set data {Name="XMLVersionVal"> <Value>16</Value>}
regexp -nocase {Name[\r\n\f\t\s]*=[\r\n\f\t\s]*"XMLVersionVal"[\r\n\f\t\s]*>[\r\n\f\t\s]*<Value>(.*)</Value>} $data dummy result
puts $result ;# prints 16

[\r\n\f\t\s]
的序列匹配任意白色字符=回车符、换行符、换页符、制表符、空格;

© www.soinside.com 2019 - 2024. All rights reserved.