我有一个名为“ results”的变量,其值为:
{0 0 0 0 0 0 0 0 0 0 0 3054 11013}
{0 0 0 0 0 0 0 0 0 0 0 5 13 15}
{0.000 3272.744 12702.352 30868.696}
我想将每行(“ {}”之间的值)存储在一个单独的变量中,然后将每行的每个元素与一个阈值进行比较(此阈值对于每行都会有所不同,这就是为什么)我需要将它们拆分)。
我尝试过
set result [split $results \n]
但是它并没有真正为我提供整洁的元素列表。是否可以从变量“结果”中获得3个列表?
答案 0 :(得分:0)
如果我理解正确,并且您的示例数据的表示准确,那么您不必处理[split]
所保存的数据,而只需将其留给Tcl的列表解析器即可。换句话说,输入已经是符合进一步处理条件的Tcl列表的有效字符串表示形式。观看:
results
这将产生:
set results {
{0 0 0 0 1}
{2 2 3 3 3}
{1 1 2 3 4}
};
set thresholds {
3
2
1
}
lmap values $results threshold $thresholds {
lmap v $values {expr {$v >= $threshold}}
}
背景:{0 0 0 0 0} {1 1 1 1 1} {1 1 1 1 1}
处理$results
时,它将自动变成一个列表。
答案 1 :(得分:-1)
我认为最好根据换行符进行拆分,然后应用正则表达式来获取数据。我已经尝试了一个示例代码。
set results "{0 0 0 0 1}
{2 2 3 3 3}
{1 1 2 3 4}";
set result [split $results \n];
foreach line $result {
if {[regexp {^\s*\{(.+)\}\s*} $line Complete_Match Content]} {
puts "$Content\n";
}
}