대체를 사용하여 여러 명령을 expr로 구문 분석함수에 제공된 인수를 기반으로 그래프에 임의 개수의 참조선을 추가하려고 합니다.그리고 큰 어려움 없이 필요한 문자열을 구성할 수 있습니다.내가 겪고 있는 문제는 문자열의 쉼표로 인해 과거의 구문 분석()으로 가져올 수 없는 것 같다는 것입니다.내가 정말로 원하는 것은 문자열에서 바깥쪽 따옴표를 떼어내고 필요한 경우 \!를 대체하고 제거하는 것입니다.아마도 이 작업을 수행하는 훨씬 더 좋은 방법이 있을 수 있지만 여기에 내 시도의 핵심이 있습니다.
조정이 필요한 표현:
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 ),"
그러나 구문 분석()은 첫 번째 쉼표에 도달하고 종료됩니다.
substitute into(fixYaxis, Expr(IntRefLines), parse(myRefLines)) ;
예상치 못한 ",". 아마도 ";"가 누락되었을 수 있습니다. 또는 ",".
라인 1 열 60: ...rk Red","USL_lt_2.5", 2 )►,참조 라인 추가(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: 대체를 사용하여 여러 명령을 expr로 구문 분석합니다.감사해요!
캐럿 대체 아이디어도 시도해 봤습니다.나는 이 방법이 언급된 것을 본 적이 있지만 이전에는 이해하지 못했습니다.귀하의 코드는 내 원본 코드에 대한 간단한 구현(복사, 잘라내기, 붙여넣기 및 작업!)에 매우 도움이 되었습니다."\["는 제가 몰랐던 것이며 이 evalinsert 솔루션을 사용할 수 있는 또 다른 문제가 있습니다.
내 답변이 스레드에 추가되는 방식으로 모든 분들께 사과드립니다.내 의도는 각 코드 포스터의 답변을 답변하는 것이었지만 무작위로 추가된 내용이 계속 표시됩니다. 그래프 그림이 포함된 응답은 두 번째 코드 예제에 대한 설명으로 의도되었습니다.이 게시물은 세 번째 코드 예제를 위한 것이며 나머지는 모두 첫 번째 코드 예제와 관련이 있습니다.
Re: 대체를 사용하여 여러 명령을 expr로 구문 분석합니다.감사해요!
나는 이 아이디어가 처음에 나에게 가장 의미가 있었기 때문에 먼저 구현했습니다.나는 미래의 요구 사항에 더 적합하기 때문에 두 번째 포스터 코드를 선택했습니다.그러나 나는 당신의 방법을 통해 내가 가진 또 다른 문제에 적용할 무언가를 배웠습니다.
Re: 대체를 사용하여 여러 명령을 expr로 구문 분석합니다.감사해요!
나는 이와 같은 아이디어를 시도했지만 실제로 메시지 문자열을 그래프에 통합하는 방법을 이해하지 못했습니다.내 목록 항목이 귀하의 예보다 더 복잡하기 때문에 구문 분석(refLinesList[i])을 사용하도록 스크립트를 수정했습니다.그리고 이 솔루션을 빌드하는 대신 제한 목록을 허용하도록 스크립트를 변경하려고 하므로 현재 요구 사항에 가장 적합합니다.
이는 또한 일반 그래프 기능을 구축하기 위한 더 큰 기능의 일부였습니다(아직 진행 중인 작업).완성된 그래프는 다음과 같습니다.

Re: 대체를 사용하여 여러 명령을 expr로 구문 분석합니다.텍사스 넬슨,
귀하의 방법을 구현했지만 몇 가지 수정이 필요했습니다. 내가 이해하는 바에 따르면 이는 기본적으로 풀리거나 풀리는 문자열 구성입니다. 하지만 작동시키려면 "myExpr = Expr(TheExpr ="FixyAxis = Expr(")에서 "FixyAxis ="를 제거한 다음 이를 구문 분석 명령의 출력에 할당했습니다. 그런 다음 이를 작동시키려면 평가(FixyAxis)를 수행해야 했습니다. 그래서 이 "myexpr;Parse(theexpr);" "myexpr; FixyAxis = Parse(theexpr) ;Eval(fixYaxis) ;"가 되었습니다. 그러나 eval(parse(theexpr)) 은 그렇지 않았습니다.
감사해요!
Re: 대체를 사용하여 여러 명령을 expr로 구문 분석합니다.복잡한 시작 메시지를 작성하는 대신 플랫폼을 시작하고 라인을 추가하기 위해 일련의 메시지를 보내는 것이 더 간단할까요?
Re: 대체를 사용하여 여러 명령을 expr로 구문 분석합니다.안녕,
응답해 주셔서 감사합니다. 지금 시도 중인데 원하는 대로 작동하는 것 같습니다. 하지만 작동하려면 다른 코드를 수정해야 했습니다. JMP의 구문 요구 사항은 "참조 줄 추가"로 인해 변경된 것 같았습니다. 수동으로 다른 그래프를 작성하고 스크립트를 덤프할 때까지 알아차렸습니다.
완료되면 토론을 업데이트하겠습니다.
당신의 도움을 주셔서 감사합니다!
필
Re: 대체를 사용하여 여러 명령을 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: 대체를 사용하여 여러 명령을 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: 대체를 사용하여 여러 명령을 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 );