如何在TCL中按行拆分变量?

时间:2019-01-17 09:44:08

标签: list indexing split tcl

我有一个名为“ 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个列表?

2 个答案:

答案 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";
}
}