JSL:將“<<設置公式”公式中的變量視為常量/文字我覺得應該有一個簡單的方法來做到這一點,但它卻讓我困惑......
例子:
blockSize = 15;
col<<set formula(Sequence(1,1000,1,blockSize));
運行腳本後,查看數據表中的公式——“blockSize”仍用作 Sequence() 的第四個輸入。
我真的不想要這個,因為我將在循環內動態定義 blockSize ,該循環會根據其迭代的每一列而變化。 如何使數據表的公式為“Sequence(1,1000,1,15)”而不是“Sequence(1,1000,1, blockSize)”?
謝謝!
回复:JSL:將“<<設置公式”公式中的變量視為常量/文字另一種使用 eval(evaexpr( ... expr( x ) ... )) 模式的方法
dt=newtable("example", newcolumn("col"));
blockSize = 15;
<STRONG>eval</STRONG>(<STRONG>evalexpr</STRONG>(col<<SET formula="">expr(blockSize)))));</SET>
Formula with blocksize value substituted for the variableFormula with blocksize value substituted for the variable用塊大小值替換變量的公式
所有這些解決方案要解決的問題是預評估表達式的一部分,但不是全部。
EvalExpr() 是一個對其參數進行部分求值的函數。 您想要評估的部分位於 Expr() 函數內部。 (因此得名 EvalExpr。)結果是一個表達式,需要對其求值才能執行 setFormula 操作。
回复:JSL:將“<<設置公式”公式中的變量視為常量/文字有些我喜歡使用帶有變量替換的命令字符串,特別是當我需要多次使用同一命令,並且公式或表達式有多個變量時。
dt = New Table( "Testit",
Add Rows( 1500 ),
New Column( "bbb", Numeric, "Continuous", Format( "Best", 12 ), ),
New Column( "ccc", Numeric, "Continuous", Format( "Best", 12 ), ),
);
cmdStr = "^curcol^ << set formula(Sequence(1,1000,1,^blocksize^));";
curcol = ":bbb";
blocksize = 15;
eval(parse(evalInsert(cmdStr)));
// Eval Insert substitutes the variable values delimited by ^
// Parse converts the string to an expression
// Eval runs the expression
// uncomment the next line to see results of evalInsert
// show(evalInsert(cmdStr) );
//==can reuse===
curcol =":ccc" ;
blocksize = 5;
eval(parse(evalInsert(cmdStr)));
回复:JSL:將“<<設置公式”公式中的變量視為常量/文字blockSize = 15;
Eval(
Substitute(
Expr( col << Set Formula( Sequence( 1, 1000, 1, bbb ) ) ),
Expr( bbb ),
blockSize
)
);