2017-02-21 123 views
0

我想用来打印数组到一个文件:打印在表格形式排列在TCL

for {set i 0} {$i <= 9} {incr i} { 

    set j $i 
    incr j 
    set depth($j) [operation] 
} 

如何打印二维矩阵,在第2个第1行范围depth范围j行:

Level: 1 2 3 4 5 6 7 8 9 10 

Value: a b c d e f g h i j 

我曾尝试下面的代码:

set FH [open tmp.txt w] 

foreach keyVal [lsort -dic [array names depth]] { 

     puts -nonewline $FH " $keyVal\t" 
} 

puts $FH "" 

foreach keyVal [lsort -dic [array names depth]] { 

     puts -nonewline $FH "$depth($keyVal)\t" 
} 

puts $FH "" 

close $FH 

输出:

1 2 3 4 5 6 7 8 9 10 

a b c d e f g h i j 
+1

除标签(“级别”和“价值”),它看起来像你得到你想要的输出。还有其他问题吗?你的代码有点低效,你向我们展示的是一维数组,而不是你所谈论的二维数组,但我认为需要更多的信息才能作出答案。 –

回答

0

如果这是为了让人眼睛看到而不是制表符分隔的CSV,您需要确保列正确排列。

# some test data 
array set depth { 
    1 qwerty 
    2 foo 
    333 x 
    444 bar 
} 

set sep "" ; # the field separator 
foreach key [lsort -integer [array names depth]] { 
    set wid [expr {max([string length $key],[string length $depth($key)])}] 
    # or, less bracket-y 
    set wid [tcl::mathfunc::max [string length $key] [string length $depth($key)]] 

    append row1 [format {%s%-*d} $sep $wid $key] 
    append row2 [format {%s%-*s} $sep $wid $depth($key)] 
    set sep " " 
} 

puts $row1 
puts $row2 

输出

1  2 333 444 
qwerty foo x bar