IBM Books

Net.Data 管理与程序设计指南,OS/2、Windows NT 以及 UNIX 版

条件逻辑

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

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

IF 块的语法规则是由块在宏文件中的位置确定的。IF 块中语句的可执行块允许的元 素取决于 IF 块自身的位置。包含 IF 块的块中的任何有效元素在该 IF 块中也有效。例如,如果 您在一个 HTML 块中指定了一个 IF 块,则 HTML 块中允许的任何元素在 IF 块中也是允许的,例 如 INCLUDE 语句和 WHILE 块。

  %HTML 块
... 
  %IF block
...   
    %INCLUDE
...
    %WHILE
 

类似地,如果您在 Net.Data 宏声明部分中的任何其它块之外指定 IF 块,则在 IF 语句中只允 许那些在任何其它块之外也被允许的元素(例如 DEFINE 块或 FUNCTION 块)。

%IF 
...
  %DEFINE
...
  %FUNCTION
 

如果 IF 块嵌套在一个 IF 块内,而后者在声明部分中任何其它块的外部,则它可以使用外部块 可以使用的任何元素。 如果 IF 块嵌套在另一个嵌套在某个 IF 块的块中,则它遵循它所处的那个模 块的语法规则。

在下面的例子中,嵌套的 IF 块必须遵循在它处于一个 HTML 块中时使用的规则。

%IF 
...
  %HTML block
...
     %IF block

例外:当 IF 块在 REPORT 块中时,不要在 IF 块中指定 ROW 块。

Net.Data 根据组成条件的项目的内容,用两种方式中的一种来处理 IF 块条 件列表。缺省操作是将所有项目作为字符串对待,并如条件中所指定的那样执行字符串比较。但是 ,如果符合以下两个条件,Net.Data 将执行数值比较:

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

限制: Net.Data 不支持非整型数的数值比较。

例子:此例显示一个宏文件,其中包含其它块中的 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)
  %}
%}


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