Scripting Tcl格式化:如何使用格式化显示多个行和列

Scripting Tcl格式化:如何使用格式化显示多个行和列,scripting,tcl,Scripting,Tcl,我需要根据变量n打印以下内容 示例:如果n=2 我需要打印: 1. -3 0 2. 3 0 3. 0 -3 4. 0 3 1. -3 0 0 2. 3 0 0 3. 0 -3 0 4. 0 3 0 5. 0 0 -3 6. 0 0 3 1. -3 0 0 0 2. 3 0 0 0 3. 0 -3 0 0 4. 0 3 0 0 5. 0 0 -3 0 6. 0 0 3 0 7. 0 0 0 -3 8. 0 0 0 3 1. -3 0 2.3 0 3.0 -3 4.0 3

我需要根据变量n打印以下内容

示例:如果n=2 我需要打印:

1. -3 0 2. 3 0 3. 0 -3 4. 0 3 1. -3 0 0 2. 3 0 0 3. 0 -3 0 4. 0 3 0 5. 0 0 -3 6. 0 0 3 1. -3 0 0 0 2. 3 0 0 0 3. 0 -3 0 0 4. 0 3 0 0 5. 0 0 -3 0 6. 0 0 3 0 7. 0 0 0 -3 8. 0 0 0 3 1. -3 0 2.3 0 3.0 -3 4.0 3 如果n=3 我需要打印:

1. -3 0 2. 3 0 3. 0 -3 4. 0 3 1. -3 0 0 2. 3 0 0 3. 0 -3 0 4. 0 3 0 5. 0 0 -3 6. 0 0 3 1. -3 0 0 0 2. 3 0 0 0 3. 0 -3 0 0 4. 0 3 0 0 5. 0 0 -3 0 6. 0 0 3 0 7. 0 0 0 -3 8. 0 0 0 3 1. -3 0 0 2.3 0 0 3.0 -3 0 4.0 3 0 5.0 0 -3 6.0 0 3 如果n=4,我需要打印:

1. -3 0 2. 3 0 3. 0 -3 4. 0 3 1. -3 0 0 2. 3 0 0 3. 0 -3 0 4. 0 3 0 5. 0 0 -3 6. 0 0 3 1. -3 0 0 0 2. 3 0 0 0 3. 0 -3 0 0 4. 0 3 0 0 5. 0 0 -3 0 6. 0 0 3 0 7. 0 0 0 -3 8. 0 0 0 3 1. -3 0 0 0 2.3 0 0 0 3.0 -3 0 0 4.0 3 0 0 5.0 0 -3 0 6.0 0 3 0 7.0 0 0 -3 8.0 0 0 3
这里需要的关键是
格式
。它非常适合以固定宽度的文本形式生成输出。现在,为
格式
字符串编写格式项是一门艺术(与C中的
sprintf()
做同样的事情密切相关),这是现在很多人所缺乏的,但是如果你只是在做
n==4
的情况下,这就是你想要的:

puts [format "%d. %2d %2d %2d" $count $c1 $c2 $c3]
然而,在本例中,您遇到了一个更复杂的问题,因为您有一个可变数量的字段。这使得事情变得更加棘手;您可能最好借助于一个对单行进行格式化的过程来逐步构建内容:

proc generateLine {n i} {
    set line [format "%d." $i]
    for {set x 1} {$x <= $n} {incr x} {
        # Double-ternary conditional operator
        set v [expr {$i == $x*2-1 ? -3 : $i == $x*2 ? 3 : 0}]
        append line [format " %2d" $v]
    }
    return $line
}
proc generateLine{ni}{
设置行[格式“%d.”$i]

对于{set x 1}{$x,请查看、、和。可能还有
incr
。我不确定前面的计数器是否存在。