Expresión de evaluaciónEstoy tratando de que el usuario ingrese varias variables, una vez que esas variables se consideran correctas, el botón Aceptar pasa de gris a activo. Conseguí esto funcionando. Lo que no tengo funcionando es el Eval Expr (salidas). Esto es solo una cosa simple para asegurarme de que esto funcione antes de hacer los cálculos. Cuando ejecuto el script, aquí hay una captura de pantalla, el botón Aceptar está atenuado:

Luego puse valores plausibles y el botón Aceptar se muestra activo después de hacer clic en las entradas de verificación:

Pero no está ejecutando mi expresión y creando la tabla. ¿Qué estoy haciendo mal? Estoy en JMP 16.0 Pro. Como dije, hice algo muy simple como crear una tabla solo para asegurarme de que mi guión funciona antes de profundizar en lo que realmente necesito.
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: expresión de evaluaciónCreo que debería poder deshacerse de eval expr (). Si solo hace salida, evaluará. También podría simplemente hacer Eval (salida).EvalExpr es más para crear expresiones dinámicas.aquí está el bit del índice de secuencias de comandos.
EvalExpr devuelve una copia de la expresión con cada cláusula Expr () dentro de x reemplazada con su valor evaluado
Entonces
Eval Expr( Length( Expr( "X" || Char( 12 ) ) ) ); // returns Length("X12")
Si quisieras evaluarlo, tendrías que hacer
Eval(Eval Expr( Length( Expr( "X" || Char( 12 ) ) ) ));
pero creo que solo estás tratando de evaluar una expresión, por lo que probablemente no necesites evalexpr ()
Re: Expresión de evaluaciónMueva la expresión de salida antes de la creación de w y cree la salida cuando se presiona el botón Aceptar.
Ver más...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> Y debido a que está utilizando Modal, también podría simplemente crear la nueva tabla después de que se haya cerrado modal porque el script no continuará la ejecución antes de que se haya cerrado modal.
Aquí hay un ejemplo de cómo podría refactorizar un poco el código si lo desea (también puede "forzar" los valores mínimos/máximos en el cuadro de edición de números con << Establecer mínimo y << Establecer máximo). Esto le permite mostrar también todos los mensajes de error en el paso de verificación si desea:
Ver más...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>Editar:
Algunas opciones para el uso del cuadro de visualización:
Ver más...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: Expresión de evaluaciónProbé Eval (salida) primero y no funcionó, así que probé Eval expr() en segundo lugar. Probé la salida por sí mismo y no funcionó.