若希望登录底稿仅在某些条件下才执行操作,则使用 IF...THEN 命令。
命令格式
IF 条件 [AND|OR [条件]] THEN
命令
[ELSE
命令]
[END]
用标识符变量来替代条件。有关标识符变量的更多信息,参见“使用变量”。
用当指定条件为真时要执行的登录底稿命令来替代命令。
使用 IF...THEN
以下是条件语句的一个示例
IF MEMBER OF "CLERKS"
该语句中,若登录的用户属于名为 CLERKS 组对象,则会执行某些操作。
以下是另一种类型的条件语句:
IF DAY_OF_WEEK="MONDAY"
该语句中,等号 (=) 表明了变量 (DAY_OF_WEEK) 与其值 (Monday) 之间的关系。需注意变量值 (Monday) 应放在引号中。
在使用 IF...THEN 语句时,需明确下列语法规则:
使用 AND 或 OR 以在 IF...THEN 语句中使用两个或更多的条件。
条件语句的值必须放在引号中。
比较条件语句值的前提是这些值为字符,而不是数字值。因此,在比较 21 和 100 这两个字符时,会认为 21 的值比 100 的值大。要确保系统正确计算数值而非字符值时,需在 IF...THEN 语句中使用 VALUE 修饰符。
ELSE 语句是可选的。
IF、ELSE 和 END 都必须独立成行。THEN 则不必独立成行。
若将 WRITE 命令作为 IF...THEN 命令的一部分,则 WRITE 命令必须独立成行。
IF...THEN 语句可以嵌套(最多可达 10 级)。但是,不得在嵌套的 IF...THEN 语句中使用 GOTO 命令以进入或退出一个 IF...THEN 语句体。
若 IF...THEN 语句仅由一行命令组成,那么,即使该行会发生换行也不必使用 END 命令。若 IF...THEN 语句必须有多行命令(例如,使用了 ELSE 或 WRITE 这些必须独立成行的命令),则必须使用 END。
IF...THEN 语句的各要素间有六种可能的关系。用下列符号代表这些关系:
= (等于)
<> (不等于)
> (大于)
>(大于等于)
< (小于)
<(小于等于)
示例
若登录底稿中含有如下命令,那么,用户在星期一登录时会显示“Status report is due today”的讯息,而在其它天登录时则会显示“Have a nice day!”:
IF DAY_OF_WEEK="MONDAY" THEN
WRITE "Status report is due today."
ELSE
WRITE "Have a nice day!"
END
以下命令表示“若小时(用 24 进制表示)大于等于 12,则显示afternoon”:
IF VALUE HOUR24>="12" THEN
WRITE "afternoon"
END
使用以下命令会在每星期的第四天(星期三)执行 CAPTURE 实用程序:
IF NDAY_OF_WEEK="4" THEN
#CAPTURE Q=FAST_Q NB TI=10 NFF
END
以下给出嵌套 IF...THEN 语句的示例。留意这里有两个 IF 语句,因而每一个 IF 语句都要有它自己的 END 语句:
IF DAY_OF_WEEK="MONDAY" THEN
MAP *6:=VOL1:APPL\WP
IF MEMBER OF CLERKS THEN
WRITE "Your report is due immediately!"
END
可用逗号、AND 或 OR 来连接多个条件以形成复合条件。
以下 IF...THEN 语句的第一行就是一个复合条件,意为“如果是每月第一天的傍晚”:
"EVENING" AND DAY="01" THEN
WRITE "WRITE "The system will be backed up tonight."
END
以下是意为“如果是晚上 11:59:59”的复合条件:
IF HOUR24="23" AND MINUTE="59" AND SECOND="59"
一个 IF...THEN 语句中可以包含几个当条件为真时就必须执行的命令。
以下示例中显示了必须在星期二执行的两个命令:WRITE 命令显示有关员工会议的讯息,而 INCLUDE 命令会令登录底稿处理任何包含在 sys:public\update 文件中的命令或讯息。
IF DAY_OF_WEEK="TUESDAY" THEN
WRITE "WRITE "Staff meeting today at 10 a.m."
INCLUDE SYS:PUBLIC\UPDATE
END