JSL: So kopieren Sie den letzten Term in einer Formel und fügen diesen Wert derselben Formel hinzuHallo allerseits,
Ich suche nach einem Skript, mit dem ich zunächst mehrere Formelspalten auswählen und in jeder Formelspalte den letzten numerischen Term nehmen und diesen Wert der bereits vorhandenen Formel hinzufügen kann.
Zur Veranschaulichung:
Eine Formelspalte vor dem Ausführen des Skripts:

und anschließend (es wurde einfach der Wert 39,78... kopiert und eingefügt):

Da ich Hunderte verschiedener Formelspalten habe, wäre es toll, hier ein automatisiertes Skript zu haben.
Ich freue mich auf Ihre Hilfe!
Danke!
/Marco
Erweiterte statistische ModellierungAutomatisierung und SkriptingDatenzugriffQualitäts- und ProzesstechnikBetreff: JSL: So kopieren Sie den letzten Term in einer Formel und fügen diesen Wert derselben Formel hinzuAbhängig von Ihren Formeln können Sie möglicherweise auch Arg() verwenden. Unten, wenn sehr einfaches Beispiel:
Names Default To Here(1);
dt = New Table("Untitled 2",
Add Rows(2),
New Column("Column 1", Numeric, "Continuous", Format("Best", 12), Set Values([1, 2])),
New Column("Column 2", Numeric, "Continuous", Format("Best", 12), Formula(:Column 1 * 2)),
New Column("Column 3", Numeric, "Continuous", Format("Best", 12), Formula(:Column 2 * 3))
);
cur_col_idx = 3;
Show(column(dt, cur_col_idx) << get formula);
Eval(Substitute(
Expr(
Column(dt, cur_col_idx) << Set Formula(_old_f_ + _new_mult_)
),
Expr(_old_f_), Column(dt, cur_col_idx) << Get Formula,
Expr(_new_mult_),
old_f = Column(dt, cur_col_idx - 1) << Get Formula;
Arg Expr(old_f, N Arg(old_f))
));
Show(column(dt, cur_col_idx) << get formula);Betreff: JSL: So kopieren Sie den letzten Term in einer Formel und fügen diesen Wert derselben Formel hinzuVielen Dank für deine Lösung @ich h !
Ich musste den Regexp leicht anpassen, um meine Bedürfnisse zu erfüllen, aber Ihr Beitrag war definitiv der Schlüssel, um ihn zu finden!
Für alle anderen Benutzer finden Sie unten den angepassten Code:
// Select some columns
dt = currentdatatable();
dt << Get Selected Columns;
//'fix' each selected column formula by manipulating the formula as a string
for each( {col, c}, dt << Get Column References( dt << Get Selected Columns ),
newf = regex(
char(col << Get Formula),
"(.* \* (\d+\.?\d*))",
"\1 + \2"
);
//show(Parse(newf));
Eval( Eval Expr(
col << Set Formula( Expr( Parse(newf) ) )
) );
);Betreff: JSL: So kopieren Sie den letzten Term in einer Formel und fügen diesen Wert derselben Formel hinzuHier sind zwei Möglichkeiten, dies zu tun, indem Sie die Formel als Zeichenfolge und dann als Ausdruck bearbeiten:
Names Default To Here( 1 );
//Make some sample data
dt =New Table( "Untitled",
Add Rows( 100 )
);
For Each( {i}, 1 :: 6,
Eval(
Eval Expr(
dt << New Column( "ToFix " || char(i),
Expression,
"None",
Formula( Vec Quadratic( [1 3 5, 3 2 6, 5 6 1], [1 3 5, 2 4 6] ) * Expr( i ) )
)
)
)
);
// Select some columns
dt << Select Columns( (dt << Get Column References)[4::5] );
//'fix' each selected column formula by manipulating the formula as a string
for each( {col, c}, dt << Get Column References( dt << Get Selected Columns ),
if( Starts With( col << get name(), "ToFix"),
newf = regex(
char(col << Get Formula),
"(.* \* (\d+))",
"\1 + \2"
);
//show(Parse(newf));
Eval( Eval Expr(
col << Set Formula( Expr( Parse(newf) ) )
) );
)
);
// Select some different columns
dt << Select Columns( (dt << Get Column References)[6::7] );
//'fix' each selected column formula by manipulating the formula as an expression
for each( {col, c}, dt << Get Column References( dt << Get Selected Columns ),
if( Starts With( col << get name(), "ToFix"),
f = col << Get Formula;
v = Arg(col << Get Formula, 2);
//show(Name Expr(f));
newf = Eval Expr( Add(Expr(Name Expr(f)), Expr(Name Expr(v))));
show(newf);
Eval( Eval Expr(
col << Set Formula( Expr( Name Expr(newf) ) )
) );
)
);