Analisi di più comandi in expr utilizzando la sostituzione inSto cercando di aggiungere un numero arbitrario di linee di riferimento in un grafico in base agli argomenti forniti in una funzione.E posso costruire la stringa che mi serve senza troppi problemi.Il problema che sto riscontrando è che non riesco a inserirlo in past parse() a causa delle virgole nella stringa.Tutto quello che voglio veramente fare è togliere le virgolette esterne dalla stringa e sostituirle e rimuovere \! se necessario.Forse c'è un modo molto migliore per farlo, ma ecco il coraggio del mio tentativo:
Espressione che necessita di aggiustamento:
FixyAxis = expr( gbt <<
SendToReport(
Dispatch(
{},
"Graph Builder",
OutlineBox,
{myTitle}
),
Dispatch(
{},
name,
ScaleBox,
{
Min( minY ), Max( maxY ), Inc( ticksY ),
IntRefLines,
Show Major Grid( 1 ), , Show Minor Grid( 1 )
}
)
)
) ;
Variabile stringa che sto cercando di sostituire con (cr aggiunto per leggibilità):
myRefLines = "Add Ref Line(60, Solid, \!"Medium Dark Red\!",\!"USL_lt_2.5\!", 2 ),
Add Ref Line(30, Solid, \!"Medium Dark Red\!",\!"USL_gt_2.5_lt_4.5\!", 2 ),"
Ma parse() colpisce la prima virgola e chiude:
substitute into(fixYaxis, Expr(IntRefLines), parse(myRefLines)) ;
Inaspettato",". Forse manca un ";" O ",".
Linea 1 Colonna 60: ...rk Rosso","USL_lt_2.5", 2 ) ►,Aggiungi linea di riferimento(30, Continua, ...
Alla fine quello che voglio che sia fixYaxis è:
FixyAxis = expr( gbt <<
SendToReport(
Dispatch(
{},
"Graph Builder",
OutlineBox,
{myTitle}
),
Dispatch(
{},
//"Mean",
name,
ScaleBox,
{
Min( minY ), Max( maxY ), Inc( ticksY ),
Add Ref Line(60, Solid, "Medium Dark Red","USL_lt_2.5", 2 ),
Add Ref Line(30, Solid, "Medium Dark Red","USL_gt_2.5_lt_4.5", 2 ),
Show Major Grid( 1 ), , Show Minor Grid( 1 )
}
)
)
) ;
Grazie per qualsiasi aiuto!
Fil
Ri: Analisi di più comandi in expr utilizzando la sostituzione inGrazie!
Ho provato anche l'idea della sostituzione dei carati.Avevo visto fare riferimento a questo metodo ma non l'avevo capito prima.Il tuo codice è stato molto utile con un'implementazione semplice nel mio codice originale (copia, taglia, incolla e lavora!).Il "\[" è qualcosa di cui non ero a conoscenza e ho un altro problema su cui posso utilizzare questa soluzione evalinsert.
Mi scuso con tutti per il modo in cui le mie risposte vengono aggiunte al thread.Il mio intento era quello di rispondere alla risposta di ciascun utente del codice dopo la loro, ma continuo a vederli aggiunti in modo un po' casuale. La risposta con l'immagine del grafico al suo interno era intesa come commento al 2° esempio di codice.Questo post è destinato al terzo esempio di codice e gli altri riguardano tutti il primo esempio di codice.
Ri: Analisi di più comandi in expr utilizzando la sostituzione inGrazie!
Ho implementato prima questa idea perché inizialmente aveva più senso per me.Ho scelto il codice del secondo poster invece del tuo perché si adattava meglio alle mie esigenze future.Tuttavia, ho imparato qualcosa dal tuo metodo che userò per un altro problema che ho.
Ri: Analisi di più comandi in expr utilizzando la sostituzione inGrazie!
Avevo provato un'idea come questa ma in realtà non capivo come mettere insieme la stringa del messaggio nel grafico.Ho modificato il tuo script per utilizzare parse(refLinesList[i]) perché la mia voce di elenco era più complicata del tuo esempio.E poiché intendo modificare lo script per accettare un elenco di limiti piuttosto che creare da questa soluzione, soddisfa al meglio le mie esigenze attuali.
Questo era anche un segmento di una funzione più ampia per costruire una funzione grafica generica (ancora in fase di elaborazione).Il grafico completato appare così:

