confuso su JSL in forma di espressione<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />Voglio memorizzare una tabella piccola in un'altra tabella in modo che uno script che li utilizzi entrambi nello stesso report possa ricostruire quello piccolo ogni volta che è richiesto.Questa sembra una buona soluzione perché in questo modo gli utenti della tabella possono anche aprire facilmente quella piccola tabella di informazioni correlata memorizzando solo un datatable.
Sono riuscito a far funzionare quanto segue, dopo aver digrignato i denti su strati di sintassi expr()....
dt = Open( "$SAMPLE_DATA/Big Class.jmp" );
dt2 = Open("$SAMPLE_DATA/Abrasione.jmp");
ts=dt<< Ottieni script();
Chiudi(dt,nosalva);
ne=espressionenome(ts);
eval(substitute(expr(dt2<
//...Dopo...
dt2<
dtBigClass=currentdatatable();
Ma 2 domande...
1) è davvero così complicato?Avendo usato getscript() per ottenere lo script, non esiste un modo più semplice per "mettere" lo script che ho ricevuto in una tabella?
2) Non sono entusiasta dell'utilizzo di currentdatatable() per far sì che la variabile dtBigClass punti sulla tabella dopo aver eseguito lo script.Sembra incline a inserire forse la cosa sbagliata. Supponiamo che lo script fallisca o che ci sia qualche problema di tempistica, sta ancora assegnando una tabella o un'altra a dtBigClass.Lo script assomiglia a "New Table("Big Class.. blah, blah" e mi piacerebbe davvero eseguire " dtBigClass=NewTable("Big Class...blah blah..."Sarei molto felice con una soluzione in cui posso "ottenere" lo script sotto forma di una stringa di testo che posso modificare ed eseguire di più direttamente .
Re: confuso su JSL in forma di espressioneGrazie!
Apprezzo entrambe queste risposte.Probabilmente dovrei lavorare di più per capire quelli basati su eval expr() ma devo ammettere che m Il metodo da seguire è eval(parse()) una stringa di testo.Meno sforzo mentale e in più posso eseguire la parte degli archi ed esaminare direttamente ciò che sto costruendo.Tuttavia, non sono riuscito a capire come inserirlo in una stringa...
char(dt<
ts=dt<
e poi caratteri...
...questo non funziona.
Allo stesso modo, la tua risposta alla domanda 2 sembra semplicissima ma non mi è venuto in mente che avrebbe funzionato!.Sono ancora un po' sorpreso: non è ovvio per me che restituirebbe qualcosa da inserire in dtBigClass ma è fantastico.
Re: confuso su JSL in forma di espressioneLa manipolazione delle espressioni può essere frustrante. Non è sempre facile sapere se gli argomenti della funzione vengono valutati in fase di esecuzione o semplicemente accettati come scritti. In genere, quando si trasferiscono espressioni a elementi della GUI come formule di colonna o script di tabella, è necessario uno sforzo aggiuntivo perché l'argomento non viene valutato. A volte è più semplice creare una stringa e poi eval(parse()) piuttosto che capire l'utilizzo ottimale expr(), evalexpr() ecc.
1) Può essere leggermente semplificato. Questo esempio mostra due modi per farlo
dt = Aprire ( "$SAMPLE_DATA/Classe grande.jmp" ) ;
dt2 = Aprire ( "$SAMPLE_DATA/Abrasione.jmp" ) ;
//1. Espressione
Val ( Espr.Val ( dt2 << nuovo script ( "Grande Classe" , dtBigClass = Espr ( dt << ottenere la sceneggiatura )))) ;
//2. Corda
Val ( Analizzare ( "dt2 << nuovoscript(\!"BigClass2\!", dtBigClass2 =" || Car ( dt << getscript ) || ")" )) ;
Vicino ( dt , nosalva ) ;
dt2 << runscript ( "Grande Classe" ) ;
dt2 << runscript ( "GrandeClasse2" ) ;
2) Puoi eseguire il compito all'interno dello script come sopra o come sotto
dtBigClass = dt2 << runscript ( "Grande Classe" ) ;
Re: confuso su JSL in forma di espressione1: Quasi così complicato.NewScript si aspetta che il suo argomento sia lo script, che spesso è la risposta giusta. Non questa volta.
2: Non mi piace neanche CurrentDatatable per questo lavoro.
dt = Open( "$SAMPLE_DATA/Big Class.jmp" );
dt2 = Open( "$SAMPLE_DATA/Abrasion.jmp" );
Eval( Eval Expr( dt2 << NewScript( "BigClass", bigclass = Expr( dt << getscript ) ) ) );
sostituto è un modo, ma puoi anche usare EvalExpr per valutare solo Expr.Il risultato di EvalExpr è un'espressione:

che è ancora da valutare.EvalExpr ha cercato Expr e lo ha valutato, quindi ha restituito l'espressione originale con la sostituzione effettuata.Guardando indietro alla riga 3, c'è un'altra Eval eseguita per eseguire effettivamente il comando NewScript (ma non l'assegnazione a bigclass ).
Quando viene eseguito lo script denominato "BigClass", assegna la variabile bigclass , evitando la necessità di CurrentDatatable.