For each..next

for each..next 控制陳述式是指令碼反覆運算建構,這會對於逗號分隔清單中的各個值執行一或數個陳述式。將會為清單的各個值,執行由 fornext 括住之迴圈內的陳述式。

Syntax:  

特殊語法能夠以目前目錄中的檔案和目錄名稱產生清單。

for each var in list

[statements]

[exit for [ ( when | unless ) condition ]

[statements]

next [var]

Arguments:  

引數 描述
var 為各個迴圈執行從清單取得新值的指令碼變數名稱。如果在 next 之後指定 var,它的變數名稱必須與對應的 for each 之後出現的變數名稱相同。

迴圈內的陳述式可變更 var 變數的值,不過在程式設計上這不見得是好方法。

如果 exit for 子句出現在迴圈中,指令碼的執行將傳輸到 next 子句後的第一個陳述式,代表迴圈結束。選用 whenunless 後置詞,即可將 exit for 子句設定為條件子句。

備註: 由於 for each..next 陳述式是控制陳述式,因而會以分號或行結尾來結束,所以這三個可能的子句 (for eachexit for、與 next) 都不能超過行邊界。

Syntax:  

list := item { , item }

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

 

引數 描述
constant 任何數字或字串。請注意,直接在指令碼中寫入的字串必須以單引號括住。沒有單引號的字串將被解譯為變數,因而將使用變數的值。數字不需要以單引號括住。
expression 任意運算式。
mask

檔案名稱或目錄名稱遮罩,其中可能包含任何有效的檔案名稱字元,以及標準的萬用字元 *?

您可以使用絕對檔案路徑或 lib:// 路徑。

condition 評估為 TrueFalse 的邏輯運算式。
statements 是一或多個 Qlik Sense 指令碼陳述式的任何群組。
filelist mask

此語法會對於符合檔案名稱遮罩的目前目錄中所有的檔案產生逗號分隔清單。

備註: 此引數僅在標準模式下支援物件庫連線。請參閱檔案系統存取限制
dirlist mask

此語法會對於符合資料夾名稱遮罩的目前資料夾中所有的資料夾產生逗號分隔清單。

備註: 此引數僅在標準模式下支援物件庫連線。請參閱檔案系統存取限制
fieldvaluelist mask 此語法透過已載入至 Qlik Sense 的欄位值反覆運算。

Example 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

Example 2: 在磁碟上建立檔案清單

此範例會載入資料夾中所有 Qlik Sense 相關檔案的清單。

sub DoDir (Root) for each Ext in 'qvw', 'qva', 'qvo', 'qvs', 'qvc', 'qvf', '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 ('lib://MyData')

Example 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