在 For Each Row 循环中为单元格赋值,前提是该单元格已在同一个循环中被赋值我在数据表上执行了一个“For Each Row”函数。它会通过一系列“If”语句来评估某些列中的值,然后根据结果为“:Correct_Process”列赋值。
目前我已经像这样设置了。
For Each Row(
dt,
If( :Module == "M05" & :Measurement == "Conductivity",
If(:Actual > m5_cond_hi | :Actual < m5_cond_low,
:Correct_Process = "Incorrect",
:Correct_Process = "Correct"
);
If( splits_detected == 1 & Contains( col_name_list, "PMC_FreeForm" ),
If( :PMC_FreeForm == "DI" | Contains(:PMC_FreeForm, "Mod 5 pump off"),
If( :Actual != 0,
:Correct_Process = "Incorrect",
:Correct_Process = "Correct"
);
);
);
If( splits_detected == 1 & Contains( col_name_list, "CPMC_Conductivity" ),
num_cond = Num(:CPMC_Conductivity);
lim_hi = num_cond + 0.6;
lim_low = num_cond - 0.6;
If( :Actual > lim_hi | :Actual < lim_low,
show("Evaluated Incorrect");
:Correct_Process = "Incorrect",
show("Evaluated Correct");
:Correct_Process = "Correct"
);
);
当我运行脚本时,如果 :CPMC_Conductivity 的值为“13.2”,而 :Actual 的值为 13.5,那么 :Correct_Process 列的值仍然会被赋值为“Incorrect”。有趣的是,由于 show() 语句,日志显示“Evaluated Correct”(评估正确),而我预期它会显示“Evaluated Correct”(评估正确),这意味着 If 语句的评估正确,但 :Correct_Process 的值却没有被赋值为“Correct”。
我猜测这是因为我在第一个嵌套的 If 语句中默认分配了 :Correct_Process 列,然后在第三个嵌套的 If 语句中尝试用更具体的检查进行覆盖。但是,在此之后,我在这个组中也进行了类似的检查,似乎可以在其他条件下成功覆盖(例如第二个嵌套的 If 语句),所以我想知道我这里遗漏了什么。
自动化和脚本视窗回复:在 For Each Row 循环中为单元格分配值,在同一个循环中已经为其分配了一个值是否有理由在循环中多次覆盖相同的单元格值?
回复:在 For Each Row 循环中为单元格分配值,在同一个循环中已经为其分配了一个值另外,您能提供示例数据集吗?
快速检查一下,一切正常
Names Default To Here(1);
dt = open("$SAMPLE_DATA/Big Class.jmp");
For Each Row(dt,
If(:height > 60,
Write("\!N", Row(), " 1: If");
:sex = "A";
,
Write("\!N", Row(), " 1: Else");
:sex = "B";
);
If(:weight > 70,
Write("\!N", Row(), " 2: If");
:sex = "AA";
,
Write("\!N", Row(), " 2: Else");
:sex = "BB";
);
);
您可能还想利用<<开始数据更新和<<结束数据更新
回复:在 For Each Row 循环中为单元格分配值,在同一个循环中已经为其分配了一个值第一个 If() 函数下的 3 个 If() 函数将彼此独立运行。也就是说,如果第一个 If() 函数为 True,则将对每一行分别执行这 3 个 If() 函数。
我会使用 JSL 调试器,单步执行代码,查找值何时发生变化。它会显示代码逻辑在哪里没有按预期运行。
如果您可以提供示例数据表,社区也许能够更深入地探究该问题
回复:在 For Each Row 循环中为单元格分配值,在同一个循环中已经为其分配了一个值不,我根据别人的脚本尝试重构,但不明白这个结果是怎么来的。不过你的问题激发了我的灵感,我深入研究后发现这部分脚本运行正常,只是在脚本的后面又被覆盖了。 @txnelson我用调试器找到了第三个覆盖点,谢谢你的建议!