Trouver le bon format de nom jslSALUT!
J'ai réalisé un script jsl qui est le suivant :
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
)
)
)
)
)
);
);
);
Modifier (2024-08-08 jthi) : Ajout du formatage jsl
le problème est que la formule ne fonctionne pas car le nom de la colonne apparaît dans les informations de la colonne->Formule comme "Column_name" ou il devrait être "Column-name", j'ai essayé d'utiliser la fonction Name() mais cela n'a pas fonctionné:(
Automatisation et scriptsAccès aux donnéesExploration et visualisation des donnéesRe: Trouver le bon format de nom jslCréez les formules en utilisant l'évaluation des expressions . Insérez une expression dans une autre en utilisant Eval Insert, Eval Expr, Parse et Substitute . C'est généralement ma méthode préférée (ou Eval(Substitute()) et 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: Trouver le bon format de nom jslDroite,
Mais par exemple après la compilation du script, si je prends une colonne pour voir à quoi ressemble sa formule, j'ai ceci :
Si( :Fournisseur == "PREMIER",
"Nom_Colonne" + 4,
Si( :Fournisseur == "SECOND",
"Nom_Colonne" + 5,
Si( :Fournisseur == "TROISIÈME",
"Nom_Colonne" + (-10),
"Nom de colonne"
)
)
)
Ce qui ne fonctionne pas car il faudrait que ce soit comme ça pour fonctionner :
Si( :Fournisseur == "PREMIER",
"Nom_de_colonne"n + 4,
Si( :Fournisseur == "SECOND",
"Nom_de_colonne"n + 5,
Si( :Fournisseur == "TROISIÈME",
"Nom_Colonne"n + (-10),
"Nom_de_colonne"n
)
)
)
Comment puis-je modifier mon script alors ? Merci:)
Re: Trouver le bon format de nom jslIl vous manque : dans vos colonnes, dans votre script d'origine vous devez modifier au moins ces :Expr(:Process). Je suggérerais également d'utiliser des noms de colonnes au lieu de références telles que process_value = :Process (process_value = "Process" est ce que je préfère utiliser).
Re: Trouver le bon format de nom jslJe ne te comprends pas,
Si j'utilise process_value = "Process", cela deviendra une chaîne et ne prendra pas le nom de la colonne.
De plus, que dois-je changer dans ces :Expr(:Process) ?
Re: Trouver le bon format de nom jslJ'ai montré une technique pour transformer ces (chaînes) en colonnes à l'intérieur des formules dans ma réponse précédente.
Re: Trouver le bon format de nom jslAh... Utiliser :Process est correct à cet endroit car vous utilisez la boucle For Each Row. La même méthode s'applique toujours pour reconvertir les valeurs que vous obtenez à partir des colonnes en colonnes
Re: Trouver le bon format de nom jslPourriez-vous l'appliquer à mon script, je ne comprends pas s'il vous plaît
Re: Trouver le bon format de nom jslSi vous pouvez fournir vos tableaux de données, je peux fournir de meilleurs exemples.
Re: Trouver le bon format de nom jslVoici les données
Re: Trouver le bon format de nom jslJe pense que cela fait ce que vous recherchez. J'ai utilisé Eval(Substitute()) car il est généralement un peu plus facile de lire ce qu'il fait directement à partir du code. J'ai également séparé l'évaluation de la construction de l'expression, vous pouvez donc l'imprimer si vous souhaitez voir à quoi cela ressemble. Les boucles For Each peuvent également être déboguées en définissant la ligne actuelle sur une valeur spécifique tant que vous avez la table correcte comme table de données actuelle.
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);
);
);
