拆分并分配给 TCL 中的标量变量

split and assign into scalar variables in TCL

我有一个变量,我想拆分块并将其分配给标量变量。

示例:

Variable = vdd_not_gated#7#T

我要分配:

net = VDD_NET1
Layer = 7
border = T

我在 TCL 中尝试了以下代码:

set variable vdd_not_gated#7#T
set fields [split $variable #]
foreach field $fields {
    lassign $field net layer border
}
puts "$net $layer $border"

这似乎不起作用。还有其他办法吗?

只需删除 foreach。你要做的其实是这样的:

lassign [split $variable #] net layer border

lassign 不可用的旧版本 tcl 中,它曾经是 use/abuse foreach:

的成语
foreach {net layer border} [split $variable #] {}

你写foreach的时候在想什么,大概是这样的动态编程风格:

foreach varname {net layer border} value [split $variable #] {
    set $varname $value
}

这里不需要 foreach 循环:

set variable vdd_not_gated#7#T
set fields [split $variable #]
lassign $fields net layer border
puts "$net $layer $border"

您的代码所做的是首先将 vdd_not_gated 分配给 netlayerborder 将得到空字符串,因为 [=16 中只有一个元素=]),然后在循环的下一次迭代中将 7 分配给 net(覆盖之前的分配)和最后一次迭代,将 T 分配给 net.

这就是为什么当您尝试打印变量时,您最终也只得到 T