Siento que he estado haciendo algo de una manera muy difícil que parece que debería ser una tarea relativamente sencilla.Me pregunto si alguien más tiene algún consejo sobre un mejor enfoque.

Estoy intentando crear una tabla personalizada como la que se muestra aquí, donde cada una de las entradas en la columna "Valor" puede tener un número diferente de decimales.En el siguiente ejemplo, "N" debe tener 0 decimales, "Media"/"SD"/"LCL (3SD)"/"UCL (3SD)" debe tener exactamente cuatro decimales, "Pp" debe tener exactamente dos decimales lugares, etc., con los ceros finales incluidos.Estos valores provienen de una tabla de datos donde los valores se ingresan en columnas en la primera fila con la entrada de la columna "Estadísticas" como encabezados de columna.
Originalmente configuré esto como un Table Box, con un String Col Box y un Number Col Box integrados:
nw = New Window( "nw", tb = Table Box(
scb = String Col Box( "Stat", {}),
ncb = Number Col Box( "Value", {}),
)
);
For( i = 1, i <= N Cols( dt), i++,
tb << Add Row( {Column( dt, i) << Get Name, Column( dt, i)[1] })
);Pero parece que el cuadro Number Col Box tiene su propia configuración de formato de número que se aplica a todas las entradas en ese cuadro.
Después de muchas pruebas y errores, lo que descubrí que funciona es usar Char() o Format() (con formato/lugares decimales especificados) para convertir los elementos individuales de formato de número a carácter por adelantado. p.ej,
Column( dt, "Pp")[1] = Format( Round( Column( dt, "Pp")[1], 2), "Fixed Dec", 2);
luego reemplace el cuadro de columna numérica con un segundo cuadro de columna de cadena y agregue los valores convertidos como cadenas, por ejemplo,
nw = New Window( "nw", tb = Table Box(
scb1 = String Col Box( "Stat", {}),
scb2 = String Col Box( "Value", {}),
)
);
For( i = 1, i <= N Cols( dt), i++,
tb << Add Row( {Column( dt, i) << Get Name, Column( dt, i)[1] })
);¿Hay alguna manera más fácil que me falta?
Aparte:
- Hoy aprendí que la función Format() convierte datos numéricos en datos de caracteres.Pensé que esto era sólo para cambiar el formato de los datos numéricos.
- Hoy aprendí que puedes agregar atributos de ancho y posición decimal a Char().De lo contrario, eliminará los ceros finales.
(sin ver sus datos originales) Usar el cuadro de columna de cadena es probablemente la opción más sencilla. Puede obtener los datos en el formato correcto de su tabla de datos original o puede convertirlos antes de agregar valores a String Col Box (la configuración de matriz asociativa puede ser útil).
Formato() - Convierte el valor X en el citado formato que especifique en los argumentos siguientes.(¿El índice de secuencias de comandos por alguna buena razón tiene una descripción diferente)
Gracias por los comentarios Jarmo.
Después de mirar más a mi alrededor, estoy de acuerdo contigo: parece que mantener las cosas como cadenas tiene más flexibilidad.
Después de mi publicación inicial, me encontré con esta agradable introducción a los enfoques de Col Box -> Text Box, que parece similar al uso de String Col Box, pero brinda más flexibilidad a la hora de formatear elementos de línea individuales (bordes, sombreado, etc.). https://community.jmp.com/t5/Discovery-Summit-2018/Supercharge-Your-User-Interfaces-in-JSL-US-2018-113/ta-p/73744#U73744 . Estoy avanzando con este enfoque.
Después de aprender sobre Col Box y pensar en ello un poco más, me doy cuenta de que mi pregunta original puede haber sido más parecida a si existe un análogo numérico de Text Box.Pero no veo esa opción.
-Joel
Col Box es bueno porque puedes personalizarlo mucho, pero tiene sus "problemas". Es más difícil obtener valores de él y es posible que tampoco se comporte como cree si desea ordenar por él.
Names Default To Here(1);
nw = New Window("Example",
tb = Table Box(
scb = String Col Box("strings", {"x", "y", "z"}),
cb = Col Box(
"boxes",
Text Box("a"),
Text Box("b"),
Text Box("c")
)
);
);
tb << Set Click Sort(1); // try clicking on boxes to sort
Show(tb << get);
Show(scb << get);
Show(cb << get);
Show((cb << XPath("//TextBox")) << get text);
También utilicé Col Box cuando quería tener más personalización. Un ejemplo es querer tener varias líneas para String Col Box. No puedes hacer eso, por lo que debes usar Col Box y Text Box con N líneas (aunque esto obligará a que todo sea tan alto). O si quiero tener Radio Boxes o Check Boxes en formato de tabla, Col Box es una buena opción.