Analizar múltiples comandos en expr usando sustituto enEstoy intentando agregar un número arbitrario de líneas de referencia en un gráfico basado en los argumentos dados en una función.Y puedo construir la cuerda que necesito sin demasiados problemas.El problema que tengo es que parece que no puedo pasarlo al pasado parse() debido a las comas en la cadena.Todo lo que realmente quiero hacer es quitar las comillas externas de la cadena y sustituirlas y eliminar las \! Si es necesario.Quizás haya una manera mucho mejor de hacer esto, pero aquí está el núcleo de mi intento:
Expresión que necesita ajuste:
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 )
}
)
)
) ;
Variable de cadena con la que estoy intentando sustituir (se agregó cr para facilitar la lectura):
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 ),"
Pero parse() llega a la primera coma y sale:
substitute into(fixYaxis, Expr(IntRefLines), parse(myRefLines)) ;
Inesperado ",". Quizás falte un ";" o ",".
Línea 1 Columna 60: ...rk Red","USL_lt_2.5", 2 ) ►, Agregar línea de referencia (30, Sólida, ...
Al final, lo que quiero que se vea fixYaxis es:
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 )
}
)
)
) ;
¡Gracias por cualquier ayuda!
filo
Re: Analizar múltiples comandos en expr usando sustituto en¡Gracias!
También probé la idea de sustituir los quilates.Había visto referencia a este método pero no lo entendía antes.Su código fue muy útil con una implementación sencilla en mi código original (¡copia, corta, pega y trabaja!).El "\[" es algo que no conocía y tengo otro problema en el que puedo usar esta solución de Evalinsert.
Mis disculpas a todos por la forma en que mis respuestas se agregan al hilo.Mi intención era abordar la respuesta de cada autor del código después de la de ellos, pero sigo viéndolos agregados de forma un tanto aleatoria. La respuesta con la imagen del gráfico estaba pensada como comentario al segundo ejemplo de código.Esta publicación está destinada al tercer ejemplo de código y todas las demás pertenecen al primer ejemplo de código.
Re: Analizar múltiples comandos en expr usando sustituto en¡Gracias!
Implementé esta idea primero porque inicialmente tenía más sentido para mí.Elegí el código del segundo póster en lugar del tuyo porque se adaptaba mejor a mis necesidades futuras.Sin embargo, aprendí algo de su método que voy a utilizar en otro problema que tengo.
Re: Analizar múltiples comandos en expr usando sustituto en¡Gracias!
Había probado una idea como esta pero realmente no entendía cómo juntar la cadena del mensaje en el gráfico.Modifiqué su script para usar parse(refLinesList[i]) porque el elemento de mi lista era más complicado que su ejemplo.Y dado que tengo la intención de cambiar el script para aceptar una lista de límites en lugar de crearla a partir de esta solución, se adapta mejor a mis necesidades actuales.
Este también fue un segmento de una función más grande para construir una función gráfica genérica (aún un trabajo en progreso).El gráfico completo se ve así:

Re: Analizar múltiples comandos en expr usando sustituto entxnelson,
Implementé su método pero necesitaba hacer un par de modificaciones. Según tengo entendido, es básicamente una construcción de cadena que luego se desenvuelve/desempaqueta. Pero para que funcione, eliminé "FixyAxis =" de "myExpr = Expr(TheExpr ="FixyAxis = Expr(" y luego lo asigné a la salida del comando de análisis. Luego, para que eso funcionara, tuve que evaluar (FixyAxis). Entonces este "myexpr;Parse( theexpr );" se convirtió en "myexpr; FixyAxis = Parse(theexpr);Eval(fixYaxis);". Pero eval(parse(theexpr)) no lo hizo.
¡Gracias!
Re: Analizar múltiples comandos en expr usando sustituto en¿Sería más sencillo iniciar la plataforma y seguir enviando una serie de mensajes para agregar las líneas en lugar de intentar crear el complicado mensaje de inicio?
Re: Analizar múltiples comandos en expr usando sustituto enHola,
Gracias por responder. Estoy intentando esto ahora y parece funcionar como quería, aunque tuve que modificar otro código para que funcionara (los requisitos sintácticos de JMP parecían haber cambiado con más "agregar líneas de referencia") que no había hecho. Me di cuenta hasta que construí manualmente otro gráfico y descarté el script.
Cuando termine actualizaré la discusión.
¡Gracias por tu ayuda!
filo
Re: Analizar múltiples comandos en expr usando sustituto enAquí hay otra forma de crear cadenas dinámicamente y luego ejecutar el resultado final usando eval(parse()). Utiliza evalinsert para reemplazar variables rodeadas por signos de intercalación (es decir, ^varname^). También utiliza los caracteres de escape de cadena \[ y ]\ para evitar tener que escapar de comillas dobles dentro de una cadena.
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));Re: Analizar múltiples comandos en expr usando sustituto enFWIW, aquí tienes una alternativa que probablemente puedas aprovechar:
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;
);Re: Analizar múltiples comandos en expr usando sustituto enCuando "Sustituto" falla, recurro a generar el código que necesito
No estoy seguro de que esto sea exactamente lo que desea, pero debería brindarle una posible forma de resolver el 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 );