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 ループ変数の使用わかりました、次回からアイコンを使用します。 ところで、スクリプトが機能していません。 私が直面した問題についてさらに詳しく説明する必要があるかもしれません
8ビットの2進数を含む列があります。たとえば、x = "00101101"
次に、変数 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 ループ変数の使用ジムさん、うまく機能していると思いますが、印刷結果は少し不一致になります。 数式の「_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
)
);
);