重定向" parray"输出到tcl中的文件

时间:2015-12-11 10:37:38

标签: tcl

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

set a(1) "First element"
set a(2) "second element"
parray a 

parray a将输出显示为

a(1) = "First element"  
a(2) = "second element"  

是否可以将parray输出重定向到文件?

2 个答案:

答案 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