在以下格式的TCL字符串中查找所有数字之和的最优雅方法是什么? 例如。
set s1 "{A 30.8950} {B 29.5680} {C 20.5160}"
如何找到总和,30.8950 + 29.5680 + 20.5160?
答案 0 :(得分:2)
“优雅”方法取决于您如何提取所需的输入。
以下内容只是遍历列表并提取数值。
set s1 "{A 30.8950} {B 29.5680} {C 20.5160}"
set sum 0
foreach elem $s1 {
# Extracting 2nd element to get the numerical value
set num [lindex $elem 1]
set sum [expr {$sum+$num}]
}
puts $sum
输出
80.979
答案 1 :(得分:2)
如果真的只是浮在一个字符串中,你会使用类似的东西:
<ElementPath IgnoreNamespaces="True">
datatableResponse/datatableResult{}/ltr/letters{letter,count}
</ElementPath>
如果它比那更结构化,例如元组的Tcl列表,其中每个元组的第二项是要添加的值,您可以使用:
set sum [tcl::mathop::+ {*}[regexp -all -inline {-?\d+(?:\.\d+)(?:e[-+]?\d+)} $theString]]