# 出現条件と脱出条件

(1) グループを含まない場合

入力階層フォーマット情報のグループを含まない部分を処理する場合、入力レコードに対して順番に出現条件がヒットするかどうか調べていきます。例を使って説明します。

図4.8 出現条件

1) 入力レコード1が、入力階層フォーマット情報のレコードAの出現条件にヒットするかどうか調べます。

この例では出現キーが一致しませんが、レコードAの「未ヒット時の挙動」が"デフォルト値を使用"に設定されているためエラーとはならず、2) へ進みます。

2) 入力レコード1が、入力階層フォーマット情報のレコードBの出現条件にヒットするかどうか調べます。

キーが一致するので、入力レコード1に対してレコードBのフォーマット情報を適用します。

3) 入力レコード2が、入力ファイルフォーマット情報のレコードCの出現条件にヒットするかどうか調べます。

キーが一致せず、レコードCの「未ヒット時の挙動」が"エラー"に設定されているため、エラーとなります。

(2) グループを含む場合

入力階層フォーマット情報のグループを含む部分を処理する場合、まずグループを適用するかどうかを判断します。入力レコードがグループ内のいずれかのレコードの出現条件にヒットすれば、グループを適用します。例を使って説明します。

図4.9 出現条件と脱出条件

1) 入力レコードNが、GROUP1の脱出条件にヒットするかどうか調べます。

この例では脱出キーが一致しないので、グループを脱出せず、2) へ進みます。

2) GROUP1を適用するかどうか判断します。

入力レコードNのキー値が、グループ内のレコードの出現条件のどれか1つにマッチしたら、グループを適用します。

- 2)-1

  入力レコードNが、GROUP1内のレコードGRP_Aの出現条件にヒットするかどうか調べます。

  キー値が一致しないので、2)-2へ進みます。

- 2)-2

  入力レコードNが、GROUP1内のレコードGRP_Bの出現条件にヒットするかどうか調べます。

  キーが一致するので、入力レコードにGROUP1を適用することを決定します。

  GROUP1を適用することが決まったら、改めてGROUP1の先頭から入力レコードが出現条件にヒットするかどうか調べていきます。「未ヒット時の挙動」も、ここで初めて考慮されます。

  このときの動作は「（1）グループを含まない場合」と同様です。

3) もしGROUP1内のすべてのレコードの出現条件にヒットしなかった場合は、GROUP1を脱出して次のレコードの出現条件を調べます。

= 備考 =

グループが適用されなかった場合は、グループ内のレコードの「未ヒット時の挙動」も適用されません。

注意

グループ内に「条件」が"無条件"に設定されたレコードがある場合、必ず出現条件がヒットするため、常にグループが適用される点に注意してください。予想に反してグループが適用されることを避けるため、以下の点を考慮してください。

- グループに適切な脱出条件を設定する。

- グループ内のレコードでは、必要な場合のみ「条件」を"無条件"に設定する。