행과 열을 특수 문자로 비교이것은 매우 쉬울 수 있지만 저는 JMP를 처음 접하고 이 오류에 대한 해결책을 찾기가 어렵습니다.
예기치 않은 "%". 누락된 "," 또는 ")"가 있을 수 있습니다.
범위가 지정된 데이터 테이블 액세스에는 dt1: Acidic Variant' , dt1:Acidic Variant /*###*/의 액세스 또는 평가에 데이터 테이블 열 또는 변수가 필요합니다.
나는 단순히 한 테이블의 행을 다른 테이블의 열과 비교하고 있습니다. % 또는 ()와 같은 특수 문자가 없는 행 및 열 이름에는 작동하지만 특수 문자가 있는 이름이 있습니다. 누구든지 이것이 어떻게 처리될 수 있는지 나에게 지적할 수 있습니까? 많은 도움을 주셔서 감사합니다. 감사합니다
Re: 행과 열을 특수문자로 비교나는 내 루프가 마지막 값을 취하지 않는 올바른 coz가 아니라고 생각했습니다. 업데이트가 늦어져서 죄송합니다.
Re: 행과 열을 특수문자로 비교@txnelson example2의 마지막 행에서 사양 제한만 가져오지 않는다는 것을 깨달았습니다. 이유는 아직 모르겠지만 알게되면 업데이트 하겠습니다.
감사해요.
Re: 행과 열을 특수문자로 비교@txnelson 신속하게 응답해 주셔서 감사합니다.
Re: 행과 열을 특수문자로 비교그런 다음 열 이름과 제한 데이터 테이블의 이름에 차이가 있다고 생각합니다.
Re: 행과 열을 특수문자로 비교@txnelson 하지만 변경된 테이블에 대해 스크립트를 실행하면 사양 제한이 "Acidic Variants" 열에 입력되지 않습니다.Re: 행과 열을 특수문자로 비교스크립트는 한도 테이블을 한 행씩 읽습니다.그런 다음 현재 있는 행에서 열 이름을 가져오고 열 번호가 아닌 열 이름으로 데이터 테이블 열에 제한을 적용합니다.
따라서 데이터 테이블의 열 순서는 중요하지 않습니다.
Re: 행과 열을 특수문자로 비교@txnelson , 행이 열과 같은 순서가 아닌 경우 데이터 테이블에 사양 제한을 추가할 수 있습니까? 예를 들어,
테이블 Example1은 그대로이지만 테이블 Example2는 다음과 같습니다.

