2012-12-13 40 views
0

4個元素我如何以下列表拆分爲使用TCL斯普利特以下列表進入使用TCL

W.1.Agg-251 :: ethernet17/24 Z.1.Acc-2 :: ethernet17 4個要素/ 1

我試圖如下,但中間的兩個元素看起來是粘在一起,

組C [分裂$ C ::] {\ W.1.Agg-251 {} {ethernet17/24 Z.1.Acc-2} {} ethernet17/1}

更新:

如果我按照原樣傳遞列表,但下面提供的解決方案確實有效,但是當我將它作爲變量傳遞給下方時,我再次看到中間元素粘在一起。

像這樣:

set list2 [lindex $list 0] 

O/P ==> W.1.Agg-251 :: ethernet17/24 Z.1.Acc-2 :: ethernet17/1

set list3 [split [string map {:: :} $list2] ":" ] 

o/p ==> {W.1.Agg-251} {ethernet17/24 Z.1.Acc-2} ethernet17/1

+0

富,也就是說輸入列表是如何,我期望的輸出是包含四個元素的另一個列表{{W.1.Agg-251} {ethernet17/24} {Z.1.Acc-2} {ethernet17/1}} – Zuckerberg

+0

關於您的更新:您失敗分割中間元素,因爲你只傳遞一個冒號來分割。在我的例子中,我將split chars集合設置爲冒號和空格(例如:「:」)。所以它分裂在冒號和空格上。 – patthoyts

回答

0

所有你需要做的是用空格「「來替代「::」:

set list2 [string map {"::" " "} $list] 

驗證:

foreach token $list2 { puts ">$token<" } 

輸出:

>W.1.Agg-251< 
>ethernet17/24< 
>Z.1.Acc-2< 
>ethernet17/1< 
0

你說4個元素,但我只看到3個元素(兩個::對)。你確定24和Z之間的空間不應該是::而是?

+0

美孚,這是如何輸入列表,我想要的輸出是另外四個元素的列表{{W.1.Agg-251} {ethernet17/24} {Z.1.Acc-2} {ethernet17/1} } – Zuckerberg

1

要分割的第二個參數不是要分割的字符串,而是可用於分割的一組字符。請注意以下示例:

% split {a::b::c::d} :: 
a {} b {} c {} d 
% split {a::b::c::d} : 
a {} b {} c {} d 

您試圖執行的操作似乎是對「::」和空格進行分割。你應該先壓扁::序列,然後如下分割:

% split [string map {:: :} {W.1.Agg-251::ethernet17/24 Z.1.Acc-2::ethernet17/1}] ": " 
W.1.Agg-251 ethernet17/24 Z.1.Acc-2 ethernet17/1 
+0

如果碰巧在字段中有單個冒號,則使用字符串映射將雙冒號更改爲空格,然後使用默認分隔符分割:set result [split [string map {::「」} $ c]]' –