如何用tcl分解下面列出的字符串

时间:2018-02-01 21:56:04

标签: tcl

我可以有几个可能的字符串,例如“1,1203; 2 59”,“1,1203; 2 59; 3 44”或“1,1203; 3 44”。我需要读取的方法是“1”的值为1203,“2”的值为59,“3”的值为44.始终至少有一个条目的格式为“number”空格“value”但字符串中最多可以有三组条目(如上面显示的第二个示例)。

3 个答案:

答案 0 :(得分:0)

示例:

set str1 "1, 1203;2 59;3 44"

您可能需要先拆分字符串:

set str1_list [split $str1 ";"]

那么你可以使用" regexp"对于每个项目解析:

regexp {(\d+),* *(\d+) *$} [lindex $str1_list 0] -> res1 res2

答案 1 :(得分:0)

示例代码:

bool([]) # false 
bool([2, 34]) # true

执行输出:

proc foo {data} {
    array set return_value {}
    foreach item [split $data ";"] {
      set elements [split $item]
      set key [string trimright [lindex $elements 0] ","]
      set value [lindex $elements end]
      set return_value($key) $value
    }
    return [array get return_value]
}
array set tmp [foo  "1, 1203;2 59"]
puts [parray tmp]
unset tmp

array set tmp [foo  "1, 1203;2 59;3 44"]
puts [parray tmp]
unset tmp

array set tmp [foo  "1, 1203;3 44"]
puts [parray tmp]
unset tmp

答案 2 :(得分:0)

您正在使用字符串来定义某些键(1,2,3)和某些值(1203,59,44)之间的关联关系。在Tcl中,这种关系可以简单地表示为值

{1 1203 2 59 3 44}

让我们看看我们是否可以将给定的字符串转换为此值。让我们去除任何逗号并用空格替换所有分号:

% set data [string map {, {} ; { }} "1, 1203;2 59;3 44"]
1 1203 2 59 3 44

我们已经完成了。测试:

% dict get $data 1
1203
% dict get $data 2
59
% dict get $data 3
44

文档: dictsetstring