IBM Books

管理与程序设计指南,OS/400 版

条件逻辑:IF 块

将 IF 块用于 Net.Data 宏中的条件处理。在大多数高级语言中 IF 块类似于 IF 语句,因 为 IF 块提供测试一个或多个条件的能力,然后基于条件测试的结果执行一个语句块。

您可以在宏中的几乎任何地方指定 IF 块并可以嵌套它们。 Net.Data 参考中的语言结构章中显示了 IF 块的语法。

IF 块的规则:IF 块的语法规则是由该块在宏中的位置确定的。IF 块中语句的可执行块允许的元 素取决于 IF 块自身的位置。

IF 块字符串比较

Net.Data 根据组成条件的项目的内容,用两种方式中的一种来处理 IF 块条 件列表。缺省操作是将所有项目作为字符串对待,并如条件中所指定的那样执行字符串比较。当然, 如果比较是在两个代表整数的字符串之间进行的,那么这个比较也是数字的。如果字符串中仅包含数字, 则 Net.Data 假定它是数字的,任选地前导以一个 '+' 或 '-' 字符。 字符串不能包含任何非数字字符,'+' 或 '-' 除外。 Net.Data 不支持非整数的数值比较。

有效整数字符串的例子:
+1234567890
-47
000812
92000

无效整数字符串的例子:
-  20     (包含空格字符)
234,000   (包含一个逗号)
57.987    (包含一个十进制小数点)
 

Net.Data 在执行 IF 块的时侯求解 IF 条件,此时间可能与 Net.Data 初始读块的时间不同。例如, 如果您在 REPORT 块中指定一个 IF 块,Net.Data 在读取包含 REPORT 块的 FUNCTION 块定义 时不估计与 IF 块相关联的条件列表,而是在调用和执行它时进行。 对于 IF 块的条件列表部分和 要执行的语句块,都是这样的。

IF 块的示例: 一个在其它块中包含 IF 块的宏

%{ This macro is called from another macro, passing the operating system
   and version variables in the form data.
%}
 
%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)
  %}
%}


[ 页的顶部 | 上一页 | 下一页 | 目录 | 索引 ]