0

TCLを使用して次のリストを4つの要素に分割するにはどうすればよいですか?

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

以下のように試してみましたが、真ん中の2つの要素がくっついているようです、

set c [split $ c ::] {\ W.1.Agg-251 {} {ethernet17 / 24 Z.1.Acc-2} {} ethernet17 / 1}

アップデート:

以下に示す解決策は、リストをそのまま渡すと機能しますが、下の変数liekとして渡すと、真ん中の要素がくっついているのがわかります。

そのようです :

 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

分割する 2 番目のパラメーターは、分割する文字列ではなく、分割に使用できる文字のセットです。次の例に注意してください。

% 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

「::」をスペース「」に置き換えるだけです。

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 に答える
0

あなたは 4 つの要素と言いましたが、3 つの要素しか表示されません (2 つの :: ペア)。24 と Z の間のスペースを :: にしないでください。

于 2012-12-13T23:14:36.127 に答える