Ich habe das Gefühl, dass ich etwas auf die besonders harte Art und Weise gemacht habe, was eigentlich eine relativ unkomplizierte Aufgabe sein sollte.Ich frage mich, ob jemand sonst einen Rat für einen besseren Ansatz hat.

Ich versuche, eine benutzerdefinierte Tabelle wie die hier gezeigte zu erstellen, in der jeder Eintrag in der Spalte „Wert“ eine unterschiedliche Anzahl von Dezimalstellen haben kann.Im Beispiel unten sollte „N“ 0 Dezimalstellen haben, „Mean“/„SD“/„LCL (3SD)“/„UCL (3SD)“ sollte genau vier Dezimalstellen haben, „Pp“ sollte genau zwei Dezimalstellen haben Stellen usw. - einschließlich eventueller nachgestellter Nullen.Diese Werte stammen aus einer Datentabelle, in der die Werte in Spalten in der ersten Zeile mit dem Spalteneintrag „Stat“ als Spaltenüberschriften eingegeben werden.
Ursprünglich habe ich dies als Tabellenbox eingerichtet, mit einer eingebetteten String-Col-Box und einer Number-Col-Box:
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] })
);Es scheint jedoch, dass das Feld „Zahlenspalte“ über eine eigene Einstellung für das Zahlenformat verfügt, die für alle Einträge in diesem Feld gilt.
Nach langem Ausprobieren habe ich festgestellt, dass die Verwendung von Char() oder Format() (mit Angabe von Format/Dezimalstellen) funktioniert, um die einzelnen Elemente im Voraus vom Zahlen- in das Zeichenformat zu konvertieren. z.B,
Column( dt, "Pp")[1] = Format( Round( Column( dt, "Pp")[1], 2), "Fixed Dec", 2);
Ersetzen Sie dann das Number Col Box durch ein zweites String Col Box und fügen Sie die konvertierten Werte als Strings hinzu, z. B.
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] })
);Gibt es einen einfacheren Weg, den ich übersehe?
Beiseite:
- Heute habe ich erfahren, dass die Funktion Format() numerische Daten in Zeichendaten umwandelt.Ich dachte, das wäre nur eine Änderung des Formats numerischer Daten.
- Heute habe ich erfahren, dass man zu Char() Breiten- und Dezimalstellenattribute hinzufügen kann.Andernfalls werden nachgestellte Nullen abgeschnitten.
(ohne Ihre Originaldaten zu sehen) Die Verwendung einer String-Col-Box ist höchstwahrscheinlich die einfachste Option. Sie können die Daten entweder im richtigen Format aus Ihrer ursprünglichen Datentabelle abrufen oder sie konvertieren, bevor Sie Werte zur String Col Box hinzufügen (ein assoziatives Konfigurationsarray könnte hilfreich sein).
Format() - Konvertiert den Wert X in das zitierte Format die Sie in den nachfolgenden Argumenten angeben.(Skriptindex aus irgendeinem Grund? Der Grund hat eine andere Beschreibung)
Vielen Dank für das Feedback, Jarmo.
Nachdem ich mich genauer umgesehen habe, stimme ich Ihnen zu – es scheint, als ob es flexibler wäre, die Dinge als Strings beizubehalten.
Nach meinem ersten Beitrag bin ich auf diese nette Einführung zu den Ansätzen „Col Box -> Text Box“ gestoßen, die der Verwendung von „String Col Box“ zu ähneln scheint, aber mehr Flexibilität bei der Formatierung einzelner Zeilenelemente (Ränder, Schattierung usw.) bietet – https://community.jmp.com/t5/Discovery-Summit-2018/Supercharge-Your-User-Interfaces-in-JSL-US-2018-113/ta-p/73744#U73744 . Ich treibe diesen Ansatz voran.
Nachdem ich etwas über Col Box erfahren und etwas mehr darüber nachgedacht habe, wird mir klar, dass meine ursprüngliche Frage eher dahingehend war, ob es ein numerisches Analogon zu Text Box gibt.Aber ich sehe eine solche Option nicht.
- Joel
Col Box ist schön, weil man es sehr individuell anpassen kann, aber es hat auch seine „Probleme“. Es ist schwieriger, daraus Werte abzurufen, und es verhält sich möglicherweise auch nicht so, wie Sie denken, wenn Sie danach sortieren möchten
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);
Ich habe Col Box auch verwendet, wenn ich mehr Anpassungen vornehmen wollte. Ein Beispiel ist der Wunsch, mehrere Zeilen für String Col Box zu haben. Das ist nicht möglich, daher müssen Sie „Col Box“ und „Text Box with N Lines“ verwenden (dies führt jedoch dazu, dass alle so hoch sind). Oder wenn ich Radioboxen oder Kontrollkästchen im Tabellenformat haben möchte, ist Col Box eine gute Option.