JSL:如何複製公式中的最後一項並將該值加到同一公式中大家好,
我正在尋找一個腳本,它允許我選擇第一個多個公式列,並且在每個公式列中它採用最後一個數字項目並將該值添加到已經存在的公式中。
出於說明目的:
運行腳本之前的公式列:

然後(簡單地複製並添加值 39,78...):

由於我有數百個不同的公式列,因此這裡有一個自動化腳本會很棒。
期待您的幫忙!
謝謝!
/馬可
進階統計建模自動化和腳本編寫資料存取品質和工藝工程回复: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);回复: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) ) )
) );
);回复:JSL:如何復制公式中的最後一項並將該值添加到同一公式中這裡有兩種方法可以做到這一點,將公式作為字符串然後作為表達式進行操作:
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) ) )
) );
)
);