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

时间:2015-04-24 18:02:04

标签: split 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"

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

2 个答案:

答案 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分配给netlayerborder将获得空字符串,因为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
}