我有一个函数,它将字符串返回到以下方式
% set b [le::splitIntoBoxes $m1_drw -type maxX]
{1.154 0.068 1.222 0.518} {1.154 0.518 1.370 0.562}
我想在x1 y1 x2 y2中拆分字符串和存储值。我已经尝试了所有选项 但无法解决问题
% puts [regexp -all -inline {\S+} $b]
\{1.154 0.068 1.222 0.518\} \{1.154 0.518 1.370 0.562\}
我想忽略" \"所以我可以将值存储在x1 y1 x2 y2。
答案 0 :(得分:3)
看起来你有一个返回的字符串,必须将其解析为列表列表。
例如:
foreach token $b {
foreach {x1 y1 x2 y2} $token {break;}
puts "x1 $x1 y1 $y2 x2 $x2 y2 $y2"
}
第一个 foreach '将空格中的字符串拆分为。
比你有像:
{1.154 0.068 1.222 0.518}
这是一个列表本身,在第二个循环中,您要将此列表的每个元素分配给您设计的变量。
答案 1 :(得分:1)
你可以这样做:
% proc mysplit d {
concat {*}$d
}
% set b {{1.154 0.068 1.222 0.518} {1.154 0.518 1.370 0.562}}
{1.154 0.068 1.222 0.518} {1.154 0.518 1.370 0.562}
% mysplit [mysplit $b]
1.154 0.068 1.222 0.518 1.154 0.518 1.370 0.562