Analyser plusieurs commandes dans expr en utilisant le remplacement dansJ'essaie d'ajouter un nombre arbitraire de lignes de référence dans un graphique basé sur les arguments donnés dans une fonction.Et je peux construire la chaîne dont j’ai besoin sans trop de problèmes.Le problème que j'ai est que je n'arrive pas à l'insérer dans le passé parse() à cause des virgules dans la chaîne.Tout ce que je veux vraiment faire, c'est décoller les guillemets extérieurs de la chaîne, les remplacer et supprimer les \! Si nécessaire.Il existe peut-être une bien meilleure façon de procéder, mais voici l'essentiel de ma tentative :
Expression à ajuster :
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 chaîne que j'essaie de remplacer (cr ajouté pour plus de lisibilité) :
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 ),"
Mais parse() atteint la première virgule et se ferme :
substitute into(fixYaxis, Expr(IntRefLines), parse(myRefLines)) ;
Inattendu ",". Il manque peut-être un ";" ou ",".
Ligne 1 Colonne 60 : ...rk Red","USL_lt_2.5", 2 )►,Add Ref Line(30, Solid, ...
En fin de compte, je veux que fixYaxis ressemble à :
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 )
}
)
)
) ;
Merci pour toute aide!
Phil
Re : Analyser plusieurs commandes dans expr en utilisant le remplacement dansMerci!
J'ai aussi essayé l'idée de substitution de carats.J'avais vu cette méthode évoquée mais je ne la comprenais pas auparavant.Votre code a été très utile avec une implémentation simple dans mon code original (copier, couper, coller et travailler !).Le "\[" est quelque chose que je ne connaissais pas, et j'ai un autre problème sur lequel je peux utiliser cette solution evalinsert.
Mes excuses à tous pour la manière dont mes réponses sont ajoutées au fil de discussion.Mon intention était de répondre à la réponse de chaque afficheur de code après la leur, mais je continue de les voir ajoutées de manière quelque peu aléatoire. La réponse contenant l'image graphique était destinée à servir de commentaire au 2ème exemple de code.Cet article est destiné au 3ème exemple de code, et les autres concernent tous le 1er exemple de code.
Re : Analyser plusieurs commandes dans expr en utilisant le remplacement dansMerci!
J’ai d’abord mis en œuvre cette idée parce qu’elle me paraissait la plus logique au départ.J'ai choisi le deuxième code d'affiche plutôt que le vôtre car il répondait mieux à mes besoins futurs.Cependant, j'ai appris quelque chose de votre méthode que je vais utiliser pour résoudre un autre problème que j'ai.
Re : Analyser plusieurs commandes dans expr en utilisant le remplacement dansMerci!
J'avais essayé une idée comme celle-ci mais je ne comprenais vraiment pas comment assembler la chaîne de message sur le graphique.J'ai modifié votre script pour utiliser parse(refLinesList[i]) car mon élément de liste était plus compliqué que votre exemple.Et comme j'ai l'intention de modifier le script pour accepter une liste limite plutôt que de construire à partir de cette solution, cette solution répond le mieux à mes besoins actuels.
Il s'agissait également d'un segment d'une fonction plus large visant à créer une fonction graphique générique (encore un travail en cours).Le graphique complété ressemble à ceci :

Re : Analyser plusieurs commandes dans expr en utilisant le remplacement dansTxnelson,
J'ai implémenté votre méthode mais j'ai dû apporter quelques modifications. Si je comprends bien, il s'agit essentiellement d'une construction de chaîne qui est ensuite déballée/déballée. Mais pour que cela fonctionne, j'ai supprimé "FixyAxis =" de "myExpr = Expr(TheExpr ="FixyAxis = Expr(" puis je l'ai affecté à la sortie de la commande d'analyse. Ensuite, pour que cela fonctionne, j'ai dû évaluer (FixyAxis). Donc ce "myexpr;Parse( theexpr );" est devenu "myexpr; FixyAxis = Parse(theexpr) ;Eval(fixYaxis) ;". Mais eval(parse(theexpr)) ne l'a pas fait.
Merci!
Re : Analyser plusieurs commandes dans expr en utilisant le remplacement dansSerait-il plus simple de lancer la plateforme et d'envoyer ensuite une série de messages pour ajouter les lignes au lieu d'essayer de créer le message de lancement compliqué ?
Re : Analyser plusieurs commandes dans expr en utilisant le remplacement dansSalut,
Merci d'avoir répondu. J'essaie cela maintenant et cela semble fonctionner comme je le voulais, même si j'ai dû modifier un autre code pour le faire fonctionner - les exigences syntaxiques de JMP semblaient avoir changé avec plus "d'ajout de lignes de référence" - ce que je n'avais pas fait. remarqué jusqu'à ce que je construise manuellement un autre graphique et vide le script.
Quand j'aurai fini, je mettrai à jour la discussion.
Merci pour votre aide!
Phil
Re : Analyser plusieurs commandes dans expr en utilisant le remplacement dansVoici une autre façon de construire des chaînes de manière dynamique, puis d'exécuter le résultat final en utilisant eval(parse()). Utilise evalinsert pour remplacer les variables entourées de carets (c'est-à-dire ^varname^). Utilise également les caractères d'échappement de chaîne \[ et ]\ pour éviter d'avoir à échapper des guillemets doubles à l'intérieur d'une chaîne.
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 : Analyser plusieurs commandes dans expr en utilisant le remplacement dansFWIW, voici une alternative sur laquelle vous pourriez probablement vous appuyer :
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 : Analyser plusieurs commandes dans expr en utilisant le remplacement dansLorsque "Substitute" échoue, je me contente de générer le code dont j'ai besoin
Je ne suis pas sûr que ce soit exactement ce que vous voulez, mais cela devrait vous donner la possibilité de résoudre le problème.
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 );