JSL: 数式の最後の項をコピーし、この値を同じ数式に追加する方法やあみんな、
最初に複数の数式列を選択し、各数式列で最後の数値項を取得して、この値を既存の数式に追加できるスクリプトを探しています。
説明目的:
スクリプトを実行する前の 1 つの数式列:

その後(単に値 39,78... がコピーされ、追加されました):

数式の列が何百もあるので、ここで自動化されたスクリプトがあると便利です。
あなたの助けをお待ちしております!
ありがとう!
/マルコ
高度な統計モデリング自動化とスクリプトデータアクセス品質およびプロセスエンジニアリングRe: JSL: 数式の最後の項をコピーして、この値を同じ数式に追加する方法これを行うには、式を文字列として操作してから式として操作する 2 つの方法があります。
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) ) )
) );
)
);
Re: JSL: 数式の最後の項をコピーして、この値を同じ数式に追加する方法あなたの解決策をどうもありがとう@ih !
私のニーズを満たすために正規表現を少し調整する必要がありましたが、あなたの投稿は間違いなくそれを見つけるための鍵でした!
他のユーザーの場合は、以下の適応コードを見つけてください。
// 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: 数式の最後の項をコピーして、この値を同じ数式に追加する方法数式によっては、Arg() を使用できる場合もあります。 以下は非常に単純な例です。
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);