Parsen mehrerer Befehle in expr mithilfe von replacement intoIch versuche, basierend auf den in einer Funktion angegebenen Argumenten eine beliebige Anzahl von Referenzlinien in ein Diagramm einzufügen.Und ich kann die Saite, die ich brauche, ohne großen Aufwand konstruieren.Das Problem, das ich habe, ist, dass ich es aufgrund der Kommas in der Zeichenfolge scheinbar nicht in die Vergangenheit parse() bekomme.Alles, was ich wirklich tun möchte, ist, die äußeren Anführungszeichen von der Zeichenfolge abzutrennen und sie bei Bedarf durch \! zu ersetzen und zu entfernen.Vielleicht gibt es einen viel besseren Weg, dies zu tun, aber hier ist der Kern meines Versuchs:
Ausdruck, der angepasst werden muss:
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 )
}
)
)
) ;
String-Variable, durch die ich ersetzen möchte (cr zur besseren Lesbarkeit hinzugefügt):
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 ),"
Aber parse() erreicht das erste Komma und wird beendet:
substitute into(fixYaxis, Expr(IntRefLines), parse(myRefLines)) ;
Unerwartet ",". Möglicherweise fehlt ein „;“ oder ",".
Zeile 1 Spalte 60: ...rk Red","USL_lt_2.5", 2 )►,Add Ref Line(30, Solid, ...
Letztendlich möchte ich, dass fixYaxis so aussieht:
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 )
}
)
)
) ;
Vielen Dank für jede Hilfe!
Phil
Betreff: Parsen mehrerer Befehle in expr mithilfe von replacement intoDanke!
Ich habe auch die Idee der Karatsubstitution ausprobiert.Ich hatte die erwähnte Methode gesehen, verstand sie aber vorher nicht.Ihr Code war sehr hilfreich bei der unkomplizierten Implementierung in meinen ursprünglichen Code (Kopieren, Ausschneiden, Einfügen und Arbeiten!).Das „\[“ ist etwas, von dem ich nichts wusste, und ich habe ein anderes Problem, bei dem ich diese Evalinsert-Lösung verwenden kann.
Ich entschuldige mich bei allen für die Art und Weise, wie meine Antworten dem Thread hinzugefügt werden.Meine Absicht war es, die Antwort jedes Code-Posters nach der anderen anzusprechen, aber ich sehe sie immer wieder etwas zufällig hinzugefügt. Die Antwort mit dem Diagrammbild darin war als Kommentar zum 2. Codebeispiel gedacht.Dieser Beitrag ist für das 3. Codebeispiel gedacht, die anderen beziehen sich alle auf das 1. Codebeispiel.
Betreff: Parsen mehrerer Befehle in expr mithilfe von replacement intoDanke!
Ich habe diese Idee zuerst umgesetzt, weil sie für mich zunächst am sinnvollsten war.Ich habe den zweiten Postercode dem Ihren vorgezogen, weil er besser zu meinen zukünftigen Bedürfnissen passt.Allerdings habe ich aus Ihrer Methode etwas gelernt, das ich bei einem anderen Problem, das ich habe, anwenden werde.
Betreff: Parsen mehrerer Befehle in expr mithilfe von replacement intoDanke!
Ich hatte eine solche Idee ausprobiert, verstand aber wirklich nicht, wie man die Nachrichtenzeichenfolge in das Diagramm einfügt.Ich habe Ihr Skript so geändert, dass es parse(refLinesList[i]) verwendet, da mein Listenelement komplizierter war als Ihr Beispiel.Und da ich beabsichtige, das Skript so zu ändern, dass es eine Limitliste akzeptiert, anstatt daraus zu erstellen, entspricht diese Lösung meinen aktuellen Anforderungen am besten.
Dies war auch ein Segment einer größeren Funktion zum Aufbau einer generischen Grafikfunktion (noch in Arbeit).Das fertige Diagramm sieht so aus:

Betreff: Parsen mehrerer Befehle in expr mithilfe von replacement intoTxnelson,
Ich habe Ihre Methode implementiert, musste aber einige Änderungen vornehmen. Soweit ich weiß, handelt es sich im Grunde um eine String-Konstruktion, die dann ausgepackt/entpackt wird. Aber damit es funktioniert, habe ich „FixyAxis =" aus „myExpr = Expr(TheExpr ="FixyAxis = Expr(" entfernt und es dann der Ausgabe des Parse-Befehls zugewiesen. Damit das funktioniert, musste ich dann eval(FixyAxis) ausführen. Also dieses „myexpr;Parse( theexpr );“ wurde zu „myexpr; FixyAxis = Parse(theexpr) ;Eval(fixYaxis) ;“. Aber eval(parse(theexpr)) tat dies nicht.
Danke!
Betreff: Parsen mehrerer Befehle in expr mithilfe von replacement intoWäre es einfacher, die Plattform zu starten und anschließend eine Reihe von Nachrichten zu senden, um die Zeilen hinzuzufügen, anstatt zu versuchen, die komplizierte Startnachricht zu erstellen?
Betreff: Parsen mehrerer Befehle in expr mithilfe von replacement intoHallo,
Danke für die Antwort. Ich versuche es jetzt und es scheint so zu funktionieren, wie ich es wollte, obwohl ich anderen Code ändern musste, damit es funktioniert – die syntaktischen Anforderungen von JMP schienen sich mit mehr „Ref-Zeilen hinzufügen“ geändert zu haben – was ich nicht getan hatte Das ist mir aufgefallen, bis ich manuell ein weiteres Diagramm erstellt und das Skript gelöscht habe.
Wenn ich fertig bin, werde ich die Diskussion aktualisieren.
Vielen Dank für Ihre Hilfe!
Phil
Betreff: Parsen mehrerer Befehle in expr mithilfe von replacement intoHier ist eine weitere Möglichkeit, Zeichenfolgen dynamisch zu erstellen und das Endergebnis dann mit eval(parse()) auszuführen. Verwendet evalinsert, um von Caretzeichen umgebene Variablen zu ersetzen (z. B. ^varname^). Verwendet außerdem die Zeichenfolgen-Escapezeichen \[ und ]\, um doppelte Anführungszeichen innerhalb einer Zeichenfolge zu vermeiden.
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));Betreff: Parsen mehrerer Befehle in expr mithilfe von replacement intoFWIW, hier ist eine Alternative, auf der Sie wahrscheinlich aufbauen könnten:
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;
);Betreff: Parsen mehrerer Befehle in expr mithilfe von replacement intoWenn „Substitute“ fehlschlägt, greife ich auf die Generierung des benötigten Codes zurück
Ich bin mir nicht sicher, ob das genau das ist, was Sie wollen, aber es sollte Ihnen eine Möglichkeit zur Lösung des Problems bieten
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 );