拆分并分配给 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
分配给 net
(layer
和 border
将得到空字符串,因为 [=16 中只有一个元素=]),然后在循环的下一次迭代中将 7
分配给 net
(覆盖之前的分配)和最后一次迭代,将 T
分配给 net
.
这就是为什么当您尝试打印变量时,您最终也只得到 T
。
我有一个变量,我想拆分块并将其分配给标量变量。
示例:
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
分配给 net
(layer
和 border
将得到空字符串,因为 [=16 中只有一个元素=]),然后在循环的下一次迭代中将 7
分配给 net
(覆盖之前的分配)和最后一次迭代,将 T
分配给 net
.
这就是为什么当您尝试打印变量时,您最终也只得到 T
。