首页 > 解决方案 > 在 tcl 中打印动态数组的内容

问题描述

我正在尝试从一个文件创建 n 个数组。当我尝试专门通过打印数组的值时,数组正在正确创建$array_name(PAD),我得到了正确的预期值。现在的问题是,当我尝试使用变量打印相同的值时,我没有得到该值。

例如:

set f "BC1201_MP_PM"
puts  ${f}(PAD)

输出应该是 的内容BC1201_MP_PM(PAD),但输出是“ BC1201_MP_PM(PAD)”。任何人都可以请帮忙。

提前致谢!乌特卡什

标签: arraystcl

解决方案


有几种方法可以做到这一点,有些在某些情况下会更好。

在没有任何上下文的情况下,我想说最简单的方法是使用setShawn 在评论中建议的字典:

puts [set ${f}(PAD)]

# OR
dict set mydata BC1201_MP_PM PUB foo
puts [dict get $mydata $f PUB]

如果在这种情况下您需要打印所有数组的内容,那么您不妨使用带有以下内容的循环array get

foreach {k v} [array get $f] {
    puts "The value for $k is $v"
}

在 aproc中,您可以使用upvar数组名称并将其传递给proc类似的名称:

proc foo {arrayName} {
    upvar $arrayName localArray
    puts $localArray(PAD)
}

参考资料:set, array get,upvar


推荐阅读