重定向;“帕雷”;输出到tcl中的文件

重定向;“帕雷”;输出到tcl中的文件,tcl,Tcl,我在tcl中有一个数组。 例如: set a(1) "First element" set a(2) "second element" parray a 阵列a将输出显示为 a(1) = "First element" a(2) = "second element" a(1)=“第一元素” a(2)=“第二元素” 是否可以将parray输出重定向到文件?无法重定向parray命令。这是一个简单的程序,太愚蠢了,无法重定向。但它不是很长;事实上,它很短,我只想将它粘贴到这里(它在Tcl许可

我在tcl中有一个数组。 例如:

set a(1) "First element"
set a(2) "second element"
parray a 
阵列a
将输出显示为

a(1) = "First element" a(2) = "second element" a(1)=“第一元素” a(2)=“第二元素”
是否可以将
parray
输出重定向到文件?

无法重定向
parray
命令。这是一个简单的程序,太愚蠢了,无法重定向。但它不是很长;事实上,它很短,我只想将它粘贴到这里(它在Tcl许可证下):


重定向它(提示:对于从
open…a
获取的内容,更改
stdout
,并且不要忘记
之后关闭它)应该是一个简单的练习。

您可以使用
rename
命令覆盖
parray
,添加您自己的想法。执行
info body parray
。您现在有了
parray
代码,可以玩了。或者,您可以覆盖
put
本身。(因为
parray
使用
put
在控制台上打印)我不明白。你能举个例子吗?如果你想在tcl外壳上看到源代码:
auto_load parray;信息参数帕雷;信息主体阵列
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)]
    }
}