Re: 수식에 for 루프 변수를 사용하세요.몇 가지 문제
그만큼
Column[ l ]
지정한 구문이 잘못되었습니다.열은 행렬 []이 아닌 함수()이므로 다음과 같이 지정해야 합니다.
Column( l )
다음으로, 수식에는 할당하는 값에 문제가 있습니다.수식에 따라 값이 할당되지 않는 경우가 있습니다.JMP 공식은 할당된 마지막 값을 반환하므로 모든 경우에 대해 공식에 값을 명시적으로 할당해야 합니다.내 버전의 수식에서는 변수 X를 사용하여 논리를 할당하고 있습니다.값을 누락된 값으로 초기화한 다음 If() 논리에 의해 X가 할당됩니다.그런 다음 계산된 X 값이 처리된 마지막 값임을 확인합니다.
x;
수식의 마지막 문으로 사용됩니다.
For( k = 40, k <= 54, k += 2,
x1 = 1;
x2 = 8;
y1 = 40;
y2 = 54;
m = (y2 - y1) / (x2 - x1);
c = y2 - (m * x1);
l = (k - c) / m;
dt << New Column( "Test" || Char( k ),
Numeric,
"Continuous",
Format( "Best", 12 ),
Formula(
x = .;
If( :Strobe == 1,
If(
:Tested Variable == 0 | :Tested Plane == 1,
If( Left( Right( :"x"n, Column(l) ) ),
1
) == "1",
x = 1,
Left( Right( :"x"n, (l) ), 1 ) == "0",
x = 0,
),
);
x;
)
);
)
마지막으로 토론 질문에 JSL을 입력할 때 다음을 사용하세요.
커뮤니티 구성원이 JSL을 더 쉽게 읽을 수 있도록 아이콘
수식에 for 루프 변수 사용이 스크립트를 사용해 보았으나 변수 "l"이 작동하지 않고 변수 "k"만 작동했습니다. 어쨌든 이걸 해결하려면?
For( k = 40, k <= 54, k += 2,
x1 = 1;
x2 = 8;
y1 = 40;
y2 = 54;
m = (y2 - y1) / (x2 - x1);
c = y2 - (m * x1);
l = (k - c) / m;
dt << New Column( "Test" || Char( k ),
Numeric,
"Continuous",
Format( "Best", 12 ),
Formula(
If( :Strobe == 1,
If(
:Tested Variable == 0 | :Tested Plane == 1,
If( Left( Right( :"x"n, Column[l] ) ), 1 ) == "1",
1, Left( Right( :"x"n, (l) ), 1 ) == "0",
0,
),
)
)
);
)자동화 및 스크립팅Re: 수식에 for 루프 변수를 사용하세요.알겠습니다. 다음에는 이 아이콘을 사용하겠습니다. 그런데 스크립트가 작동하지 않습니다. 아마도 내가 직면한 문제가 무엇인지 더 자세히 설명해야 할 것 같습니다.
x="00101101"과 같은 8비트 이진수 열이 있습니다.
그런 다음 내 변수 k가 다르면 x 열에서 읽은 비트도 달라야 합니다.
\\k start 40, For each loop will add 2
For( k = 40, k <= 54, k += 2,
x1 = 1;
x2 = 8;
y1 = 40;
y2 = 54;
m = (y2 - y1) / (x2 - x1);
c = y2 - (m * x2);
l = (k - c) / m;
\\l is calculated based on k\
\\Tested variable & Column x & Strobe are the column in my data set
\\If k=40, then the readout will be 1st bit from the right of column x;
\\If k=40, then the readout will be 8th bit from the right of column x;
dt << New Column( "Test" || Char( k ),
Numeric,
"Continuous",
Format( "Best", 12 ),
Formula(
If( :Strobe == 1,
If(
:Tested Variable == 0 | :Tested Variable == 1,
If( Right( :"x"n, Column(l) ) ) == "1",
1, Right( :"x"n, (l) )== "0",
0,
),
)
)
);
)내가 직면한 문제는 for 루프에 Column(l), l을 넣어도 내가 읽고 싶은 비트가 무엇인지 jmp가 인식할 수 없다는 것입니다.
Re: 수식에 for 루프 변수를 사용하세요.샘플 데이터 테이블을 첨부해 주시면 도움이 될 것 같습니다.
추가 설명을 듣고 변경해 보세요.
If( Right( :"x"n, Column(l) ) ) == "1"
에게
If( Right( :"x"n, as Column( "Column" || char(l) )== "1"
Re: 수식에 for 루프 변수를 사용하세요.안녕하세요 짐, 여기 데이터 테이블이 있습니다. 데이터 테이블에 표시될 것으로 예상되는 내용을 입력했습니다. 열 데이터는 "l" 값이 무엇인지, 그리고 이 값이 어떤 "x" 값에서 나오는지 설명합니다.
Re: 수식에 for 루프 변수를 사용하세요.감사합니다 Jim, 작동하는 것 같지만 인쇄 결과가 약간 일치하지 않을 것 같습니다. 수식에서 "_l_" 뒤에 ",1"을 추가하면 잘 작동합니다. 여기에 전체 jsl 스크립트를 첨부했습니다.
Names Default To Here( 1 );
dt = Current Data Table();
//k start 40, For each loop will add 2
For( k = 40, k <= 54, k += 2,
x1 = 1;
x2 = 8;
y1 = 40;
y2 = 54;
m = (y2 - y1) / (x2 - x1);
c = y2 - (m * x2);
l = (k - c) / m;
//l is calculated based on k\
//Tested variable & Column x & Strobe are the column in my data set
//If k = 40;, then the readout will be 1st bit from the right of column x;
//If k = 40;,then the readout will be 8th bit from the right of column x;
// The variable l needs to be fully parsed in the formula, so that if the
// value of l changes, it does not change previous formulas
Eval(
Substitute(
Expr(
dt << New Column( "Test" || Char( k ),
Numeric,
"Continuous",
Format( "Best", 12 ),
Formula(
theVal = .;
If( :Strobe == 1,
If( :Tested Variable == 0 | :Tested Variable == 1,
theVal = Num( Substr( :x, _l_ ,1) )
)
);
theVal;
)
)
),
Expr( _l_ ), l
)
);
);Re: 수식에 for 루프 변수를 사용하세요.네 말이 맞아, 그건 내 실수야.입력 내용을 수정하겠습니다.
Re: 수식에 for 루프 변수를 사용하세요.아래 스크립트가 작동하는 것 같습니다.제공된 스크립트는 \\를 주석 개시자로 사용했습니다. 여기서 //는 올바른 구문입니다.
실제 작업 공식은 실제로 Substr() 함수를 사용하는 것으로 요약됩니다.
Eval(Substitute(Expr())) 섹션을 추가하면 변수를 통해 값을 참조하는 대신 l 변수의 값이 l의 실제 값으로 변경되었습니다.
Names Default To Here( 1 );
dt = Current Data Table();
//k start 40, For each loop will add 2
For( k = 40, k <= 54, k += 2,
x1 = 1;
x2 = 8;
y1 = 40;
y2 = 54;
m = (y2 - y1) / (x2 - x1);
c = y2 - (m * x2);
l = (k - c) / m;
//l is calculated based on k\
//Tested variable & Column x & Strobe are the column in my data set
//If k = 40;, then the readout will be 1st bit from the right of column x;
//If k = 40;,then the readout will be 8th bit from the right of column x;
// The variable l needs to be fully parsed in the formula, so that if the
// value of l changes, it does not change previous formulas
Eval(
Substitute(
Expr(
dt << New Column( "Test" || Char( k ),
Numeric,
"Continuous",
Format( "Best", 12 ),
Formula(
theVal = .;
If( :Strobe == 1,
If( :Tested Variable == 0 | :Tested Variable == 1,
theVal = Num( Substr( :x, _l_ , 1 ) )
)
);
theVal;
)
)
),
Expr( _l_ ), l
)
);
);