J'ai l'impression d'avoir fait quelque chose de très difficile qui semble être une tâche relativement simple.Je me demande si quelqu'un d'autre a des conseils sur une meilleure approche.

J'essaie de créer un tableau personnalisé comme celui présenté ici, dans lequel chacune des entrées de la colonne "Valeur" peut avoir un nombre différent de décimales.Dans l'exemple ci-dessous, "N" doit avoir 0 décimale, "Mean"/"SD"/"LCL (3SD)"/"UCL (3SD)" doit avoir exactement quatre décimales, "Pp" doit avoir exactement deux décimales. lieux, etc. - avec tous les zéros à droite inclus.Ces valeurs proviennent d'un tableau de données où les valeurs sont saisies dans des colonnes sur la première ligne avec l'entrée de colonne "Stat" comme en-tête de colonne.
À l'origine, j'ai configuré cela comme une boîte de table, avec une boîte de colonnes de chaîne et une boîte de colonnes de numéros intégrées :
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] })
);Mais il semble que la boîte Numéro Col ait son propre paramètre de format numérique qui s'applique à toutes les entrées de cette boîte.
Après de nombreux essais et erreurs, ce que j'ai trouvé qui fonctionne, c'est d'utiliser Char() ou Format() (avec le format/décimales spécifiés) pour convertir les éléments individuels du format numérique au format caractère à l'avance. par exemple,
Column( dt, "Pp")[1] = Format( Round( Column( dt, "Pp")[1], 2), "Fixed Dec", 2);
puis en remplaçant la Number Col Box par une deuxième String Col Box et en ajoutant les valeurs converties sous forme de chaînes, par exemple,
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] })
);Existe-t-il un moyen plus simple qui me manque ?
De côté:
- Aujourd'hui, j'ai appris que la fonction Format() convertit les données numériques en données caractères.Je pensais que c'était juste pour changer le format des données numériques.
- Aujourd'hui, j'ai appris que vous pouvez ajouter des attributs de largeur et de décimale à Char().Sinon, il supprimera les zéros à droite.
(sans voir vos données d'origine) L'utilisation de string col box est probablement l'option la plus simple. Vous pouvez soit obtenir les données au format correct à partir de votre table de données d'origine, soit les convertir avant d'ajouter des valeurs à String Col Box (un tableau associatif de configuration peut être utile).
Format() - Convertit la valeur X dans le cité format que vous spécifiez dans les arguments suivants.(index de script pour une bonne raison ? la raison a une description différente)
Merci pour le retour Jarmo.
Après avoir regardé autour de moi, je suis d'accord avec vous - il semble que garder les choses car les chaînes ont plus de flexibilité.
Après mon message initial, je suis tombé sur cette belle introduction aux approches Col Box -> Text Box, qui semble similaire à l'utilisation de String Col Box, mais offre plus de flexibilité dans le formatage des éléments de ligne individuels (bordures, ombrage, etc.) - https://community.jmp.com/t5/Discovery-Summit-2018/Supercharge-Your-User-Interfaces-in-JSL-US-2018-113/ta-p/73744#U73744 . J'avance avec cette approche.
Après avoir découvert Col Box et y avoir réfléchi davantage, je me rends compte que ma question initiale était peut-être davantage de savoir s'il existe un analogue numérique de Text Box.Mais je ne vois pas une telle option.
- Joël
Col Box est sympa car vous pouvez la personnaliser beaucoup, mais elle a ses "problèmes". Il est plus difficile d'en obtenir des valeurs et il se peut également qu'il ne se comporte pas comme vous le pensez si vous souhaitez effectuer un tri.
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);
J'ai également utilisé Col Box lorsque je souhaitais avoir plus de personnalisation. Un exemple est de vouloir avoir plusieurs lignes pour String Col Box. Vous ne pouvez pas faire cela, vous devez donc utiliser Col Box et Text Box avec N lignes (cela forcera cependant à ce que tout soit aussi haut). Ou si je souhaite avoir des boîtes radio ou des cases à cocher sous forme de tableau, Col Box est une bonne option.