比較的簡単な作業であるはずのことを、余計に難しいやり方でやっているような気がします。他の誰かがより良いアプローチについてアドバイスを持っているかどうか疑問に思います。

ここに示すようなカスタム テーブルを作成しようとしています。ここでは、「値」列の各エントリの小数点以下の桁数を変えることができます。以下の例では、「N」は小数点以下 0 桁、「Mean」/「SD」/「LCL (3SD)」/「UCL (3SD)」は小数点以下 4 桁、「Pp」は小数点以下 2 桁である必要があります。場所など - 末尾のゼロも含まれます。これらの値は、列ヘッダーとして「Stat」列エントリを持つ最初の行の列に値が入力されているデータ テーブルから取得されます。
当初、私はこれをテーブル ボックスとして設定し、文字列列ボックスと数値列ボックスを埋め込みました。
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] })
);ただし、Number Col Box には、そのボックス内のすべてのエントリに適用される独自の数値形式設定があるようです。
多くの試行錯誤の結果、機能することがわかったのは、Char() または Format() (形式/小数点以下の桁数を指定) を使用して、個々の項目を数値形式から文字形式に事前に変換することです。例えば、
Column( dt, "Pp")[1] = Format( Round( Column( dt, "Pp")[1], 2), "Fixed Dec", 2);
次に、数値列ボックスを 2 番目の文字列列ボックスに置き換え、変換された値を文字列として追加します。
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] })
);私が見逃しているもっと簡単な方法はありますか?
余談:
- 今日、Format()関数が数値データを文字データに変換することを学びました。これは単に数値データの形式を変更するためのものだと思っていました。
- 今日は、Char() に幅と小数点以下の桁の属性を追加できることを学びました。それ以外の場合は、末尾のゼロが切り取られます。
(元のデータは表示されません) 文字列ボックスを使用するのが最も簡単なオプションである可能性があります。 元のデータ テーブルから正しい形式でデータを取得することも、文字列列ボックスに値を追加する前にデータを変換することもできます (構成連想配列が役立つ場合があります)。
フォーマット() -値を変換しますバツ引用文の中にフォーマット後続の引数で指定します。(スクリプトインデックスは何か良いものですか?理由の説明が異なります)
ジャーモさん、フィードバックありがとうございます。
さらに調べてみると、私もあなたの意見に同意します。文字列として保持する方が柔軟性が高いように思えます。
最初の投稿の後、Col Box -> Text Box アプローチの素晴らしい入門書に出会いました。これは String Col Box の使用に似ているように見えますが、個々の行項目 (境界線、網掛けなど) の書式設定に関してより柔軟です。 https://community.jmp.com/t5/Discovery-Summit-2018/Supercharge-Your-User-Interfaces-in-JSL-US-2018-113/ta-p/73744#U73744 。この考え方で進めていきます。
Col Box について学び、さらに考えてみると、私の最初の質問は、Text Box の数値類似物は存在するかどうかという点に近いものだったのではないかと気付きました。しかし、そのような選択肢は見当たりません。
- ジョエル
Col Box はカスタマイズができるので便利ですが、「問題」もあります。 そこから値を取得するのはより困難であり、それによって並べ替えたい場合にも、思ったように動作しない可能性があります。
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);
さらにカスタマイズしたい場合は、Col Box を使用したこともあります。 1 つの例として、String Col Box に複数の行を含めたい場合があります。 それはできないので、N 行のコル ボックスとテキスト ボックスを使用する必要があります (ただし、これによりすべてがその高さになります)。 または、ラジオ ボックスやチェック ボックスを表形式で表示したい場合は、Col Box が良い選択肢です。