Asignar valor a una celda en un bucle Para cada fila, después de que ya se le haya asignado un valor en el mismo bucleTengo una función "Para cada fila" que trabaja en una tabla de datos. Esta ejecuta una serie de sentencias "Si" que evalúan los valores de algunas columnas y, según los resultados, asigna un valor a la columna "Proceso_Correcto".
Actualmente lo tengo configurado así.
For Each Row(
dt,
If( :Module == "M05" & :Measurement == "Conductivity",
If(:Actual > m5_cond_hi | :Actual < m5_cond_low,
:Correct_Process = "Incorrect",
:Correct_Process = "Correct"
);
If( splits_detected == 1 & Contains( col_name_list, "PMC_FreeForm" ),
If( :PMC_FreeForm == "DI" | Contains(:PMC_FreeForm, "Mod 5 pump off"),
If( :Actual != 0,
:Correct_Process = "Incorrect",
:Correct_Process = "Correct"
);
);
);
If( splits_detected == 1 & Contains( col_name_list, "CPMC_Conductivity" ),
num_cond = Num(:CPMC_Conductivity);
lim_hi = num_cond + 0.6;
lim_low = num_cond - 0.6;
If( :Actual > lim_hi | :Actual < lim_low,
show("Evaluated Incorrect");
:Correct_Process = "Incorrect",
show("Evaluated Correct");
:Correct_Process = "Correct"
);
);
Al ejecutar el script, si el valor de :CPMC_Conductivity es "13.2" y el de :Actual es 13.5, la columna :Correct_Process sigue teniendo asignado el valor "Incorrecto". Curiosamente, el registro muestra "Evaluado Correcto" debido a la instrucción "show()" cuando se esperaba que lo hiciera, lo que significa que las instrucciones "If" se evalúan correctamente, pero a :Correct_Process no se le asigna el valor "Correct".
Supongo que se debe a que asigno la columna :Correct_Process por defecto con la primera sentencia if anidada y luego intento sobrescribirla con una comprobación más específica en la tercera sentencia if anidada. Sin embargo, tengo comprobaciones similares dentro de este grupo que parecen sobrescribirse correctamente en otras condiciones (como la segunda sentencia if anidada), así que me pregunto qué me estoy perdiendo.
Automatización y scriptingVentanasRe: Asignar valor a una celda en un bucle Para cada fila, después de que ya se le haya asignado un valor en el mismo bucle¿Existe alguna razón para sobrescribir el mismo valor de celda varias veces dentro del bucle?
Re: Asignar valor a una celda en un bucle Para cada fila, después de que ya se le haya asignado un valor en el mismo bucleAdemás, ¿puede proporcionarme un conjunto de datos de ejemplo?
Comprobando rápidamente que esto funciona bien
Names Default To Here(1);
dt = open("$SAMPLE_DATA/Big Class.jmp");
For Each Row(dt,
If(:height > 60,
Write("\!N", Row(), " 1: If");
:sex = "A";
,
Write("\!N", Row(), " 1: Else");
:sex = "B";
);
If(:weight > 70,
Write("\!N", Row(), " 2: If");
:sex = "AA";
,
Write("\!N", Row(), " 2: Else");
:sex = "BB";
);
);
También es posible que desees utilizar << Iniciar actualización de datos y << Finalizar actualización de datos
Re: Asignar valor a una celda en un bucle Para cada fila, después de que ya se le haya asignado un valor en el mismo bucleLas tres funciones If() de la primera función If() se ejecutarán de forma independiente. Es decir, cada una se evaluará para cada fila si la primera función If() es verdadera.
Yo usaría el depurador de JSL y revisaría el código paso a paso para detectar cuándo cambia el valor. Esto te mostrará dónde la lógica del código no funciona correctamente.
Si puede proporcionar una tabla de datos de muestra, la Comunidad podría profundizar en el problema.
Re: Asignar valor a una celda en un bucle Para cada fila, después de que ya se le haya asignado un valor en el mismo bucleNo, estaba trabajando con el script de otra persona e intentando reestructurarlo, pero me confundía cómo se obtenía este resultado. Tu pregunta me dio una idea, investigué más a fondo y descubrí que esta parte del script funciona correctamente; simplemente se sobrescribía más adelante. @txnelson Solía depurar para localizar la tercera sobrescritura, así que gracias por la sugerencia.