Encontrar el formato correcto del nombre jsl¡HOLA!
He creado un script jsl que es el siguiente:
For Each Row(
dt_fichier3,
// Lire la valeur de la colonne "Process" et les offsets
process_value = :Process;
first_offset = :first_OFFSET;
second_offset = :second_OFFSET;
third_offset = :third_OFFSET;
// Vérifier et assigner les valeurs des offsets si elles ne sont pas vides ou "."
If(
(Char(first_offset) != "." & Char(first_offset) != "") | (Char(second_offset) != "." &
Char(second_offset) != "") | (Char(third_offset) != "." & Char(third_offset) != ""),
// Créer une nouvelle colonne dans le fichier1 si elle n'existe pas encore
new_column_name = process_value || "_offset";
dt_fichier1 << New Column(new_column_name, Numeric, Continuous);
// Définir la formule pour la nouvelle colonne
Column(dt_fichier1, new_column_name) << Set Formula(
Eval(
Eval Expr(
If(:Supplier == "FIRST",
:Expr(process_value) + Expr(:first_OFFSET),
If(:Supplier == "SECOND",
:Expr(:Process) + Expr(:second_OFFSET),
If(
:Supplier == "THIRD",
:Expr(:Process) + Expr(:third_OFFSET),
,
:Expr(:Process) // Valeur par défaut si aucun fournisseur ne correspond
)
)
)
)
)
);
);
);
Editar (2024-08-08 jthi): Se agregó formato jsl
El problema es que la fórmula no funciona porque el nombre de la columna aparece en la información de la columna->Fórmula como "Column_name" o debería ser "Column-name", intenté usar la función Name() pero no funcionó.:(
Automatización y scriptingAcceso a los datosExploración y visualización de datosRe: Encontrar el formato correcto del nombre jslConstruya las fórmulas mediante la evaluación de expresiones . Inserte una expresión en otra mediante Eval Insert, Eval Expr, Parse y Substitute . Este suele ser mi método preferido (o Eval(Substitute()) y NameExpr(AsColumn())
Names Default To Here(1);
dt = open("$SAMPLE_DATA/Big Class.jmp");
col1 = "height";
col2 = "weight";
new_col = Eval(EvalExpr(dt << New Column("mycol", Numeric, Continuous, Formula(
Expr(NameExpr(AsColumn(dt, col1))) * Expr(NameExpr(AsColumn(dt, col2)))
))));
new_col << get formula;Re: Encontrar el formato correcto del nombre jslBien,
Pero por ejemplo, después de compilar el script, si tomo una columna para ver cómo se ve su fórmula, obtengo esto:
Si( :Proveedor == "PRIMERO",
"Nombre_de_columna" + 4,
Si( :Proveedor == "SEGUNDO",
"Nombre_de_columna" + 5,
Si( :Proveedor == "TERCERO",
"Nombre_de_columna" + (-10),
"Nombre_de_columna"
)
)
)
Lo cual no funciona porque así debería ser para que funcione:
Si( :Proveedor == "PRIMERO",
"Nombre_de_columna"n + 4,
Si( :Proveedor == "SEGUNDO",
"Nombre_de_columna"n + 5,
Si( :Proveedor == "TERCERO",
"Nombre_de_columna"n + (-10),
"Nombre_de_columna"n
)
)
)
¿Cómo modifico entonces mi script? Gracias:)
Re: Encontrar el formato correcto del nombre jslFaltan: de las columnas, en el script original debes modificar al menos estas :Expr(:Process). También te sugeriría usar nombres de columnas en lugar de referencias como process_value = :Process (process_value = "Process" es lo que prefiero usar).
Re: Encontrar el formato correcto del nombre jslNo te entiendo,
Si uso process_value = "Process", se convertirá en una cadena y no tomará el nombre de la columna.
Además, ¿qué necesito cambiar en estos :Expr(:Process)?
Re: Encontrar el formato correcto del nombre jslEn mi respuesta anterior mostré una técnica para convertir esas (cadenas) nuevamente en columnas dentro de fórmulas.
Re: Encontrar el formato correcto del nombre jslAh... El uso de :Process es correcto en esa ubicación, ya que estás usando el bucle For Each Row. De todos modos, se aplica el mismo método para convertir los valores que obtienes de las columnas nuevamente en columnas.
Re: Encontrar el formato correcto del nombre jsl¿Podrías aplicarlo a mi script? No lo entiendo, por favor.
Re: Encontrar el formato correcto del nombre jslSi puede proporcionarme sus tablas de datos, puedo proporcionarle mejores ejemplos.
Re: Encontrar el formato correcto del nombre jslAquí están los datos
Re: Encontrar el formato correcto del nombre jslCreo que esto hace lo que estás buscando. Usé Eval(Substitute()) porque suele ser un poco más fácil leer lo que está haciendo directamente desde el código. También separé la evaluación de la construcción de la expresión, de modo que puedes imprimirla si deseas ver cómo se ve. Los bucles For Each también se pueden depurar configurando la fila actual con un valor específico siempre que tengas la tabla correcta como tabla de datos actual.
Names Default To Here(1);
dt1 = Open("$DOWNLOADS/DATAtable1.jmp");
dt2 = Open("$DOWNLOADS/DATAtable2.jmp");
//Row() = 2;
For Each Row(
dt2,
process_value = :Process;
first_offset = :first_OFFSET;
second_offset = :second_OFFSET;
third_offset = :third_OFFSET;
If(
(Char(first_offset) != "." & Char(first_offset) != "") | (Char(second_offset) != "." &
Char(second_offset) != "") | (Char(third_offset) != "." & Char(third_offset) != ""),
new_column_name = process_value || "_offset";
col_expr = Substitute(
Expr(dt1 << New Column(new_column_name, Numeric, Continuous, Formula(
If(:Supplier == "FIRST",
_processval_ + _firstoffset_
, :Supplier == "SECOND",
_processval_ + _secondtoffset_
, :Supplier == "THIRD",
_processval_ + _thirdoffset_
, // else
_processval_
)
))),
Expr(_processval_), Name Expr(AsColumn(dt1, process_value)),
Expr(_firstoffset_), first_offset,
Expr(_secondtoffset_), second_offset,
Expr(_thirdoffset_), third_offset
);
//show(col_expr);
new_col = Eval(col_expr);
);
);