이것을 어떻게 달성할 수 있습니까? 입력해 주셔서 감사합니다.
Re: 행과 열을 특수문자로 비교설명해주셔서 감사합니다.
Re: 행과 열을 특수문자로 비교이 문제는 JSL을 작성할 때 흔히 발생하는 문제입니다. 열 이름에 특수 문자가 있습니다.예를 들어 열 이름은
A+B
그리고 당신이 하려는 것은 열 속성을 설정하는 것입니다....이 경우에는 Spec Limits입니다.따라서 명령을 직접 작성하면 다음과 같습니다.
:A+B << Set Property( "Spec Limits", { LSL( 22 ), USL( 55 ), show limits( 1 ) } );
JSL은 이것을 좋아하지 않을 것입니다. 왜냐하면 JSL은 이것을 변수 이름 "B"에서 값을 추가한 다음 속성 설정을 적용하는 "A"라는 열로 해석하기 때문입니다.JSL은 오류를 던질 것입니다.
따라서 해결책은 :Name() 함수를 사용하는 것입니다.
:Name("A+B") << Set Property( "Spec Limits", { LSL( 22 ), USL( 55 ), show limits( 1 ) } );
이렇게 하면 JSL이 A+B를 열 이름으로 해석하게 됩니다.이제 이를 더욱 정확하게 하기 위해 이 앞에 데이터 테이블에 대한 포인터를 추가하면 특정 열을 가리킬 뿐만 아니라 특정 데이터 테이블의 특정 열을 가리키도록 합니다.
dt1 = data table("..........");
dt1:Name( "A+B" ) << Set Property( "Spec Limits", { LSL( 22 ), USL( 55 ), show limits( 1 ) } );
이제 귀하의 특정 질문:
( "dt1:Name(\!"" || Column( dt2, "ColumnName" )[i] || "\!")" )
더 완전한 형태로 바라볼 필요가 있습니다.
Parse( "dt1:Name(\!"" || Column( dt2, "ColumnName" )[i] || "\!")" ) )
우리는 항상 내부에서 JSL을 검사해야 합니다.그러므로
i = 2;
ColumnName이라는 변수에 대한 데이터 테이블 dt2의 두 번째 행 값은 A+B입니다.
Column( dt2, "ColumnName" )[i] = "A+B"
이제 JSL 코드는
Parse( "dt1:Name(\!"" || "A+B" || "\!")" ) )
다음 작업은 단순히 3개의 문자열을 하나의 문자열로 연결하는 것입니다.
"dt1:이름(\!""
"A+B"
"\!")"
문자열 1과 문자열 3에 큰따옴표가 너무 많은 것처럼 보일 수 있습니다. 하지만 JSL에서는 \! 이스케이프 문자로, 뒤에 오는 문자가 다르게 취급됨을 나타냅니다.\!n은 라인피드 문자로 처리되며 이 예에서 \!"는 포함된 큰따옴표로 처리됩니다.
따라서 연결이 완료되면 JSL은 다음과 같습니다.
Parse( "dt1:Name(\!"A+B\!")" ) )
마지막 단계는 Parse() 함수의 결과 작업입니다.문자열을 구문 분석하고 실행 준비를 합니다.우리의 경우에는 단순히 외부 큰따옴표를 제거하고 \!"를 간단한 큰따옴표로 변환하여
dt1:Name("A+B")
이것은 이름에 특수 문자가 있는 열을 참조하기 위한 구문으로 필요한 정확한 형식입니다.
dt1:Name( "A+B" ) << Set Property( "Spec Limits", { LSL( 22 ), USL( 55 ), show limits( 1 ) } );
이게 도움이 되길 바란다
Re: 행과 열을 특수문자로 비교@txnelson 이것은 정말 매력처럼 작동했습니다. 그러나 이 부분이 무엇을 하는지 이해하도록 도와주실 수 있습니까? 이름 기능을 사용해 보았지만 제대로 작동하지 못했습니다. 여러분의 도움에 다시 한 번 감사드립니다.
<SPAN class="token punctuation">(</SPAN> <SPAN class="token string">"dt1:Name(\!"</SPAN><SPAN class="token string">" || Column( dt2, "</SPAN><SPAN class="token function">ColumnName</SPAN><SPAN class="token string">" )[i] || "</SPAN>\<SPAN class="token operator">!</SPAN><SPAN class="token string">")"</SPAN> <SPAN class="token punctuation">)</SPAN>
Re: 행과 열을 특수문자로 비교다음은 작동할 수 있도록 스크립트를 수정한 것입니다.당신은 올바른 길을 가고 있었고, Substitute 함수에서 :Name() 함수를 사용하기만 하면 되었습니다.
Names Default to Here(1);
dt1 = Data Table( "Example1" );
dt2 = Data Table( "Example2" );
a = N Rows( dt2 );
colNamesList = dt1 << get column names( string );
For( i = 1, i < a, i++,
Eval(
Substitute(
Expr(
If( Try( __col__ << get name, "" ) != "",
__col__ << Set Property(
"Spec Limits",
{LSL( _LSL_ ), USL( _USL_ ), Target( _Target ), Show Limits( 1 )}
)
)
),
Expr( __col__ ), Parse( "dt1:Name(\!"" || Column( dt2, "ColumnName" )[i] || "\!")" ),
Expr( _LSL_ ), dt2:LSL[i],
Expr( _USL_ ), dt2:USL[i],
Expr( _Target ), dt2:Target[i],
)
)
);
또한 대상 데이터 테이블에 열이 있는지 확인하는 검사를 추가하여 스크립트에 오류가 발생하지 않고 모든 레코드가 처리되기 전에 처리를 중지합니다.
Re: 행과 열을 특수문자로 비교@Aam_jmp ,
어쩌면 이것은 당신이 뭔가를 배울 수있는 유용한 게시물입니다 https://community.jmp.com/t5/Discussions/Spec-limits-issue/mp/50166.
나는 당신의 실제 질문이 무엇인지 스레드를 통해 읽는 것을 이해하려고 노력하고 있습니까? 목표가 무엇인지 정의하면 도움이 될 것입니다. 따라서 스레드는 답변하기 쉽고 일반적으로 커뮤니티에 도움이 될 것입니다.
Re: 행과 열을 특수문자로 비교도움을 주셔서 감사합니다. 이 부분을 스스로 가르치고 있습니다. 그러나 다른 데이터 테이블을 사용하여 데이터 테이블에 사양 제한을 두려고 했습니다. 열 이름에 특수 문자가 없으면 원활하게 할 수 있습니다. 그러나 내 데이터 테이블에서 특수 문자를 처리할 수 없습니다. 내가 시도한 한 가지 접근 방식은 내 열 이름에서 (%)를 찾아 공백으로 바꾸는 것입니다. 효과가 있었지만 내 문제에 대한 최선의 해결책이라고 생각하지 않습니다. 추가 기능을 사용하여 사양 제한을 추가할 수 있다는 것을 알고 있지만 jsl로 이 문제를 해결할 수 있는 방법을 아는 것이 좋습니다. 이에 대해 제공할 수 있는 정보를 제공해 주셔서 감사합니다. 내 코드는 다음과 같습니다.
dt1 = Data Table( "Example1" );
dt2 = Data Table( "Example2" );
a = N Rows( dt2 );
For( i = 1, i < a, i++,
Eval(
Substitute(
Expr(
__col__ << Set Property( "Spec Limits", {LSL( _LSL_ ), USL( _USL_ ), Target( _Target ), Show Limits( 1 )} );
),
Expr( __col__ ), Parse( "dt1:" || dt2:ColumnName[i] ),
Expr( _LSL_ ), dt2:LSL[i],
Expr( _USL_ ), dt2:USL[i],
Expr( _Target ), dt2:Target[i],
)
)
);
Re: 행과 열을 특수문자로 비교@Aam_jmp ,
Help => Scripting Index ==> Parse 아래에 있는 Parse() 문서를 보면,
정의에 따라 구문 분석은 문자열을 예상하지만 구현에서 2개의 인수를 전달하고 연결될 것으로 예상합니다. 올바른 열 이름을 제공해도 작동하지 않는 이유를 알 수 있습니다. Scripting Index는 여러분의 친구이며 구문 및 함수 정의에 도움이 되도록 점점 더 많이 사용합니다.
Re: 행과 열을 특수문자로 비교열의 올바른 이름을 지정한 후에도 Parse를 사용하여 원하는 출력을 제공하지 않는 이유는 무엇입니까? % 및 ()와 같은 특수 문자를 구문 분석할 수 있는 방법이 있습니까? @uday_guntupalli
Re: 행과 열을 특수문자로 비교@Aam_jmp
dt1 = data table( "Example1" );
dt2 = data table( "Example2" );
ColValuesEx2 = dt2:Column 1 << Get Values;
a = n rows(dt2);
Res= {};
For(i=1,i<=a,i++,
temp = Concat("dt1:",ColValuesEx2[i]);
Insert Into(Res,temp);
);
Show(Res);
이 시도. 이전에 수행한 작업에서 내가 본 문제는 ColName이 실제 열을 참조하지 않는다는 것입니다. 데이터 테이블 2로 범위를 지정하려는 경우 데이터 테이블에 있는 열을 참조해야 합니다.
Parse 대신 concatenate를 사용했고 원하는 결과를 얻었습니다.

