我在tcl中有一个数组。 例如:
set a(1) "First element"
set a(2) "second element"
parray a
parray a
将输出显示为
a(1) = "First element" a(2) = "second element"
是否可以将parray
输出重定向到文件?
答案 0 :(得分:3)
parray
命令无法重定向。这是一个简单的程序,太愚蠢,无法重定向。但它的source code并不长;事实上,它足够短,以至于我只是将它粘贴在这里(它是在Tcl许可下):
proc parray {a {pattern *}} {
upvar 1 $a array
if {![array exists array]} {
return -code error "\"$a\" isn't an array"
}
set maxl 0
set names [lsort [array names array $pattern]]
foreach name $names {
if {[string length $name] > $maxl} {
set maxl [string length $name]
}
}
set maxl [expr {$maxl + [string length $a] + 2}]
foreach name $names {
set nameString [format %s(%s) $a $name]
puts stdout [format "%-*s = %s" $maxl $nameString $array($name)]
}
}
重定向(提示:更改从stdout
获取的内容的open … a
,之后不要忘记close
这应该是一个简单的练习。
答案 1 :(得分:0)
这是基于 Dinesh 和 Donal Fellows 的回答:您可以自动调整 parray
的代码,如下所示:
auto_load parray
proc printArray {a {pattern *} {channel stdout}} \
[string map {stdout $channel} [info body parray]]
这为您提供了一个带有可选通道参数的新过程 printArray
。