控制结构
控制结构是脚本的一个基于给定的参数决定采取哪个方向的组件。ACLScript 同时提供了条件性 IF 逻辑和循环结构。
使用 IF 的条件性逻辑
ACLScript 将条件性逻辑实现为一个 IF 命令和该语言中许多命令上的可选参数:
- 命令控制命令是否运行
- 参数决定针对表中的哪些记录执行该命令
IF 命令
使用 IF 命令时,您指定一个条件表达式,后面跟当该表达式求值结果为真时要执行的命令:
IF v_counter > 10 CLASSIFY ON 客户编号
此条件结构控制哪些代码执行,因此当您想要基于测试表达式处理整个表时,可以使用 IF 命令。如果该表达式计算结果为真,则针对表中的所有记录运行该命令。有关 IF 命令的详细信息,请参见IF 命令。
IF 参数
许多命令接受一个可选的 IF 参数,您可以使用它来过滤要针对其执行该命令的记录:
CLASSIFY ON 客户编号 IF 州 = 'NY'
当此语句执行时,脚本对表中的所有其州域的值为 'NY' 的记录进行分类。
循环
LOOP 命令
LOOP 命令提供了 ACLScript 中的循环控制结构。
说明
LOOP 命令必须在 GROUP 命令内执行,而不能独立存在。
只要指定的 WHILE 表达式为 true,下述示例中的 LOOP 命令就会处理循环内部的语句:
ASSIGN v_counter = 10
GROUP
LOOP WHILE v_counter > 0
v_total = v_total + amount
v_counter = v_counter - 1
END
END
此结构迭代 10 次,并且将amount域的值添加到变量 v_total。在每个迭代的末尾,都会将 v_counter 变量递减 1,然后在 WHILE 表达式中测试它。一旦表达式求值为假,该循环完成,脚本继续执行。
该循环完成后,v_total 会保存 10 条记录的amount域值的总和。
有关循环的详细信息,请参见LOOP 命令。
使用子脚本循环
有时,LOOP 命令不能恰好提供您可能需要的循环功能。在此情况下,您还可以使用 DO SCRIPT 命令调用一个单独的 Analytics 脚本来执行循环:DO SCRIPT 脚本名称 WHILE 条件测试。
您可以使用下列常见方法之一来控制您的循环何时结束:
- 标志 循环将一直执行到逻辑标志变量被设置为 FALSE 为止
- 计数器 循环将一直执行到递增或递减变量越过条件阈值为止。
有关调用子脚本的详细信息,请参见DO SCRIPT 命令。
示例
您需要将 C:\data 文件夹中的所有 CSV 文件导入到您的项目中。您可以使用 DIRECTORY 命令获取该文件夹中文件的列表,但是您不能使用 GROUP 结构内的 IMPORT 命令。您需要使用一种替代方式来遍历 DIRECTORY 创建的表。
要实现此目标,您需要创建一个主脚本以便:
- 执行 DIRECTORY 命令并将结果保存到一个表。
- 获取该表中的记录数以用作计数器。
- 对于该表中的每个记录都调用一次子脚本,以便针对当前记录执行 IMPORT 命令。
主脚本
COMMENT 主脚本
DIRECTORY "C:\data\*.csv" TO T_Table_To_Loop
OPEN T_Table_To_Loop
COUNT
v_Num_Records = COUNT1
v_Counter = 1
DO SCRIPT Import_Subscript WHILE v_Counter <= v_Num_Records
导入子脚本
COMMENT Import_Subscript
OPEN T_Table_To_Loop
LOCATE RECORD v_Counter
COMMENT 此处为将 CSV 文件导入记录的代码...
ASSIGN v_Counter = v_Counter + 1
变量在该项目中运行的所有脚本之间共享,因此主脚本将一直调用子脚本,直到 v_Counter 的值超过 v_Num_Records 的值为止。子脚本每次执行时都会递增 v_Counter。
此结构使您可以在遍历表的过程中针对每个记录调用 IMPORT 命令。当主脚本完成后,您已经从 C:\data 文件夹导入了所有 CSV 文件。