Espressione di valutazioneSto cercando di fare in modo che l'utente inserisca diverse variabili, una volta che tali variabili sono ritenute ok, il pulsante ok passa da disattivato ad attivo. Ho funzionato. Quello che non funziona è Eval Expr (output). Questa è solo una cosa semplice solo per assicurarmi che funzioni prima di fare i calcoli. Quando eseguo lo script, ecco una schermata, il pulsante OK è disattivato:

Quindi inserisco valori plausibili e il pulsante ok viene visualizzato attivo dopo aver fatto clic sugli input di verifica:

Ma non sta eseguendo la mia espressione e creando il tavolo. Che cosa sto facendo di sbagliato? Sono su JMP 16.0 Pro. Come ho detto, ho fatto qualcosa di molto semplice come creare una tabella solo per assicurarmi che il mio script funzioni prima di approfondire ciò di cui ho veramente bisogno.
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>
Mac OSScriptingRi: Espressione di valutazioneGrazie! questo ha funzionato perfettamente.
Ri: Espressione di valutazioneHo provato prima Eval (output) e non ha funzionato, quindi ho provato Eval expr() secondo. Ho provato l'output da solo e non ha funzionato.
Ri: Espressione di valutazioneSposta l'espressione di output prima della creazione di w e crea l'output quando viene premuto il pulsante OK.
Visualizza altro... E poiché stai usando Modal potresti anche creare la nuova tabella dopo che modal è stato chiuso perché lo script non continuerà l'esecuzione prima che modal sia stato chiuso.
Ecco un esempio di come è possibile eseguire il refactoring del codice se lo si desidera (è anche possibile "forzare" i valori min/max nella casella di modifica del numero con <<
Visualizza altro...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>Nomi Predefinito A Qui(0); Pulisci il registro(); validator = function({alpha, beta, N, percent, p0}, {Default Local}, //potrebbe anche essere espressione, ma in questo modo eviti di creare variabili non necessarie 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 deve essere compreso tra 0 e 1, correggere e riprovare"); ); If(Abs(beta) >= 1 | beta == 0, Insert Into(error_list,"Beta deve essere compreso tra 0 e 1, correggere e riprovare" ); ); If(DOEN == 0, Insert Into(lista_errori,"N dovrebbe essere 2\!U1D3A, non includere punti centrali o ripetizioni con N, correggere e riprovare"); ); If(Abs(percent) > 90 | percent == 0, Insert Into(elenco_errori,"La percentuale deve essere compresa tra 0 e 90%, correggere e riprovare"); ); If(Abs(p0) > 0.90 | p0 == 0, Insert Into(error_list,"Il p0 deve essere compreso tra 0 e 0,90, correggere e riprovare"); ); If(N Items(error_list) > 0, nw = New Window( "Error!", <
Modificare:
Alcune opzioni per l'utilizzo della casella di visualizzazione:
Visualizza altro...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>Nomi Predefinito A Qui(0); Pulisci il registro(); 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 deve essere compreso tra 0 e 1, correggere e riprovare"); ); If (Abs(beta) >= 1 | beta == 0, Insert Into(error_list,"Beta deve essere compreso tra 0 e 1, correggere e riprovare"); ); If(DOEN == 0, Insert Into(error_list ,"N dovrebbe essere 2\!U1D3A, non includere punti centrali o ripetizioni con N, correggere e riprovare"); ); If(Abs(percent) > 90 | percent == 0, Insert Into(error_list,"The percent deve essere compreso tra 0 e 90%, correggere e riprovare"); ); If(Abs(p0) > 0.90 | p0 == 0, Insert Into(error_list,"The p0 deve essere compreso tra 0 e 0.90, correggere e riprovare"); ); If(N Items(error_list) > 0, nw = New Window( "Error!", <
Ri: Espressione di valutazionePenso che dovresti essere in grado di sbarazzarti di eval expr (). Se fai solo output, verrà valutato. Potresti anche fare Eval(output).EvalExpr è più per la creazione di espressioni dinamiche.ecco il bit dall'indice di scripting.
EvalExpr restituisce una copia dell'espressione con ogni clausola Expr() all'interno di x sostituita con il suo valore valutato
COSÌ
Eval Expr( Length( Expr( "X" || Char( 12 ) ) ) ); // returns Length("X12")
Se volevi valutarlo avresti dovuto fare
Eval(Eval Expr( Length( Expr( "X" || Char( 12 ) ) ) ));
ma stai solo cercando di valutare un'espressione penso quindi probabilmente non hai bisogno di evalexpr()