こんにちは、
スクリプトに問題があります。
ループを使用しようとすると、空の列が表示されます。
私がループを使わないとき、それはうまくいきます。
col = dt << get column names;
For(i = 1, i <= N Items(col), i++,
c = "c" || Char(i);
Eval(Parse(Eval Insert("^c^= column(dt,i)<<GET values=""></GET>New Column( "Flag",<BR /> Character,<BR /> Nominal,<BR /> Formula(for(i=1,i<3,i++,<BR /> if(c2[i]>:LSL[i],"Pass","Failed"))));<BR />
私が最初に言おうと思うことは、これは XY問題 。しかし、どのようにしてフラグで動的な列数をチェックするのかという質問に答えるために、式自体の外側に式を作成します。
names default to here(1);
dt = New Table( "Test",
Add Rows( 5 ),
Set Header Height( 46 ),
New Column( "System",
Character,
"Nominal",
Set Values( {"F_T_F_S", "F_T_F_R", "F_T_F_T", "F_T_F_U", "F_T_F_V"} )
),
New Column( "01/09/2019",
Numeric,
"Continuous",
Format( "Best", 12 ),
Set Values( [500, 450, 900, 358, 500] )
),
New Column( "01/10/2019",
Numeric,
"Continuous",
Format( "Best", 12 ),
Set Values( [666, 120, 280, 852, 456] )
),
New Column( "01/11/2019",
Numeric,
"Continuous",
Format( "Best", 12 ),
Set Values( [520, 500, 450, 520, 520] )
),
New Column( "01/12/2019",
Numeric,
"Continuous",
Format( "Best", 12 ),
Set Values( [450, 666, 120, 450, 450] )
),
New Column( "LSL",
Numeric,
"Continuous",
Format( "Best", 12 ),
Set Values( [500, 800, 800, 0, 0] )
),
New Column( "USL",
Numeric,
"Continuous",
Format( "Best", 12 ),
Set Values( [980, 1100, 1100, 3700, 3700] )
)
);
//build the formula outside of the formula itself
ANDExpr = Expr(AND()); // we're going to throw all relavent columns into this AND Expression
for(i=2, i<=5, i++,
col = Column(i);
insert into(ANDExpr,
EvalExpr(:LSL < Expr(col)[] < :USL) // for each column check that it's between LSL & USL
);
);
f = EvalExpr(
if(Expr(nameexpr(ANDExpr)),
"Pass",
"Fail"
)
);
show(nameexpr(f));
Eval(EvalExpr(dt << New Column("Flag", formula(Expr(nameexpr(f)))) ));
数字の代わりに名前のリストを作成することもできます。
あなたの答えはTHX。
*あなたのスクリプトによると、それはあまりうまく機能していません - あなたはループの後に印刷しているので、私はすべての行に同じ答えを得ます。
*大きな問題は -
何をすることを提案しますか?
LSLとUSLの間のすべての行(すべての列に対して)を確認する必要があります。ただし、問題は列の名前が常に変わることです。

あなたの合格/不合格が最後の計算値として返されていないのではないでしょうか。 次の調整はあなたの問題を解決するかもしれません。
col = dt << get column names;
For( i = 1, i <= N Items( col ), i++,
c = "c" || Char( i );
Eval( Parse( Eval Insert( "^c^= column(dt,i)<<GET values=""> :LSL[i],
x = "Pass",
x = "Failed"
)
);
x;
)
);</GET>
しかし、もっと大きな問題があります。あなたの式はそれが機能するために "c2"と呼ばれるメモリ変数を持つことに依存しています。 その変数の値を変更または削除すると、式は変更された値を使用して式を計算します。または、削除された場合は、式はまったく機能しません。