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" はフィールドの各コードのレコードごとに繰り返され、各コードを固有のレコードに抽出します
END
GROUP
  v_department_count = OCCURS(Department_Code,',')
  v_counter = 0
  LOOP WHILE v_counter <= v_department_count
    v_dept = SPLIT(Department_Code, ',', (v_counter + 1))
    EXTRACT FIELDS Invoice_Number, Invoice_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 コマンドを使用すると、無限ループを防ぐことができます。