0

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

W.1.Agg-251::ethernet17/24 Z.1.Acc-2::ethernet17/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

4

3 回答 3

1

split 的第二个参数不是要拆分的字符串,而是一组可用于拆分的字符。请注意以下示例:

% 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
于 2012-12-13T23:34:51.790 回答
0

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

于 2012-12-13T23:14:36.127 回答
0

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

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

核实:

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

输出:

>W.1.Agg-251<
>ethernet17/24<
>Z.1.Acc-2<
>ethernet17/1<
于 2012-12-14T14:54:38.513 回答