JSL: tratta la variabile all'interno della formula "<< set formula" come costante/letteralePenso che dovrebbe esserci un modo semplice per farlo, ma mi sfugge...
Esempio:
blockSize = 15;
col<<set formula(Sequence(1,1000,1,blockSize));
Dopo aver eseguito lo script, visualizza la formula in datatable: "blockSize" è ancora utilizzato come quarto input per Sequence().
Non lo voglio davvero, poiché definirò dinamicamente blockSize all'interno di un ciclo che cambia per ogni colonna su cui scorre. Come faccio a fare in modo che la formula del datatable sia "Sequence(1,1000,1,15)" anziché "Sequence(1,1000,1, blockSize)"?
Grazie!
Ri: JSL: tratta la variabile all'interno della formula "<< set formula" come costante/letteraleUn altro approccio che utilizza il modello eval(evalexpr( ... 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 variableFormula con valore blocksize sostituito alla variabile
Il problema che tutte queste soluzioni risolvono è la prevalutazione di parte dell'espressione, ma non di tutta.
EvalExpr() è una funzione che valuta parzialmente il suo argomento. Le parti che vuoi valutare si trovano all'interno delle funzioni Expr(). (Da qui il nome, EvalExpr.) Il risultato è un'espressione, che deve essere valutata per eseguire l'operazione setFormula.
Ri: JSL: tratta la variabile all'interno della formula "<< set formula" come costante/letteraleAd alcuni mi piace usare stringhe di comando con sostituzione di variabili, soprattutto quando devo usare lo stesso comando più di una volta e se la formula o l'espressione ha più di una variabile.
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)));
Ri: JSL: tratta la variabile all'interno della formula "<< set formula" come costante/letteraleblockSize = 15;
Eval(
Substitute(
Expr( col << Set Formula( Sequence( 1, 1000, 1, bbb ) ) ),
Expr( bbb ),
blockSize
)
);