JSL : Comment copier le dernier terme d'une formule et ajouter cette valeur à la même formuleSalut tout le monde,
Je recherche un script qui me permet de sélectionner plusieurs premières colonnes de formule et dans chaque colonne de formule, il prend le dernier terme numérique et ajoute cette valeur à la formule déjà existante.
À titre d’illustration :
Une colonne de formule avant d'exécuter le script :

et ensuite (simplement la valeur 39,78... a été copiée et ajoutée) :

Comme j'ai des centaines de colonnes de formules différentes, ce serait formidable d'avoir un script automatisé ici.
Dans l'attente de votre aide !
Merci!
/Marco
Modélisation statistique avancéeAutomatisation et scriptsAccès aux donnéesIngénierie Qualité et ProcédésRe : JSL : comment copier le dernier terme d'une formule et ajouter cette valeur à la même formuleVous pouvez également utiliser Arg() en fonction de vos formules. Ci-dessous si exemple très simple :
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);Re : JSL : comment copier le dernier terme d'une formule et ajouter cette valeur à la même formuleMerci beaucoup pour votre solution @ih !
J'ai dû adapter légèrement l'expression régulière pour répondre à mes besoins, mais votre message a définitivement été la clé pour le trouver !
Pour tout autre utilisateur, veuillez trouver ci-dessous le code adapté :
// 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) ) )
) );
);Re : JSL : comment copier le dernier terme d'une formule et ajouter cette valeur à la même formuleVoici deux façons de procéder, en manipulant la formule comme une chaîne puis comme une expression :
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) ) )
) );
)
);