LOOP コマンド
指定された条件が真と評価されている間、一連の ACLScript コマンドをレコードで繰り返し実行します。
メモ
LOOP コマンドは GROUP コマンドで囲む必要があります。
構文
LOOP WHILE テスト
コマンド
<...n>
END
パラメーター
名前 | 説明 |
---|---|
WHILE テスト |
LOOP コマンド内のコマンドを実行するために、True と評価される必要があるテスト。そのテストが True と評価された場合、それが False と評価されるまで対象コマンドが繰り返し実行されます。 |
コマンド <...n> |
実行対象となる 1 つまたは複数のコマンド。 LOOP コマンド内には複数のコマンドを入力することができます。各コマンドは別々の行で入力する必要があります。 |
END | LOOP コマンドの終わり。 |
例
カンマ区切りのフィールドを分割する
請求データを含むテーブルがあり、請求金額の特定の情報を部署ごとに抽出する必要があるとします。1 つの請求書は複数の部署に関連付けることができ、部署コードがカンマ区切りでテーブルに保存されます。
請求金額を部署ごとに抽出するには
- GROUP コマンドを使用して、テーブルの各レコードを処理します。
- 各レコードに関連付けられた部署数(n)を計算します。
- LOOP コマンドを使用して、レコードに関連付けられた各部署のデータを抽出する操作を n 回繰り返します。
COMMENT
GROUP を使用すると、各部署コード フィールドのコメントをカウントし、レコードに関連付けられている部署数を特定します
LOOP でフィールドの各コードをレコードごとに「ループ」します。ループを繰り返すたびに、単一のコードのレコードが result1 テーブルに抽出されます
END
GROUP
v_department_count = OCCURS(Dept_Code,',')
v_counter = 0
LOOP WHILE v_counter <= v_department_count
v_dept = SPLIT(Dept_Code, ',', (v_counter + 1))
EXTRACT FIELDS Invoice_Number, Amount, v_dept AS "Department" TO result1
v_counter = v_counter + 1
END
END
備考
ヒント
LOOP コマンドおよび GROUP コマンドの詳細なチュートリアルについては、統制構造およびグループ化とループ処理を参照してください。
LOOP の用途
ループは、処理するデータのセグメントがレコード内に繰り返し含まれている場合に多く用いられます。
機能の仕組み
各 LOOP コマンドでは、テストする WHILE 条件を指定し、END ステートメントで閉じる必要があります。指定したテストが True と評価される間は、LOOP と END の間にあるコマンドが現在のレコードに対して繰り返し実行されます。
テストが False になると、その時点でコマンドは実行されなくなります。
無限ループを回避する
無限ループを回避するために、必ず最終的に False が返されるテストを指定してください。また、SET LOOP コマンドを使用すると、無限ループを防ぐことができます。