UPDDV1と比べ少々煩雑な感じもしますが、条件による統合がなく、それぞれが完全に独立したルートを確定するので、この方が良いかも知れないですね。またコチラはデータの重複もカバーしています。
***** 順編成ファイル更新 ドライバパターン - 2 ***** [UPDDV2] (15 F10) * [訂正種別を優先判定] * * [ データ のキーが昇順で 重複がある場合も OK ] * ( ) 内に命令を記述する procedure division. ********** [ 制御-MODULE ] ********** open input (f1) (f2) output (f3) perform f1-rtn thru f1-ext perform f2-rtn thru f2-ext perform until (f1キー = high-value ) and (f2キー = high-value ) evaluate (訂正種別) when "A" evaluate true when (f1キー < f2キー) perform 複写処理 thru 複写出口 perform f1-rtn thru f1-ext when (f1キー = f2キー) perform err-処理 thru err-出口 perform f2-rtn thru f2-ext when (f1キー > f2キー) perform 追加処理 thru 追加出口 perform f2-rtn thru f2-ext end-evaluate when "M" evaluate true when (f1キー < f2キー) perform 複写処理 thru 複写出口 perform f1-rtn thru f1-ext when (f1キー = f2キー) perform 修正処理 thru 修正出口 perform f2-rtn thru f2-ext when (f1キー > f2キー) perform err-処理 thru err-出口 perform f2-rtn thru f2-ext end-evaluate when "D" evaluate true when (f1キー < f2キー) perform 複写処理 thru 複写出口 perform f1-rtn thru f1-ext when (f1キー = f2キー) perform 削除処理 thru 削除出口 perform f1-rtn thru f1-ext perform f2-rtn thru f2-ext when (f1キー > f2キー) perform err-処理 thru err-出口 perform f2-rtn thru f2-ext end-evaluate when high-value perform 複写処理 thru 複写出口 perform f1-rtn thru f1-ext when other perform err-処理 thru err-出口 perform f2-rtn thru f2-ext end-evaluate end-perform close (f1) (f2) (f3) stop run. ********** [ 機能-MODULE ] ********** 複写処理. (f1 を f3 に書き出す). 複写出口. exit. 修正処理. (CHECK OK なら 修正する部分を置き換えるだけ). 修正出口. exit. 削除処理. (何もしない). 削除出口. exit. 追加処理. (CHECK OK なら f2 を f3 に書き出す). 追加出口. exit. err-処理. (error の処理). err-出口. exit. ********** [ 読込-MODULE ] ********** f1-rtn. read (f1) end move high-value to (f1キー) not end continue end-read. f1-ext. exit. f2-rtn. read (f2) end move high-value to (f2キー) not end continue end-read. f2-ext. exit.