Das richtige Format für den Namen JSL findenHALLO!
Ich habe ein JSL-Skript wie folgt erstellt:
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
)
)
)
)
)
);
);
);
Bearbeiten (08.08.2024 jthi): JSL-Formatierung hinzugefügt
das Problem ist, dass die Formel nicht funktioniert, weil der Spaltenname in der Spalteninfo->Formel als „Spaltenname“ erscheint oder „Spaltenname“ lauten sollte. Ich habe versucht, die Funktion Name() zu verwenden, aber das hat nicht funktioniert:(
Automatisierung und SkriptingDatenzugriffDatenexploration und -visualisierungBetreff: Das richtige Format für den Namen JSL findenErstellen Sie die Formeln mithilfe der Ausdrucksauswertung . Fügen Sie einen Ausdruck mithilfe von Eval Insert, Eval Expr, Parse und Substitute in einen anderen ein . Dies ist normalerweise meine bevorzugte Methode (oder Eval(Substitute()) und 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;Betreff: Das richtige Format für den Namen JSL findenRechts,
Wenn ich mir beispielsweise nach der Kompilierung des Skripts eine Spalte anschaue, um zu sehen, wie die Formel darin aussieht, erhalte ich Folgendes:
Wenn( :Lieferant == "FIRST",
"Spaltenname" + 4,
Wenn( :Lieferant == "ZWEITER",
"Spaltenname" + 5,
Wenn( :Lieferant == "DRITTER",
"Spaltenname" + (-10),
"Spaltenname"
)
)
)
Das funktioniert nicht, weil es so funktionieren sollte:
Wenn( :Lieferant == "FIRST",
"Spaltenname"n + 4,
Wenn( :Lieferant == "ZWEITER",
"Spaltenname"n + 5,
Wenn( :Lieferant == "DRITTER",
"Spaltenname"n + (-10),
"Spaltenname"n
)
)
)
Wie ändere ich dann mein Skript? Danke:)
Betreff: Das richtige Format für den Namen JSL findenIhnen fehlt: in Ihren Spalten, in Ihrem Originalskript müssen Sie mindestens diese :Expr(:Process) ändern. Ich würde auch vorschlagen, Spaltennamen anstelle von Referenzen wie process_value = :Process zu verwenden (ich verwende lieber process_value = „Process“).
Betreff: Das richtige Format für den Namen JSL findenIch verstehe dich nicht,
Wenn ich process_value = „Process“ verwende, wird es zu einer Zeichenfolge und der Spaltenname wird nicht übernommen.
Was muss ich außerdem in diesen :Expr(:Process) ändern?
Betreff: Das richtige Format für den Namen JSL findenIch habe in meiner früheren Antwort eine Technik gezeigt, um diese (Zeichenfolgen) wieder in Spalten innerhalb von Formeln umzuwandeln.
Betreff: Das richtige Format für den Namen JSL findenAh... Die Verwendung von :Process ist an dieser Stelle korrekt, da Sie die For Each Row-Schleife verwenden. Trotzdem gilt dieselbe Methode, um die Werte, die Sie aus den Spalten erhalten, wieder in Spalten umzuwandeln
Betreff: Das richtige Format für den Namen JSL findenKönnten Sie es auf mein Skript anwenden, ich verstehe es nicht, bitte
Betreff: Das richtige Format für den Namen JSL findenWenn Sie Ihre Datentabellen bereitstellen können, kann ich bessere Beispiele liefern.
Betreff: Das richtige Format für den Namen JSL findenHier sind die Daten
Betreff: Das richtige Format für den Namen JSL findenIch denke, das macht, was Sie suchen. Ich habe Eval(Substitute()) verwendet, weil es normalerweise etwas einfacher ist, direkt aus dem Code abzulesen, was es tut. Ich habe auch die Auswertung vom Ausdrucksaufbau getrennt, sodass Sie es ausdrucken können, wenn Sie sehen möchten, wie es aussieht. For Each-Schleifen können auch debuggt werden, indem die aktuelle Zeile auf einen bestimmten Wert gesetzt wird, solange Sie die richtige Tabelle als aktuelle Datentabelle haben.
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);
);
);
