使用TCL将以下列表拆分为4个元素

时间:2012-12-13 23:09:18

标签: string list split tcl

如何使用TCL将以下列表拆分为4个元素

W.1.Agg-251 :: ethernet17 / 24 Z.1.Acc-2 :: ethernet17 / 1

我尝试如下,但中间的两个元素看起来是粘在一起的,

设置c [split $ 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

3 个答案:

答案 0 :(得分: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

答案 1 :(得分:0)

你说了4个元素,但我只看到3个元素(两个::对)。你确定24和Z之间的空格不应该是::而是吗?

答案 2 :(得分:0)

您需要做的就是将“::”替换为空格“”:

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

验证

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

输出:

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