複数のコマンドを replace into を使用して expr に解析する関数で指定された引数に基づいて、グラフに任意の数の参照線を追加しようとしています。そして、それほど苦労せずに必要な文字列を構築できます。私が抱えている問題は、文字列内のカンマが原因で過去の parse() にそれを取得できないことです。私が本当にやりたいのは、文字列から外側の引用符を剥がし、必要に応じて \! に置き換えて削除することだけです。おそらくこれを行うにはもっと良い方法があるかもしれませんが、私の試みの要点は次のとおりです。
調整が必要な表現:
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 )
}
)
)
) ;
置換しようとしている文字列変数(読みやすさのためにcrを追加しました):
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 ),"
ただし、parse() は最初のカンマに達して終了します。
substitute into(fixYaxis, Expr(IntRefLines), parse(myRefLines)) ;
予想外の「、」。 おそらく「;」が欠落している可能性があります。または "、"。
行 1 列 60: ...rk Red","USL_lt_2.5", 2 )►,Add Ref Line(30, Solid, ...
最終的に 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 )
}
)
)
) ;
助けてくれてありがとう!
フィル
Re:substitute into を使用して複数のコマンドを expr に解析するありがとう!
カラット置換のアイデアも試してみました。この方法が参照されているのを見たことはありましたが、以前は理解していませんでした。あなたのコードは、私の元のコードへの直接的な実装 (コピー、切り取り、貼り付けで動作します!) で非常に役に立ちました。"\[" は私が知らなかったもので、この evalinsert ソリューションを使用できる別の問題があります。
私の返信がスレッドに追加される形で皆さんにお詫び申し上げます。私の意図は、各コード投稿者の返信に続いて対処することでしたが、それらがややランダムに追加されているのを見続けています。 グラフ画像を含む返信は、2 番目のコード例に対するコメントとして意図されています。この投稿は 3 番目のコード例を対象としており、他の投稿はすべて 1 番目のコード例に関連しています。
Re:substitute into を使用して複数のコマンドを expr に解析するありがとう!
最初にこのアイデアが私にとって最も理にかなっていたため、最初に実装しました。私はあなたの将来のニーズにより適しているため、あなたのコードではなく 2 番目のポスター コードを選択しました。ただし、私はあなたの方法から何かを学び、私が抱えている別の問題に使用するつもりです。
Re:substitute into を使用して複数のコマンドを expr に解析するありがとう!
私はこのようなアイデアを試してみましたが、メッセージ文字列をグラフにまとめる方法を本当に理解していませんでした。私のリスト項目はあなたの例よりも複雑だったので、parse(refLinesList[i]) を使用するようにスクリプトを変更しました。そして、このソリューションから構築するのではなく、制限リストを受け入れるようにスクリプトを変更するつもりなので、現在のニーズを最もよく満たします。
これは、一般的なグラフ作成関数を構築するためのより大きな関数の一部でもありました (まだ進行中です)。完成したグラフは次のようになります。

Re:substitute into を使用して複数のコマンドを expr に解析するテキネルソン、
あなたのメソッドを実装しましたが、いくつかの変更を加える必要がありました。 私が理解しているように、これは基本的に文字列構造であり、その後アンラップ/アンパックされます。 ただし、これを機能させるために、「myExpr = Expr(TheExpr ="FixyAxis = Expr("」から「FixyAxis ="」を削除し、それを parse コマンドの出力に割り当てました。 次に、それを機能させるために、eval(FixyAxis) を実行する必要がありました。 したがって、この「myexpr;Parse( theexpr );」 「myexpr; FxyAxis = Parse(theexpr) ;Eval(fixYaxis) ;」になりました。 しかし、eval(parse(theexpr)) はそうではありませんでした。
ありがとう!
Re:substitute into を使用して複数のコマンドを expr に解析する複雑な起動メッセージを作成するよりも、プラットフォームを起動し、一連のメッセージを送信して行を追加する方が簡単でしょうか?
Re:substitute into を使用して複数のコマンドを expr に解析するこんにちは、
ご返信いただきありがとうございます。 私は今これを試していますが、希望どおりに動作しているようです。ただし、動作させるには他のコードを変更する必要がありました。JMP の構文上の要件は、「ref 行の追加」が増えて変更されたようですが、私は変更していませんでした。別のグラフを手動で作成してスクリプトをダンプするまでは気づきませんでした。
完了したら、ディスカッションを更新します。
ご協力いただきありがとうございます!
フィル
Re:substitute into を使用して複数のコマンドを expr に解析するここでは、文字列を動的に構築し、eval(parse()) を使用して最終結果を実行する別の方法を示します。 evalinsert を使用して、キャレットで囲まれた変数 (つまり、^varname^) を置き換えます。 また、文字列エスケープ文字 \[ および ]\ を使用して、文字列内の二重引用符をエスケープする必要がなくなるようにします。
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:substitute into を使用して複数のコマンドを expr に解析するFWIW、おそらくこれを基にして構築できる代替案を次に示します。
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:substitute into を使用して複数のコマンドを expr に解析する「代替」に失敗した場合は、必要なコードを生成することに頼ります。
これがまさにあなたが望むものであるかどうかはわかりませんが、問題を解決する方法の可能性が得られるはずです
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 );