一意の値を表示するコンボ ボックスを作成するにはどうすればよいですか?親愛なるみんな、
このスクリプトは、書籍「JUMP into JMP」のスクリプトに似ています。
スクリプトはユーザーに「DCM」を選択するように要求し、この選択に基づいて「DieNo」リストが設定されます。
ここにはいくつかの問題があります。 「DCM 番号」リストは昇順ではありません。
その他の問題として、DCM 番号を選択すると、「DieNo」リストが表示されます。 ただし、これではすべての値がリストされます。一意の値のみをリストしたいのです。
両方の列のデータ型は char ですが、ここでは数値データ型は機能しません。 この問題に関するアドバイスがあれば。
/* Open the sample data table */
dt = Open( "$Desktop/JMP scripts/SampleData.jmp" );
/* Create lists of the values found in the DCMNo and Die columns*/
Unique DCM=Associative array(dt:DCMNo);
nitems(unique DCM);
DCM1= unique DCM<<GET keys=""></GET>
日付選択コンボボックスも含めようとしています。 これに最適な投稿で簡単なオプションは「日付データ フィルター」でした。
JMP では、日付のカレンダー {出発日から到着日までのフライトを予約するときに表示される短いカレンダー} を表示できますか。
乾杯
さん
Re: 一意の値を表示するコンボ ボックスを作成するにはどうすればよいですか?スクリプトのインデックスとガイドは、この新しい機能に関してはやや弱いです。 スクリプト ガイドの例は、もう少し強化される可能性があります。 カレンダーを表示するより良いものは次のとおりです。 日付を選択して「OK」をクリックすると、日付がログウィンドウに印刷されます。
Names Default To Here( 1 );
nw = New Window( "Calendar Box Example",
cal = Calendar Box(),
ok_button = button box("OK",
selected_date = format(cal << get date, "ddMonyyyy");
print(selected_date);
nw << close window;
)
);
Re: 一意の値を表示するコンボ ボックスを作成するにはどうすればよいですか?カレンダー ボックスを使用するのにモーダル ウィンドウは必要ありません。
カレンダー ボックスは、特殊な数値編集ボックスのように機能します。 日付を処理してくれるので、形式をいじったり、秒を日付や時刻に変換したりする必要はありません。
メッセージ プロトコルについては、「スクリプト インデックス」または「スクリプト ガイド」を参照してください。
Re: 一意の値を表示するコンボ ボックスを作成するにはどうすればよいですか?JMP 13 の新しいカレンダー box() 表示ボックスについては知りませんでした。素晴らしいですね。 でもどうやって使うの? ダイアログ ボックスが何かを返すようにするには、ダイアログ ボックスをモーダルにする必要がありました。
Names Default To Here( 1 );
New Window( "Calendar Box Example", << modal(),
cal = Calendar Box()
);
selected_date = format(cal << get date, "ddMonyyyy");
print(selected_date);
Re: 一意の値を表示するコンボ ボックスを作成するにはどうすればよいですか?また、日付形式の Number Edit Box() または新しい Calendar Box() を使用することもできます。 どちらも正常に機能しますが、ユーザーには異なるインターフェイスが表示されます。
以下は、Scripting Index からの Number Edit Box() アプローチです。
Names Default To Here( 1 );
New Window( "Example",
fontobj = numbox = Number Edit Box( 0 )
);
numbox << Set Format( Format( "m/d/y", 12 ) );
numbox << Set( Date MDY( 10, 2, 1989 ) );
以下は、これも Scripting Index から取得した Calendar Box() ソリューションです。
Names Default To Here( 1 );
New Window( "Calendar Box Example",
cal = Calendar Box()
);
Re: 一意の値を表示するコンボ ボックスを作成するにはどうすればよいですか?DCM リストはアルファベット順に並んでいます。 DCM を数値として解釈しています。 JMP は DCM を文字列として解釈します。
DCM または Die では数値が機能しないのはなぜですか? このデータ型により、順序付けの問題が解決されます。
より短い解決策のためにいくつかのことを整理しました。 ここにあります:
Names Default to Here( 1 );
/* Open the sample data table */
dt = Open( "$Desktop/SampleData.jmp" );
/* Create lists of the values found in the DCMNo and Die columns*/
DCM = Sort Ascending( Associative Array( dt:DCMNo ) << Get Keys );
Die = Associative Array( dt:DieNo ) << Get Keys;
selRows = dt << Get Rows Where( :DCMNo == DCM[1] );
initial Die Set = Associative Array( Column( dt, "DieNo" )[selRows] ) << Get Keys;
dt << Clear Column Selection();
dt << Clear Row Selection();
/* Use New Window to create a non-modal dialog to display DCMNo and Die for user to choose. */
nw = New Window( "Choose DCM Die combination",
hb = H List Box(
Panel Box( "Select a DCM Number",
select1 = Combo Box( DCM,
/* Each of the following tasks are executed when the user makes a DCMNo choice.*/
selRows = dt << Get Rows Where( :DCMNo == DCM[select1 << Get] );
myDies = Associative Array( Column( dt, "DieNo" )[selRows] ) << Get Keys;
select2 << Set Items( myDies );
)
),
Panel Box( "Select a Die",
select2 = Combo Box( initial Die Set )
)
),
/* If user clicks OK, values displayed for DCMNo and Die will be selected in table. */
Button Box( "OK",
nw << Close Window;
dt << Select where( :DCMNo == DCM[select1 << Get] & :DieNo == myDies[select2 << Get] );
/* Selected rows are subsetted into new table. */
dt << Subset( Output Table Name( "Ryobi Details" ) );
)
);Re: 一意の値を表示するコンボ ボックスを作成するにはどうすればよいですか?ドロップダウン ボックスで他の数値を選択せずにデフォルトを使用すると、エラーが発生するのはなぜですか。他の番号を選択してもエラーは発生しません。
私はバージョン 17、Mac です。
Re: 一意の値を表示するコンボ ボックスを作成するにはどうすればよいですか?@リシュアンリンスクリプト例を使用して新しいディスカッションを作成していただけますか?
Re: 一意の値を表示するコンボ ボックスを作成するにはどうすればよいですか?Mark のスクリプトと、この記事で提供されているデータを実行してみて、デフォルトのドロップダウン ボックスの番号を変更せずに押すとエラーが発生することがわかりました。他の番号を選択しても問題ありません。
/* Open the sample data table */
dt = Open( "$Desktop/SampleData.jmp" );
/* Create lists of the values found in the DCMNo and Die columns*/
DCM = Sort Ascending( Associative Array( dt:DCMNo ) << Get Keys );
Die = Associative Array( dt:DieNo ) << Get Keys;
selRows = dt << Get Rows Where( :DCMNo == DCM[1] );
initial Die Set = Associative Array( Column( dt, "DieNo" )[selRows] ) << Get Keys;
dt << Clear Column Selection();
dt << Clear Row Selection();
/* Use New Window to create a non-modal dialog to display DCMNo and Die for user to choose. */
nw = New Window( "Choose DCM Die combination",
hb = H List Box(
Panel Box( "Select a DCM Number",
select1 = Combo Box( DCM,
/* Each of the following tasks are executed when the user makes a DCMNo choice.*/
selRows = dt << Get Rows Where( :DCMNo == DCM[select1 << Get] );
myDies = Associative Array( Column( dt, "DieNo" )[selRows] ) << Get Keys;
select2 << Set Items( myDies );
)
),
Panel Box( "Select a Die",
select2 = Combo Box( initial Die Set )
)
),
/* If user clicks OK, values displayed for DCMNo and Die will be selected in table. */
Button Box( "OK",
nw << Close Window;
dt << Select where( :DCMNo == DCM[select1 << Get] & :DieNo == myDies[select2 << Get] );
/* Selected rows are subsetted into new table. */
dt << Subset( Output Table Name( "Ryobi Details" ) );
)
);Re: 一意の値を表示するコンボ ボックスを作成するにはどうすればよいですか?スクリプトを非常に簡単にチェックしましたが、問題は、コンボ ボックス内のスクリプトが最初の作成時にトリガーされないことです。 最も簡単な修正は、次のようなものを追加することです
select1 << Set(2, Run Script(0));
select1 << Set(1, Run Script(1));
スクリプトの最後まで。 これにより、コンボ ボックスの値が変更され、スクリプトが 1 回トリガーされます。
他のかなり簡単なオプションは、コンボ ボックス内のスクリプトをexpressionに変更し、ウィンドウの作成後に実行することです。
もっと見る...
または、スクリプトの最後に Eval を指定して << Get Function を使用します。
Eval(select1 << get function);
Re: 一意の値を表示するコンボ ボックスを作成するにはどうすればよいですか?ありがとう !