控制结构

控制结构是脚本的一个基于给定的参数决定采取哪个方向的组件。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 创建的表。

要实现此目标,您需要创建一个主脚本以便:

  1. 执行 DIRECTORY 命令并将结果保存到一个表。
  2. 获取该表中的记录数以用作计数器。
  3. 对于该表中的每个记录都调用一次子脚本,以便针对当前记录执行 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 文件。