Ri: Analisi di più comandi in expr utilizzando la sostituzione intxnelson,
Ho implementato il tuo metodo ma avevo bisogno di apportare un paio di modifiche. A quanto ho capito, è fondamentalmente una costruzione di stringhe che poi viene scartata/spacchettata. Ma per farlo funzionare, ho rimosso "FixyAxis =" da "myExpr = Expr(TheExpr ="FixyAxis = Expr(" e quindi assegnato all'output del comando parse. Quindi, per farlo funzionare, ho dovuto eval(FixyAxis). Quindi questo "myexpr;Parse( theexpr );" è diventato "myexpr; FixyAxis = Parse(theexpr) ;Eval(fixYaxis) ;". Ma eval(parse(theexpr)) no.
Grazie!
Ri: Analisi di più comandi in expr utilizzando la sostituzione inSarebbe più semplice lanciare la piattaforma e poi inviare una serie di messaggi per aggiungere le righe invece di provare a costruire il complicato messaggio di lancio?
Ri: Analisi di più comandi in expr utilizzando la sostituzione inCIAO,
Grazie per la risposta. Lo sto provando adesso e sembra funzionare come volevo, anche se ho dovuto modificare altro codice per farlo funzionare - i requisiti sintattici di JMP sembravano essere cambiati con più "aggiungi linee di riferimento" - che non avevo notato finché non ho creato manualmente un altro grafico e ho scaricato lo script.
Appena avrò finito aggiornerò la discussione.
Grazie per l'aiuto!
Fil
Ri: Analisi di più comandi in expr utilizzando la sostituzione inEcco un altro modo per creare stringhe in modo dinamico e quindi eseguire il risultato finale utilizzando eval(parse()). Utilizza evalinsert per sostituire le variabili circondate da accenti accentati (ad esempio ^varname^). Utilizza anche i caratteri di escape della stringa \[ e ]\ per evitare di dover eseguire l'escape delle virgolette doppie all'interno di una stringa.
myRefLines = "\[Add Ref Line(60, Solid, "Medium Dark Red","USL_lt_2.5", 2 ),
Add Ref Line(30, Solid, "Medium Dark Red","USL_gt_2.5_lt_4.5", 2 ),]\";
FixyAxis = evalinsert("\[
gbt << SendToReport(
Dispatch( {}, "Graph Builder", OutlineBox, {myTitle}
),
Dispatch( {}, name, ScaleBox,
{
Min( minY ), Max( maxY ), Inc( ticksY ),
^myRefLines^,
Show Major Grid( 1 ), , Show Minor Grid( 1 )
}
)
)
)]\");
eval(parse(fixyaxis));Ri: Analisi di più comandi in expr utilizzando la sostituzione inFWIW, ecco un'alternativa su cui probabilmente potresti basarti:
NamesDefaultToHere(1);
dt = Open("$SAMPLE_DATA/Big Class.jmp");
gb = dt << Graph Builder(
Size( 528, 452 ),
Show Control Panel( 0 ),
Variables( X( :weight ), Y( :height ) ),
Elements( Points( X, Y, Legend( 8 ) ), Smoother( X, Y, Legend( 9 ) ) ),
);
// Make some reference lines
n = 3;
refLineList = {};
for(i=1, i<=n, i++,
InsertInto(refLineList, EvalExpr(Add Ref Line( Expr(RandomInteger(55,65)), "Solid", "Medium Dark Green")));
);
// Add the reference lines
for(i=1, i<=n, i++,
addLine = Expr(Report(gb)[axisBox(2)] << lineTBD);
SubstituteInto(addLine, Expr(lineTBD), refLineList[i]);
addLine;
);Ri: Analisi di più comandi in expr utilizzando la sostituzione inQuando "Sostituto" non mi riesce, ricado nel generare il codice di cui ho bisogno
Non sono sicuro che questo sia esattamente ciò che desideri, ma dovrebbe darti un potenziale modo per risolvere il problema
Names Default To Here( 1 );
myExpr = Expr(
TheExpr =
"FixyAxis = Expr(
gbt << SendToReport(
Dispatch( {}, \!"Graph Builder\!", OutlineBox, {myTitle} ),
Dispatch(
{},
name,
ScaleBox,
{Min( minY ), Max( maxY ), Inc( ticksY ),"
|| myRefLines || ", Show Major Grid( 1 ), ,
Show Minor Grid( 1 )}
)
)
);"
);
myRefLines =
"Add Ref Line(60, Solid, \!"Medium Dark Red\!",\!"USL_lt_2.5\!", 2 ),
Add Ref Line(30, Solid, \!"Medium Dark Red\!",\!"USL_gt_2.5_lt_4.5\!", 2 )";
myexpr;
Parse( theexpr );