出現条件と脱出条件
(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を脱出して次のレコードの出現条件を調べます。
グループが適用されなかった場合は、グループ内のレコードの「未ヒット時の挙動」も適用されません。
グループ内に「条件」が"無条件"に設定されたレコードがある場合、必ず出現条件がヒットするため、常にグループが適用される点に注意してください。予想に反してグループが適用されることを避けるため、以下の点を考慮してください。
-
グループに適切な脱出条件を設定する。
-
グループ内のレコードでは、必要な場合のみ「条件」を"無条件"に設定する。