在 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() 語句而顯示“評估正確”,這意味著 If 語句被正確評估,但 :Correct_Process 未被分配“正確”。
我假設這是因為我預設使用第一個巢狀的 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,則將針對每一行對它們進行評估。
我將使用 JSL 偵錯器並逐步執行程式碼來查找值何時發生變化。它將向您顯示程式碼邏輯沒有按照您希望的方式運行的地方。
如果您可以提供範例資料表,社群也許能夠更深入地探討該問題
回覆:在 For Each Row 循環中為單元格分配值,在同一個循環中已經為其分配了一個值不,我根據別人的劇本進行創作並嘗試重組,但卻不明白這個結果是如何產生的。您的問題激發了我的一個想法,我深入挖掘後發現腳本的這一部分正在按預期工作,只是後來在腳本中再次被覆蓋。 @txnelson我使用調試器來定位第三次覆蓋,所以感謝您的建議!