管理及程式設計指南

條件性邏輯:IF 區塊

在 Net.Data 巨集中,請使用 IF 區塊來執行條件式處理。 該 IF 區塊類似於大部份高階語言中的 IF 陳述式,因其提供測試一個或數個條件, 然後基於條件測試的結果,來執行陳述式區塊的能力。

您幾乎可於巨集中的任意處設定 IF 區塊,且可以使用巢狀。 有關 IF 區塊的語法,請參閱 Net.Data 參考手冊中有關語言結構的章節。

IF 區塊規則:IF 區塊語法的規則,是由區塊在巨集中的位置所決定。IF 區塊的可執行區塊陳述式中,容許的元素是基於 IF 區塊本身的位置而定。

IF 區塊字串比較

Net.Data 基於構成條件的函數項內容所產生的方式之一,來處理 IF 區塊條件列示。 預設動作是將所有函數項視為字串,並依條件所示執行字串比較。 不過,如果在兩個代表整數的字串之間作比較,這是一種數值比較。如果字串僅含有數字,且選用性在前面有 '+' 或 '-' 字元, 則 Net.Data 將假設它為數字。 字串不能包含 '+' 或 '-' 以外的任何非數字字元。 Net.Data 不支援非整數數字的數值比較。

有效整數字串的範例:
+1234567890
-47
000812
92000

無效整數字串的範例:
-  20     (包含空白字元)
234,000   (包含逗號)
57.987    (包含小數點)

Net.Data 於執行 IF 條件時會評估該區塊,這個時間可不同於 Net.Data 原來讀取它的時間。例如,若您在 REPORT 區塊中設定 IF 區塊,則 Net.Data 在讀取含有 REPORT 區塊的 FUNCTION 區塊定義時, 不會評估與 IF 區塊相關的條件列示,而是在呼叫並執行函數時才評估。 這在 IF 區塊的條件列示部份和要執行的區塊陳述式兩者皆是如此。

IF 區塊範例:在其它區塊內含有 IF 區塊的巨集

%{ 此巨集是從另一個巨集被呼叫,在此套表資料中
   傳送作業系統及版本變數。
%}
 
%IF (platform == "AS400")
  %IF (version == "V3R2")
     %INCLUDE "as400v3r2_def.hti"
  %ELIF (version == "V3R7")
     %INCLUDE "as400v3r7_def.hti"
  %ELIF (version == "V4R1")
     %INCLUDE "as400v4r1_def.hti"
%ENDIF
%ELSE
     %INCLUDE "default_def.hti"
%ENDIF 
%MACRO_FUNCTION numericCompare(IN term1, term2, OUT result) {
%IF (term1 < term2)
  @dtw_assign(result, "-1")
%ELIF (term1 > term2)
  @dtw_assign(result, "1")
%ELSE
  @dtw_assign(result, "0")
%ENDIF
%}
  
%HTML(report){
  %WHILE (a < "10") {
    outer while loop #$(a)<br />
    %IF (@dtw_rdivrem(a,"2") == "0")
      this is an even number loop<br />
%ENDIF
    @DTW_ADD(a, "1", a)
  %}
%}


[ 頁面頂端 | 前一頁 | 下一頁 | 目錄 | 索引 ]