Re: 행과 열을 특수문자로 비교@uday_guntupalli 테이블을 제공할 수는 없지만 달성하고자 하는 것 중 일부는 열 이름을 구문 분석할 수 있는 것입니다. 다소 비슷해 보이는 데이터 테이블을 만들었습니다. 이 데이터에 대해 아래 코드가 작동하기를 원합니다.
Names Default To Here( 1 );
dt1 = data table( "Example1" );
dt2 = data table( "Example2" );
dt4 = dt2:Column 1 << get values();
a = n rows(dt2);
For(i=1,i<=a,i++,
Parse("dt1:" || dt4[i]);
);
Re: 행과 열을 특수문자로 비교@Aam_jmp ,
제 답변을 다시 읽어 보시고 다음 샘플을 사용해보세요. 이름 기능은 문제를 처리할 수 있습니다. 같은 샘플을 게시하고 있습니다. 스크립트와 샘플 데이터를 공유하지 않으면 오류의 원인을 파악하기 어렵습니다.
dt = Open( "$SAMPLE_DATA/Big Class.jmp" ); // Open Sample Data
MeanWeight = Col Sum(dt:weight); // Calculate Column Mean
dt << New Column("% of Total Weight",Numeric,Format("Percent",10,2),Continuous,Formula(:weight/MeanWeight)); // Define New column with % in name
dt << New Column("Test",Numeric,Format("Percent",10,2),Formula(Col Cumulative Sum(:Name("% of Total Weight")))); // Define Test Column that demonstrates the use of Name function that can capture the column name with % in it 이것이 내 제안을 조금 더 잘 설명해주기를 바랍니다. 친절하게 설명하지 않는다면 제가 도와드릴 수 있도록 좀 더 자세한 정보를 제공해 주세요.
Re: 행과 열을 특수문자로 비교이름은 Titer(%) 1, Titer(%) 2 등입니다.Re: 행과 열을 특수문자로 비교@Aam_jmp ,
% 기호가 열 이름의 일부인 경우(예: 열 이름이 "%x"라고 가정) Name() 함수를 사용하여 열을 식별해 보십시오. 샘플 데이터 세트와 스크립트를 제공할 수 있다면 무엇이 잘못되었는지 살펴보겠습니다.