una tablas tabla por matriz lenguaje imprimir hacer forma for escribir con como columnas format tcl

format - por - tablas con for en c



¿Cómo imprimir en formato tabular en tcl? (4)

Estoy tratando de imprimir los datos en un formato tabular en tcl. Supongamos que tengo tres matrices:

GOLD, TEST, DIFF y tiene algunos valores. Quiero imprimirlo en el siguiente formato:

GOLD TEST DIFF
----------- -------- ---------
1 Hola, hola
2 Formato de pila
3 chicos para
4 TCL print

¿Les gustaría sugerir algo?


Aquí hay un código que hace lo que quiere con un solo bucle foreach. No es necesario crear listas temporales, suponiendo que tenga índices comunes para las matrices (no especificó).

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)" }

Si no tiene índices comunes para las matrices (entonces me pregunto si se cuestionará la utilidad de la tabla impresa), puede hacerlo (aunque el orden relativo no está definido):

foreach {gidx gval} [array get GOLD] {tidx tval} [array get TEST] {didx dval} [array get DIFF] { puts "$gval/t$tval/t$dval" }


Primero convierta las matrices en listas:

set GOLDList "" set keyList [array names GOLD] foreach key $keyList { lappend GOLDList $GOLD($key) }

Luego puedes usar el fragmento foreach:

set GOLDList "1 2 3 4"; #1st list set TESTList "Hello Stack Guys TCL"; #2nd list set DIFFList "Hi Format for print"; #3rd list foreach c1 $GOLDList c2 $TESTList c3 $DIFFList { puts $c1/t$c2/t$c3 }

Esa es la salida (necesita imprimir el encabezado extra)

1 Hello Hi 2 Stack Format 3 Guys for 4 TCL print


Una opción más compleja sería usar el paquete de informes de tcllib.

Pero eso probablemente no valga la pena en este caso simple.


Usaría el comando de formato combinado con foreach para lograr lo que estás pidiendo. Supongo que realmente tiene 3 listas, no 3 matrices, ya que parecería que los valores de oro, prueba, diferencia están relacionados entre sí de alguna manera.

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