COBOLサンプルソース集)マージ

【MRGDV3】3本のファイルのマージ

これも3本のマッチング(MATDV3)と殆ど同じですが、相互のキーの条件によって、基本となるファイルの最後のキー値を認識しておく必要があるので『読込』Moduleの中で読み飛ばしの制御をしています。この部分を『制御Module』の中に含めるべきかどうかは議論がわかれるかもしれません。

      ***** (併合処理ドライバパターン) *****    [MRGDV3]     (20 F9)

      * [ 3本のファイルの併合  file-end は high-value で制御 ] *
      * [ f1=f2 は f2をerrに  f1=f3 は f3をerrに  f2=f3 は f3をerrにする ]
      * [ データファイル f2 f3 とも キーの重複・分散がある場合も可 ]
      *  (  ) 内に命令等を記述する

       procedure    division.
      **********  [ 制御-MODULE ]  **********
           open input (f1) (f2) (f3) output (f4)
           perform f1-rtn thru f1-ext
           perform f2-rtn thru f2-ext
           perform f3-rtn thru f3-ext
           perform until (f1キー = high-value) and
                          (f2キー = high-value) and
                           (f3キー = high-value)
               evaluate true
      *            **** [f1 が一番小さい場合] *****
                   when (f1キー < f2キー) and (f1キー < f3キー)
                                          perform 処理f1 thru 出口f1
                                          perform f1-rtn thru f1-ext
      *            **** [f2 が一番小さい場合] *****
                   when (f2キー < f1キー) and (f2キー < f3キー)
                                          perform 処理f2 thru 出口f2
                                          perform f2-rtn thru f2-ext
      *            **** [f3 が一番小さい場合] *****
                   when (f3キー < f1キー) and (f3キー < f2キー)
                                          perform 処理f3 thru 出口f3
                                          perform f3-rtn thru f3-ext
      *            **** [f1 = f2 の場合] *****
                   when (f1キー = f2キー)     perform f2-err thru f2-ext
                                          perform f2-rtn thru f2-ext
      *            **** [f1 = f3 の場合] *****
                   when (f1キー = f3キー)     perform f3-err thru f3-ext
                                          perform f3-rtn thru f3-ext
      *            **** [f2 = f3 の場合] *****
                   when (f2キー = f3キー)     perform f3-err thru f3-ext
                                          perform f3-rtn thru f3-ext
               end-evaluate
           end-perform
           close (f1) (f2) (f3) (f4)  stop run.

      **********  [ 機能-MODULE ]  **********
       処理f1. (f1 を書き出す).
       出口f1. exit.

       処理f2. (f2 を書き出す  f2キー を h0キー に保存する).
       出口f2. exit.

       処理f3. (f3 を書き出す  f3キー を h0キー に保存する).
       出口f3. exit.

       f2-err. (f2 を error にする).
       f2-ext. exit.

       f3-err. (f3 を error にする).
       f3-ext. 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 if (f2キー) = (h0キー)
                then perform f2-err thru f2-ext
                                else continue
                             end-if
               end-read.
       f2-ext. exit.
       
       f3-rtn. read (f3) end move high-value to (f3キー)
                     not end if (f3キー) = (h0キー)
                then perform f3-err thru f3-ext
                                else continue
                             end-if
               end-read.
       f3-ext. exit.

<< Back   Index   Next >>    < Top >