評価式ユーザーにいくつかの変数を入力させようとしています。それらの変数がOKと見なされると、OKボタンがグレー表示からアクティブになります。 私はこれを機能させました。 私が機能していないのは、Eval Expr (出力) です。 これは、計算を行う前にこれが機能していることを確認するための簡単なことです。 スクリプトを実行すると、次のスクリーン ショットが表示されます。[OK] ボタンはグレー表示されます。

次に、妥当な値を入力し、検証入力をクリックすると [OK] ボタンがアクティブになります。

しかし、式を実行してテーブルを作成していません。 私は何を間違っていますか? JMP 16.0 Pro を使用しています。 先ほど言ったように、本当に必要なものを深く掘り下げる前に、スクリプトが機能していることを確認するためだけにテーブルを作成するなど、非常に簡単なことをしました。
Names Default To Here( 0 );
Clear Log();
w = New Window( "Variables",
<<MODAL>= 1 | alpha == 0,
alphaw = New Window( "Error!",
<<MODAL>= 1 | beta == 0,
betaw = New Window( "Error!",
<<MODAL> 90 | percent == 0,
percentw = New Window( "Error!",
<<MODAL> 0.90 | p0 == 0,
p0w = New Window( "Error!",
<<MODAL>= 1 | Abs( beta ) >= 1 | DOEN == 0 |
Abs( percent ) > 90 | percent == 0 | Abs( p0 ) > 0.90 | p0 ==
0 | alpha == 0 | beta == 0, bb << Enable( 0 ),
bb << Enable( 1 ),
Eval Expr( output )
);
)
),
bb = Button Box( "OK" ),
bb << Enable( 0 );
)
)
);
Show( alpha );
Show( beta );
Show( DOEN );
Show( percent );
Show( p0 );
output = Expr(
dt = New Table( "Test Table",
New Column( "a", Set Values( {alpha, beta, N, percent, p0} ) )
);
w << closeWindow;
);</MODAL></MODAL></MODAL></MODAL></MODAL>
マックOSスクリプティングRe: 評価式ありがとう! これは完全に機能しました。
Re: 評価式最初に Eval (output) を試してみましたがうまくいかなかったので、2 番目に Eval expr() を試しました。 単体で出力してみましたが、うまくいきませんでした。
Re: 評価式wの作成前に出力式を移動し、OKボタン押下時の出力を作成します。
もっと見る... また、モーダルを使用しているため、モーダルが閉じられる前にスクリプトが実行を継続しないため、モーダルが閉じられた後に新しいテーブルを作成することもできます。
必要に応じてコードを少しリファクタリングする方法の 1 つの例を次に示します (最小/最大値を [最小値を設定] および [最大値を設定] を使用して数値編集ボックスに「強制」することもできます)。 これにより、次の場合に検証ステップですべてのエラー メッセージを表示することもできます。
もっと見る...Names Default To Here(0);
Clear Log();
validator = function({alpha, beta, N, percent, p0}, {Default Local}, //could also be expression, but this way you avoid creating unnecessary variables
DOEN = 0;
For(i = 1, i < 10, i++,
If(2 ^ i == N,
DOEN = DOEN + 1
)
);
error_list = {};
If(Abs(alpha) >= 1 | alpha == 0,
Insert Into(error_list,"Alpha needs to be between 0 and 1, please fix and try again");
);
If(Abs(beta) >= 1 | beta == 0,
Insert Into(error_list,"Beta needs to be between 0 and 1, please fix and try again");
);
If(DOEN == 0,
Insert Into(error_list,"N should be 2\!U1D3A, do not include centerpoints or repeats with N, please fix and try again");
);
If(Abs(percent) > 90 | percent == 0,
Insert Into(error_list,"The percent needs to be between 0 and 90%, please fix and try again");
);
If(Abs(p0) > 0.90 | p0 == 0,
Insert Into(error_list,"The p0 needs to be between 0 and 0.90, please fix and try again");
);
If(N Items(error_list) > 0,
nw = New Window( "Error!", <<MODAL></MODAL>名前のデフォルトはここ (0) です。ログをクリア(); validator = function({alpha, beta, N, percent, p0}, {Default Local}, // 式の場合もありますが、この方法では不要な変数の作成を回避できます DOEN = 0; For(i = 1, i < 10, i++, If(2 ^ i == N, DOEN = DOEN + 1 ) ); error_list = {}; If(Abs(alpha) >= 1 | alpha == 0, Insert Into(error_list,"アルファは間にある必要があります0 と 1、修正して再試行してください"); ); If(Abs(beta) >= 1 | beta == 0, Insert Into(error_list,"Beta は 0 と 1 の間である必要があります。修正して再試行してください" ); ); If(DOEN == 0, Insert Into(error_list,"N は 2\!U1D3A にする必要があります。中心点や N の繰り返しを含めないでください。修正してからやり直してください"); ); If(Abs(percent) > 90 | パーセント == 0, Insert Into(error_list,"パーセントは 0 から 90% の間である必要があります。修正して再試行してください"); ); If(Abs(p0) > 0.90 | p0 == 0, 挿入Into(error_list,"p0 は 0 から 0.90 の間である必要があります。修正して再試行してください"); ); If(N Items(error_list) > 0, nw = New Window( "エラー!", <
編集:
ディスプレイ ボックスの使用方法のいくつかのオプション:
もっと見る...Names Default To Here(0);
Clear Log();
validator = function({alpha, beta, N, percent, p0}, {Default Local},
error_list = {};
DOEN = 0;
For(i = 1, i < 10, i++,
If(2 ^ i == N,
DOEN = DOEN + 1
)
);
If(Abs(alpha) >= 1 | alpha == 0,
Insert Into(error_list,"Alpha needs to be between 0 and 1, please fix and try again");
);
If(Abs(beta) >= 1 | beta == 0,
Insert Into(error_list,"Beta needs to be between 0 and 1, please fix and try again");
);
If(DOEN == 0,
Insert Into(error_list,"N should be 2\!U1D3A, do not include centerpoints or repeats with N, please fix and try again");
);
If(Abs(percent) > 90 | percent == 0,
Insert Into(error_list,"The percent needs to be between 0 and 90%, please fix and try again");
);
If(Abs(p0) > 0.90 | p0 == 0,
Insert Into(error_list,"The p0 needs to be between 0 and 0.90, please fix and try again");
);
If(N Items(error_list) > 0,
nw = New Window( "Error!", <<MODAL></MODAL>名前のデフォルトはここ (0) です。ログをクリア(); validator = function({alpha, beta, N, percent, p0}, {Default Local}, error_list = {}; DOEN = 0; For(i = 1, i < 10, i++, If(2 ^ i == N) , DOEN = DOEN + 1 ) ); If(Abs(alpha) >= 1 | alpha == 0, Insert Into(error_list,"Alpha は 0 と 1 の間にある必要があります。修正して再試行してください"); ); If (Abs(beta) >= 1 | beta == 0, Insert Into(error_list,"ベータは 0 と 1 の間にある必要があります。修正してからもう一度お試しください"); ); If(DOEN == 0, Insert Into(error_list ,"N は 2\!U1D3A である必要があります。中心点や N の繰り返しを含めないでください。修正してからもう一度試してください"); ); If(Abs(percent) > 90 | percent == 0, Insert Into(error_list,"Theパーセントは 0 から 90% の間である必要があります。修正して再試行してください"); ); If(Abs(p0) > 0.90 | p0 == 0, Insert Into(error_list,"p0 は 0 から 0.90 の間である必要があります。修正して再試行してください"); ); If(N Items(error_list) > 0, nw = New Window( "エラー!", <
Re: 評価式eval expr() を取り除くことができるはずだと思います。 出力だけを行うと、評価されます。 Eval(output) を実行することもできます。EvalExpr は、動的な式を作成するためのものです。以下は、スクリプト インデックスからの抜粋です。
EvalExpr は、x 内の各 Expr() 句をその評価値に置き換えた式のコピーを返します。
それで
Eval Expr( Length( Expr( "X" || Char( 12 ) ) ) ); // returns Length("X12")
あなたがそれを評価したいなら、あなたはしなければならないでしょう
Eval(Eval Expr( Length( Expr( "X" || Char( 12 ) ) ) ));
しかし、あなたは式を評価しようとしているだけなので、おそらく evalexpr() は必要ないと思います