For each..next

for each..next 制御ステートメントは、コンマ区切りリストの各値に対して、1 つまたは複数のステートメントを実行するスクリプト反復構文です。fornext で囲まれたループ内のステートメントは、リストの各値で指定された回数分実行されます。

Syntax:  

現在のディレクトリ内のファイルとディレクトリ名のリストの生成を可能にする特殊構文です。

for each var in list

[statements]

[exit for [ ( when | unless ) condition ]

[statements]

next [var]

Arguments:  

引数 説明
var ループ実行のたびに、リストから新しい値を取得するスクリプト変数名。varnext の後に指定されている場合は、対応する for each の後に検出されるものと同じ変数名である必要があります。

var 変数の値は、ループ内のステートメントで変更できますが、これは良いプログラミングとは言えません。

exit for 節がループ内で出現した場合、スクリプトの実行はループの終了を示す next 節の後の最初のステートメントに移ります。exit for 節は、whenunless サフィックスを使用して条件を付けることができます。

注: for each..next ステートメントは制御ステートメントであり、セミコロンまたは改行コードで終わっているため、使用可能な 3 つの節 (for eachexit fornext) が行をまたぐことはできません。

Syntax:  

list := item { , item }

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

 

引数 説明
constant 任意の数値または文字列。スクリプトに直接書き込まれた文字列は単一引用符で囲む必要があります。単一引用符で囲まれていない文字列は、変数として解釈され、変数の値が使用されます。数字は単一引用符で囲む必要はありません。
expression 任意の式。
mask

有効なファイル名の文字や、標準的なワイルドカード文字 *? を含むファイル名またはディレクトリ名のマスク。

絶対ファイル パスや lib:// パスを使用できます。

condition True または False の評価を実施する論理式。
statements 1 つ以上の 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 の 1 つの値につき、2 つの 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