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

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

Ma non sta eseguendo la mia espressione e creando la tabella. 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 OSScriptingRe: Espressione EvalPenso che dovresti essere in grado di sbarazzarti di eval expr(). Se fai solo output, sarà eval. Potresti anche semplicemente 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 volessi valutarlo dovresti farlo
Eval(Eval Expr( Length( Expr( "X" || Char( 12 ) ) ) ));
ma stai solo cercando di valutare un'espressione, penso quindi probabilmente non hai bisogno di evalexpr()
Re: Espressione di valutazioneSposta l'espressione di output prima della creazione di w e crea l'output quando viene premuto il pulsante OK.
Visualizza di più...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> E poiché stai usando Modal, puoi 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 puoi refactoring un po' il codice se lo desideri (puoi anche "forzare" i valori min/max alla casella di modifica del numero con << Imposta minimo e << Imposta massimo). Ciò ti consente anche di mostrare tutti i messaggi di errore nella fase di verifica se desideri:
Visualizza di più...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>Modificare:
Alcune opzioni per l'utilizzo della casella di visualizzazione:
Visualizza di più...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: Espressione di valutazioneHo provato prima Eval (output) e non ha funzionato, quindi ho provato Eval expr() per secondo. Ho provato l'output da solo e non ha funzionato.