LOOP コマンド

指定された条件が真と評価されている間、一連の ACLScript コマンドをレコードで繰り返し実行します。

メモ

LOOP コマンドは GROUP コマンドで囲む必要があります。

構文

LOOP WHILE テスト
  コマンド
  <...n>
END

パラメーター

名前 説明
WHILE テスト

LOOP コマンド内のコマンドを実行するために、True と評価される必要があるテスト。そのテストが True と評価された場合、それが False と評価されるまで対象コマンドが繰り返し実行されます。

コマンド <...n>

実行対象となる 1 つまたは複数のコマンド。

LOOP コマンド内には複数のコマンドを入力することができます。各コマンドは別々の行で入力する必要があります。

END LOOP コマンドの終わり。

カンマ区切りのフィールドを分割する

請求データを含むテーブルがあり、請求金額の特定の情報を部署ごとに抽出する必要があるとします。1 つの請求書は複数の部署に関連付けることができ、部署コードがカンマ区切りでテーブルに保存されます。

請求金額を部署ごとに抽出するには

  1. GROUP コマンドを使用して、テーブルの各レコードを処理します。
  2. 各レコードに関連付けられた部署数(n)を計算します。
  3. 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 コマンドを使用すると、無限ループを防ぐことができます。