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

次に、もっともらしい値を入力すると、入力の確認をクリックした後、[OK]ボタンがアクティブになります。

しかし、それは私の式を実行してテーブルを作成していません。 私は何が間違っているのですか? 私はJMP16.0Proを使用しています。 私が言ったように、私が本当に必要なものを深く掘り下げる前に、スクリプトが機能していることを確認するためだけにテーブルを作成するような非常に単純なことをしました。
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:評価式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()は必要ないと思います。
Re:評価式wを作成する前に出力式を移動し、OKボタンを押したときに出力を作成します。
もっと見る...Names Default To Here(0);
Clear Log();
output = Expr(
dt = New Table("Test Table", New Column("a", Set Values({alpha, beta, N, percent, p0})));
bb << click;
);
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),
write(); //not sure why this is needed here
);
)
),
bb = Button Box("OK", output, << enable(0))
)
)
);
Show(alpha);
Show(beta);
Show(DOEN);
Show(percent);
Show(p0);</MODAL></MODAL></MODAL></MODAL></MODAL> また、モーダルを使用しているため、モーダルが閉じられるまでスクリプトは実行を継続しないため、モーダルが閉じられた後に新しいテーブルを作成することもできます。
必要に応じてコードを少しリファクタリングする方法の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> 編集:
ディスプレイボックスの使用に関するいくつかのオプション:
もっと見る...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>
Re:評価式最初にEval(出力)を試しましたが、機能しなかったので、次にEval expr()を試しました。 単独で出力してみましたが、うまくいきませんでした。