Formel im JSL-SkriptIch habe eine einspaltige Tabelle mit numerischen Daten. Ich möchte eine Spalte hinzufügen und eine Formel angeben, die jede Zelle der ersten Spalte mit einem im Skript übergebenen Variablennamen überprüft.
mycol << Neue Spalte ("belowCount", Numeric, Formula(If( col_to_check < limit_val, 1, 0 ) );
mycol ist eine einspaltige Datentabelle, col_to_check verweist auf die erste Spalte und limit_val ist eine Variable.
Beim Öffnen der Tabelle kann die Formel die erste Spalte nicht übernehmen.
Ich habe auch versucht, Column(1), Column(1) zu verwenden und die Expr-Funktion eingesetzt, die jedoch alle nutzlos waren.
Automatisierung und SkripterstellungDatenzugriffBetreff: Formel im JSL-SkriptKorrekte Syntax:
Eval(
Eval Expr(
mycol << New Column( "belowCount",
Numeric,
Formula( If( Expr( Name Expr( As Column( col_to_check ) ) ) < Expr( limit_val ), 1, 0 ) )
)
)
)
Betreff: Formel im JSL-SkriptZunächst einmal enthielt Ihre Beispielformel nicht genügend schließende Klammern, was zu einem Fehler führen kann. Zweitens hätte vor „col_to_check“ möglicherweise ein Doppelpunkt (":") stehen müssen, es sei denn, es handelte sich um einen Variablennamen der Spalte oder die Schreibweise (Groß-/Kleinschreibung) stimmte exakt überein.
Unten sehen Sie, was ich verwendet habe und was Ihrer Meinung nach Ihren Anforderungen entspricht. Ich habe Eval und Eval Expr am Anfang der neuen Spaltenzeile verwendet, um die Variable auszuwerten und die Spalte zu erstellen.
names default to here(1);
mycol = current data table();
limit_val = 5;
eval(eval expr(mycol << New Column ("belowCount", Numeric, Formula(If( :col_to_check < expr(limit_val), 1, 0 ) ))));
Betreff: Formel im JSL-SkriptSie müssen die Variablen in Formeln auswerten. Dies ist immer noch eine gute Referenz zum Einfügen eines Ausdrucks in einen anderen mithilfe von Eval Insert, Eval Expr, Parse und Substitute (obwohl es einige Aktualisierungen vertragen könnte). Hier ist eine Möglichkeit mit Eval(Substitute()) (für einen einfachen Fall wie diesen würde ich Eval(EvalExpr()) verwenden, wie hogi es demonstriert hat).
Names Default To Here(1);
new_col = Eval(Substitute(
Expr(mycol << New Column("belowCount", Numeric,
Formula(If(col_to_check < _limit_val_, 1, 0))
)),
Expr(col_to_check), Name Expr(AsColumn(mycol, 1)),
Expr(_limit_val_), limit_val
));
Und ein vollständiges Beispiel
Names Default To Here(1);
limit_val = 5;
mycol = New Table("Untitled",
Add Rows(10),
Compress File When Saved(1),
New Column("Column 1", Numeric, "Continuous", Set Values([1, 2, 3, 4, 5, 6, 7, 8, 9, 10]))
);
new_col = Eval(Substitute(
Expr(mycol << New Column("belowCount", Numeric,
Formula(If(col_to_check < _limit_val_, 1, 0))
)),
Expr(col_to_check), Name Expr(AsColumn(mycol, 1)),
Expr(_limit_val_), limit_val
));
