TCL 按特殊字符拆分字符串



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

set name "a_b_c_d"

我想从中获取 4 个变量,就像$a有值一样,$b值 b 等......

多谢!

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

set fields [split $name "_"]

请注意,如果一行中有两个拆分字符,则结果中将获得一个空的列表元素。

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

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% 的时间,以获得更安全、更具可读性和可维护性的代码。当然,它适用于你在蓝月亮只需要一次的东西,但你需要知道你在做什么。

最新更新