2016-09-16 2 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. Я пробовал все опции , но не в состоянии исправить Issue

% 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

split {} но не работает – user765443

+0

Вставить, как вы это сделали. –

ответ

3

Похоже, что у вас есть строка, которая была возвращена, и ее необходимо проанализировать как список списков.

Так, например:

foreach token $b { 
    foreach {x1 y1 x2 y2} $token {break;} 
    puts "x1 $x1 y1 $y2 x2 $x2 y2 $y2" 
} 

Первый Еогеасп 'Раскол' строка в куски на пространствах.

чем у вас есть куски, как:

{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 
Смежные вопросы