2017-02-21 96 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