我有一个变量,我想拆分并将块分配给标量变量。
示例:
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"
这似乎不起作用。还有其他办法吗?
答案 0 :(得分:4)
此处不需要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
将获得空字符串,因为field
中只有一个元素),然后在循环的下一次迭代中,将7
分配给net
(覆盖先前的分配)和最后一次迭代,将T
分配给net
。
这就是为什么当您尝试打印变量时,最终只能使用T
。
答案 1 :(得分:1)
只需删除foreach
即可。你想要做的实际上是这样的:
lassign [split $variable #] net layer border
在旧版本的tcl中,lassign
不可用,它曾经是使用/滥用foreach的习惯用法:
foreach {net layer border} [split $variable #] {}
你在编写foreach时的想法可能就像这种动态编程风格:
foreach varname {net layer border} value [split $variable #] {
set $varname $value
}