For each..next

for each..next控制语句是一个脚本迭代构造,可为逗号分隔列表中的每个值执行一个或几个语句。列表中的每个值均会执行由 fornext 限定的循环中的语句。

语法:  

特殊语法可以生成带有当前目录内文件和目录名称的列表。

for each var in list

[statements]

[exit for [ ( when | unless ) condition ]

[statements]

next [var]

参数:  

参数 说明
var 脚本变量名称,可为每次循环执行获取列表中的新值。如果 varnext 之后指定,变量名必须与对应的 for each 之后查找的变量名相同。

var变量的值可通过循环内的语句进行更改,但这并非出色的编程做法。

如果在循环内遇到 exit for子句,则脚本执行会转移至表示循环结束的next 子句之后的第一个语句。exit for子句可通过选择性使用 whenunless 后缀变为有条件子句。

备注: 由于 for each..next语句是控制语句,并以分号或换行符结束,三个可能子句(for eachexit fornext)中任意一个子句都不得跨越行边界。

语法:  

list := item { , item }

item := constant | (expression) | filelist (mask) | dirlist (mask) | fieldvaluelist (fieldname)

 

参数 说明
constant 任何数字或字符串。请注意,直接在脚本中写入的字符串必须附上单引号。没有单引号的字符串将被解释为变量,而变量的值之后将被使用。数字不必用单引号引起来。
expression 任意表达式。
mask

文件名称或文件夹名称掩码,包括任何有效的文件名称字符及标准通配符,比如 *?

condition 用于评估 TrueFalse 的逻辑表达式。
statements 一个或多个 QlikView脚本语句的任意组。
filelist mask

该语法会在匹配文件名称掩码的当前目录中生成逗号分隔的全部文件列表。

dirlist mask

该语法会在匹配文件夹名称掩码的当前文件夹中生成逗号分隔的全部文件夹列表。

fieldvaluelist mask 此语法迭代已经加载到 QlikView的字段值。

示例 1: 加载文件列表

// LOAD the files 1.csv, 3.csv, 7.csv and xyz.csv for each a in 1,3,7,'xyz' LOAD * from file$(a).csv; next

示例 2: 在磁盘上创建文件列表

此示例加载文件夹中所有 QlikView相关文件的列表。

sub DoDir (Root) for each Ext in 'qvw', 'qva', 'qvo', 'qvs', 'qvc', 'qvd' for each File in filelist (Root&'\*.' &Ext) LOAD '$(File)' as Name, FileSize( '$(File)' ) as Size, FileTime( '$(File)' ) as FileTime autogenerate 1; next File next Ext for each Dir in dirlist (Root&'\*' ) call DoDir (Dir) next Dir end sub call DoDir ('C:')

示例 3: 迭代字段值

此示例迭代已加载的 FIELD值列表,并生成新字段NEWFIELD。对每个 FIELD值,都会创建两条 NEWFIELD 记录。

load * inline [ FIELD one two three ]; FOR Each a in FieldValueList('FIELD') LOAD '$(a)' &'-'&RecNo() as NEWFIELD AutoGenerate 2; NEXT a

最终生成的表格如下所示:

NEWFIELD
one-1
one-2
two-1
two-2
three-1
three-2

另请参阅: