2016-09-16 97 views
0

我有我返回字符串轉換成以下方式字符串分割和儲存價值TCL

% 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

那你試試? –

+0

分裂{}但沒有工作 – user765443

+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}

這是一個列表本身,在第二循環中你要這個列表中的每個元素分配給你設計的變量。

+2

在Tcl 8.5或更高版本中,您也可以使用'lassign $ token x1 y1 x2 y2'進行賦值。 –

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