こんにちは、私はしばらくの間、特定の変数の値に応じて、グラフビルダーから取得したグラフが変化するコードをJSLで書こうとしていました。
現在の具体的な例は非常に単純です。チェック ボックスがあり、ユーザーの選択 (オン/オフ) に応じて、ローカル フィルターを使用してグラフにグループを追加または削除したいと考えています。 これは非常に簡単な例です
dt = Open( "$SAMPLE_DATA/Analgesics.jmp" );
// Open Analgesics
cb = 1; // Predefined value<BR /><BR />// Check box to Remove group A from the graph
usw = New Window("Ignore A?", << Modal,
//Check Box defaulted to checked ignore
checkIgnore = check box({"Ignore A?"},
<< Set(1,1),
cb = checkIgnore << Get())
);
// Answer to Cancel or close buttons
If( usw["button"] == -1, throw("User cancelled") );
show(cb); // I can see how the value of cb changes between 0 and 1
nw = New Window( "Example Report",
// Box plot with dots
dot_box_plot = dt << Graph Builder(
Show Control Panel( 0 ),
Show Legend( 0 ),
Show Title( 0 ),
Variables( X(:drug ), Y( :pain ), Color(:drug ) ),
Elements( Position( 1, 1 ), Points( X, Y, Legend( 2 ) ), Box Plot( X, Y, Legend( 3 ) ) ),
Elements( Position( 2, 1 ), Points( X, Y, Legend( 2 ) ), Box Plot( X, Y, Legend( 3 ) ) ),
SendToReport( Dispatch( {}, "X title", TextEditBox, {Set Text( "" )} ) ),
/* This is the part that I'd like to make interactive
to keep or remove A-group from the plot depending on
user selection */
if(cb == 1,
Local Data Filter(
Close Outline( 1 ),
Add Filter( columns( :drug ),
Where( :Drug != "A" )
)
)
)
)
);ご覧のとおり、何も変更されず、プロットではすべてのグループが保持されるため、if ステートメントに何か問題があるはずです。 そしてもちろん、IF() 部分だけを削除すると、プロットはグループ A を無視します。
ご提案をいただければ幸いです。
こんにちは、ジム。まだ最先端のスクリプトについて助けが必要です。簡単に言うと、スクリプトはユーザーに 1 ~ 5 のレジスタ番号を入力するよう求めます。
while ステートメントまたは if ステートメントを追加しても、スクリプトは何も行いません。 if 文を while または if ステートメントなしで 1 つの式を追加するだけで、正常に動作します。
しかし、私は複数のレジスタで半分動作しようとしています。通常は個々のレジスタのファイルを取得し、5つの多様性すべてをカバーするために単一のスクリプトを使用したいと考えていました。
前もって感謝します。
サム
以下の完全なスクリプト
w = New Window( "分析するレジスタ番号を入力してください", // タイトルとこの内容を含むウィンドウが開きます...
Border Box( top( 20 ),bottom( 20 ), Left( 160 ), Right( 160 ), // 粉飾決算
V List Box( // V リストと H リストは表示ボックスを整理するためにネストされます
H Center Box( Text Box( "下のレジスタ番号を入力してください" ) ), // 2 番目のタイトル、中央揃え
Spacer Box( size( 1, 10 ) ), // わずかな垂直スペース
// H List Box( Text Box( "value 1: " ), Number Edit Box( v1 ) ), // データ入力
H List Box( Text Box( "Enter Register Num:" ), Register_Num_teb = Text Edit Box( "", <
Spacer Box( size( 1, 10 ) ), // わずかな垂直スペース
H Center Box( // ボタンを中央に配置します
Button Box( "Continue", // ボタンが押されたときにこのスクリプトが実行されます...
Register = Register_Num_teb << get text();
// 値を含む新しいテーブルを作成します...
//////////////////////////////////////////////// ////////////////////////////////////////ループの開始
While( レジスタ == 1,
dothis = Expr(
新しい列( "start_time"、数値、連続、式( (:rise_time_scope_v_vout * 1000) / 0.8 ) )
);
これを行う;
dt << MoveSelectedColumns( {:start_time}, After( :Register1_active ) );
dothis = Expr(
新しい列( "SoftStart_Accuracy%",
数値、
継続的、
Formula(((:Register1_tsoftstart - :start_time) / :Register1_tsoftstart) * 100 )
)
);
これを行う;
dt << MoveSelectedColumns( {:SoftStart_Accuracy%}, After( :start_time ) );
);
While( レジスタ == 2,
dothis = Expr(
新しい列( "start_time"、数値、連続、式( (:rise_time_scope_v_vout * 1000) / 0.8 ) )
);
これを行う;
dt << MoveSelectedColumns( {:start_time}, After( :Register2_active ) );
dothis = Expr(
新しい列( "SoftStart_Accuracy%",
数値、
継続的、
Formula(((:Register2_tsoftstart - :start_time) / :Register2_tsoftstart) * 100 )
)
);
これを行う;
dt << MoveSelectedColumns( {:SoftStart_Accuracy%}, After( :start_time ) );
);
While( レジスタ == 3,
dothis = Expr(
新しい列( "start_time"、数値、連続、式( (:rise_time_scope_v_vout * 1000) / 0.8 ) )
);
これを行う;
dt << MoveSelectedColumns( {:start_time}, After( :Register3_active ) );
dothis = Expr(
新しい列( "SoftStart_Accuracy%",
数値、
継続的、
Formula(((:Register3_tsoftstart - :start_time) / :Register3_tsoftstart) * 100 )
)
);
これを行う;
dt << MoveSelectedColumns( {:SoftStart_Accuracy%}, After( :start_time ) );
);
While( レジスタ == 4,
dothis = Expr(
新しい列( "start_time"、数値、連続、式( (:rise_time_scope_v_vout * 1000) / 0.8 ) )
);
これを行う;
dt << MoveSelectedColumns( {:start_time}, After( :Register4_active ) );
dothis = Expr(
新しい列( "SoftStart_Accuracy%",
数値、
継続的、
Formula(((:Register4_tsoftstart - :start_time) / :Register4_tsoftstart) * 100 )
)
);
これを行う;
dt << MoveSelectedColumns( {:SoftStart_Accuracy%}, After( :start_time ) );
);
While( レジスタ == 5,
dothis = Expr(
新しい列( "start_time"、数値、連続、式( (:rise_time_scope_v_vout * 1000) / 0.8 ) )
);
これを行う;
dt << MoveSelectedColumns( {:start_time}, After( :Register5_active ) );
dothis = Expr(
新しい列( "SoftStart_Accuracy%",
数値、
継続的、
Formula(((:Register5_tsoftstart - :start_time) / :Register5_tsoftstart) * 100 )
)
);
これを行う;
dt << MoveSelectedColumns( {:SoftStart_Accuracy%}, After( :start_time ) );
);
///////////////////////////////////////////////// ////////////////////////////////////////
// 必要に応じて、ダイアログを閉じます。 または、もう一度実行することもできます...
w << closeWindow; // レポートではなくダイアログのみ
)
)
)
)
);
プラットフォーム コードの変更を処理する推奨される方法は、プラットフォームの初期処理の後にメッセージをプラットフォームに渡すことです。プラットフォームのステートメントを変更しようとすると、非常に煩雑になり、不安定になりすぎます。
以下は、グラフ ビルダー プラットフォームの実行後にフィルターを追加するように変更されたスクリプトです。そして、ローカル データ フィルターの実際の表示を非表示にします。

Names Default To Here( 1 );
dt = Open( "$SAMPLE_DATA/Analgesics.jmp" );
// Open Analgesics
cb = 1; // Predefined value// Check box to Remove group A from the graph
usw = New Window( "Ignore A?",
<<MODAL></MODAL>