Expression d'évaluationJ'essaie de faire entrer plusieurs variables par l'utilisateur, une fois que ces variables sont jugées correctes, le bouton ok passe de grisé à actif. J'ai réussi à ce que ça marche. Ce que je n'ai pas qui fonctionne, c'est l'Eval Expr (sorties). C'est juste une chose simple pour m'assurer que cela fonctionne avant de faire les calculs. Lorsque je lance le script, voici une capture d'écran, le bouton OK est grisé :

Ensuite, j'ai mis des valeurs plausibles et le bouton ok s'affiche après avoir cliqué sur les entrées de vérification :

Mais il n'exécute pas mon expression et ne crée pas la table. Qu'est-ce que je fais mal? Je suis sur JMP 16.0 Pro. Comme je l'ai dit, j'ai fait quelque chose de très simple comme créer une table juste pour m'assurer que mon script fonctionne avant de plonger profondément dans ce dont j'ai vraiment besoin.
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>
macOSScriptRe: Expression d'évaluationJe pense que vous devriez pouvoir vous débarrasser de l'eval expr(). Si vous faites juste une sortie, elle sera eval. Vous pouvez aussi simplement faire Eval (sortie).EvalExpr est plus pour créer des expressions dynamiques.voici le morceau de l'index de script.
EvalExpr renvoie une copie de l'expression avec chaque clause Expr() dans x remplacée par sa valeur évaluée
Alors
Eval Expr( Length( Expr( "X" || Char( 12 ) ) ) ); // returns Length("X12")
Si tu voulais l'évaluer tu devrais faire
Eval(Eval Expr( Length( Expr( "X" || Char( 12 ) ) ) ));
mais vous essayez juste d'évaluer une expression, je pense, donc vous n'avez probablement pas besoin d'evaexpr()
Re : expression d'évaluationDéplacez l'expression de sortie avant la création de w et créez la sortie lorsque le bouton OK est enfoncé.
Voir plus...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> Et parce que vous utilisez Modal, vous pouvez également simplement créer la nouvelle table après la fermeture de modal, car le script ne poursuivra pas son exécution avant la fermeture de modal.
Voici un exemple de la façon dont vous pouvez refactoriser un peu le code si vous le souhaitez (vous pouvez également « forcer » les valeurs min/max dans la zone d'édition numérique avec << Set Minimum et << Set Maximum). Cela vous permet également d'afficher tous les messages d'erreur dans l'étape de vérification si vous souhaitez :
Voir plus...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>Éditer:
Quelques options pour l'utilisation de la boîte d'affichage :
Voir plus...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 : expression d'évaluationJ'ai d'abord essayé Eval (sortie) et cela n'a pas fonctionné, j'ai donc essayé Eval expr() en second. J'ai essayé la sortie par elle-même et cela n'a pas fonctionné.