如何在tcl中以表格格式打印?

cra*_*rog 8 format tcl

我试图在tcl中以表格格式打印数据.假设我有三个数组: -

GOLD, TEST, DIFF它有一些价值.我想以下列格式打印: -

GOLD TEST DIFF
----------- -------- ---------
     1 Hello Hi
     2 Stack Format
     3个用于
     4个TCL打印的人

你们想建议一下吗?

RHS*_*ger 15

我会使用format命令结合foreach来完成你所要求的.我假设你实际上有3个列表,而不是3个数组,因为看起来gold,test,diff的值在某种程度上彼此相关.

set goldList {1 2 3 4}
set testList {Hello Stack Guys TCL}
set diffList {Hi Format for print}

set formatStr {%15s%15s%15s}
puts [format $formatStr "GOLD" "TEST" "DIFF"]
puts [format $formatStr "----" "----" "----"]
foreach goldValue $goldList testValue $testList diffValue $diffList {
    puts [format $formatStr $goldValue $testValue $diffValue]
}

# output
       GOLD           TEST           DIFF
       ----           ----           ----
          1          Hello             Hi
          2          Stack         Format
          3           Guys            for
          4            TCL          print
Run Code Online (Sandbox Code Playgroud)


Tre*_*son 4

下面的代码可以使用单个 foreach 循环完成您想要的操作。不需要创建临时列表 - 假设您有数组的公共索引(您没有指定)。

array set GOLD {a 1 b 2 c 3 d 4}
array set TEST {d TCL c Guys b Stack a Hello}
array set DIFF {a Hi c for b Format d print}
foreach idx [lsort [array names GOLD]] {
  puts "$GOLD($idx)\t$TEST($idx)\t$DIFF($idx)"
}
Run Code Online (Sandbox Code Playgroud)

如果您没有数组的通用索引(那么我想知道打印表的实用性),您可以这样做(尽管相对顺序未定义):

foreach {gidx gval} [array get GOLD] {tidx tval} [array get TEST] {didx dval} [array get DIFF] {
  puts "$gval\t$tval\t$dval"
}
Run Code Online (Sandbox Code Playgroud)