Expresión de evaluaciónEstoy tratando de que el usuario ingrese varias variables, una vez que esas variables se consideren correctas, el botón Aceptar pasa de atenuado a activo. Tengo esto funcionando. Lo que no tengo funcionando es el Eval Expr (salidas). Esto es solo una cosa simple solo 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 pongo 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 script 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>
Modelado Estadístico AvanzadoAutomatización y secuencias de comandosInvestigación del Consumidor y del MercadoMac OSLa personalización en masaIngeniería de Calidad y ProcesosRe: Expresión de evaluación¡Gracias! esto funcionó perfectamente.
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ó.
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... 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>Nombres predeterminados hasta aquí (0); Borrar registro(); validator = function({alpha, beta, N, percent, p0}, {Default Local}, //también podría ser una expresión, pero de esta manera evita crear variables innecesarias 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 debe estar entre 0 y 1, corrija e intente nuevamente"); ); If(Abs(beta) >= 1 | beta == 0, Insert Into(error_list,"Beta debe estar entre 0 y 1, corrija e intente nuevamente" ); ); If(DOEN == 0, Insert Into(error_list,"N debe ser 2\!U1D3A, no incluya puntos centrales o repeticiones con N, corrija e intente nuevamente"); ); If(Abs(percent) > 90 | porcentaje == 0, Insertar en(lista_error,"El porcentaje debe estar entre 0 y 90 %, corrija y vuelva a intentarlo"); ); If(Abs(p0) > 0.90 | p0 == 0, Insertar Into(lista_error,"El p0 debe estar entre 0 y 0.90, corríjalo y vuelva a intentarlo"); ); If(N Elementos(lista_error) > 0, nw = Nueva ventana( "¡Error!", <
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>Nombres predeterminados hasta aquí (0); Borrar registro(); validador = función ({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 debe estar entre 0 y 1, corrija y vuelva a intentarlo"); ); If (Abs(beta) >= 1 | beta == 0, Insert Into(error_list,"Beta debe estar entre 0 y 1, corrija e intente nuevamente"); ); If(DOEN == 0, Insert Into(error_list ,"N debe ser 2\!U1D3A, no incluya puntos centrales ni se repita con N, corrija y vuelva a intentarlo"); ); If(Abs(percent) > 90 | percent == 0, Insert Into(error_list,"The el porcentaje debe estar entre 0 y 90 %, corríjalo y vuelva a intentarlo"); ); If(Abs(p0) > 0.90 | p0 == 0, Insert Into(error_list,"El p0 debe estar entre 0 y 0.90, corrija y vuelva a intentarlo"); ); If(N Items(error_list) > 0, nw = New Window( "¡Error!", <
Re: Expresión de evaluaciónCreo que deberías poder deshacerte de eval expr(). Si solo haces una salida, se 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 hacerlo
Eval(Eval Expr( Length( Expr( "X" || Char( 12 ) ) ) ));
pero creo que solo está tratando de evaluar una expresión, por lo que probablemente no necesite evalexpr()