使用 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 将执行数值比较:
有效字符串的例子:
+1234567890 -47 000812 92000
无效字符串的例子:
- 20 (包含空格字符) 234,000 (包含一个逗号) 57.987 (包含一个十进制小数点)
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) %} %}