TCL用特殊字符分割字符串

时间:2020-06-04 06:25:16

标签: list tcl

我在tcl中有一个字符串说:

set name "a_b_c_d"

我想从中获取4个变量,例如$ a将具有值,$ b将具有值b,等等...

非常感谢!

2 个答案:

答案 0 :(得分:1)

这正是split命令的作用。您只需要提供可选参数即可,该参数说明使用什么字符将字符串拆分为字段列表。

set fields [split $name "_"]

请注意,如果连续有两个分割字符,则结果中将出现一个空列表元素。

答案 1 :(得分:0)

您的要求在我看来有点奇怪,但这就是我的做法:

set name a_b_c_d
foreach item [split $name "_"] {
    set $item $item
}

您并没有要求以下内容,但我认为如果使用数组可能会更好,因此您可以确切地知道变量的位置,而不是仅仅在公开场合出现“ ”。

set name a_b_c_d
foreach item [split $name "_"] {
    set items($item) $item
}

parray items
# items(a) = a
# items(b) = b
# items(c) = c
# items(d) = d

编辑:既然您在评论中提到了它,那么我就把它放在这里:如果情况如您所说,我可能会这样:

lassign [split $name "_"] varName folderName dirName

它应该在大多数时间仍然有效。不建议使用动态变量名,并且可以避免90%的时间使用更安全,更易读和可维护的代码。当然,它适用于您只需要在蓝色月亮中度过一次的事情,但是您需要知道自己在做什么。