Expression d'évaluationJ'essaie de faire en sorte que l'utilisateur entre plusieurs variables, une fois que ces variables sont jugées correctes, le bouton ok passe de grisé à actif. J'ai obtenu ce travail. Ce que je n'ai pas de travail, c'est l'Eval Expr (sorties). C'est juste une chose simple juste 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, je mets 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>
Modélisation statistique avancéeAutomatisation et scriptÉtudes de consommation et de marchémacOSPersonnalisation de masseIngénierie de la qualité et des procédésRe : expression d'évaluationMerci! cela a parfaitement fonctionné.
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é.
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... 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 manière 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 << Définir le minimum et << Définir le 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>Noms par défaut à ici (0); Effacer le journal(); validator = function({alpha, beta, N, percent, p0}, {Default Local}, //pourrait aussi être une expression, mais de cette façon vous évitez de créer des variables inutiles 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 doit être entre 0 et 1, corrigez et réessayez"); ); If(Abs(beta) >= 1 | beta == 0, Insert Into(error_list,"Beta doit être entre 0 et 1, corrigez et réessayez" ); ); If(DOEN == 0, Insert Into(error_list,"N devrait être 2\!U1D3A, n'incluez pas les points centraux ou les répétitions avec N, veuillez corriger et réessayer"); ); If(Abs(percent) > 90 | percent == 0, Insert Into(error_list,"Le pourcentage doit être compris entre 0 et 90 %, veuillez corriger et réessayer"); ); If(Abs(p0) > 0.90 | p0 == 0, Insert Into(error_list,"Le p0 doit être compris entre 0 et 0,90, veuillez corriger et réessayer"); ); If(N Items(error_list) > 0, nw = New Window( "Error!", <
Modifier:
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>Noms par défaut à ici (0); Effacer le journal(); 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 doit être compris entre 0 et 1, veuillez corriger et réessayer"); ); If (Abs(beta) >= 1 | beta == 0, Insert Into(error_list,"Beta doit être compris entre 0 et 1, veuillez corriger et réessayer"); ); If(DOEN == 0, Insert Into(error_list ,"N doit être 2\!U1D3A, n'incluez pas les points centraux ou les répétitions avec N, veuillez corriger et réessayer"); ); If(Abs(percent) > 90 | percent == 0, Insert Into(error_list,"The le pourcentage doit être compris entre 0 et 90 %, veuillez corriger et réessayer"); ); If(Abs(p0) > 0.90 | p0 == 0, Insert Into(error_list,"Le p0 doit être compris entre 0 et 0.90, veuillez corriger et réessayer"); ); If(N Items(error_list) > 0, nw = New Window( "Error!", <
Re : expression d'évaluationJe pense que vous devriez pouvoir vous débarrasser simplement de eval expr(). Si vous faites juste une sortie, elle sera évaluée. Vous pouvez également simplement faire Eval (sortie).EvalExpr sert davantage à créer des expressions dynamiques.voici le bit 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
Donc
Eval Expr( Length( Expr( "X" || Char( 12 ) ) ) ); // returns Length("X12")
Si vous vouliez l'évaluer, vous auriez à faire
Eval(Eval Expr( Length( Expr( "X" || Char( 12 ) ) ) ));
mais vous essayez juste d'évaluer une expression, je pense que vous n'avez probablement pas besoin de evalexpr()