COBOLサンプルプログラム)コントロールブレイク

【BRKDV3】ブレイクキーが3つの場合

同じく重層度が増えるだけで、一定のルールに従ってさえいれば、何も考える箇所はありません。超簡単ですね。

Episode

研修中の新人とCOBOL経験10年の社員に、コントロールブレイクキーが3つの600行ほどのプログラムを作成させたところ、新人が三日で全員完成したのに、10年選手は一週間経っても完成しなかった、という逸話があります。新人はドライバのロジックが理解出来ないので、指定された所に必要な命令を入れただけなのにたいし、10年選手は、自分が判りやすい様にIF命令を入れて、ドライバの形が全く変わってしまっていました。つまり自分だけが解かり易いようにエンジンに手を加えた結果、エンジンごと壊してしまったわけです。皆さんも同じ過ちを冒さないよう気をつけましょうね。

*****  コントロールブレイクのドライバ  *****  [BRKDV3]     (20 F10)
      *  (ブレイクキー が3つの場合 [LING構造のドライバ]
      *  (  ) 内に命令等を記述する

       procedure    division.
      ********** [ 制御-module ] **********
           open input (入力f) output (出力f)
           perform 読込処理 thru 読込出口
      *    ***** [ファイル終了までの繰返し] *****
           perform until (入力キー) = high-value
               (大キーの保存 と 大キー累計域のクリア)
      *        ***** [大キーが変わるまでの繰り返し] *****
               perform until (大キー) not = (保存大キー)
                   (中キーの保存 と 中キー累計域のクリア)
      *            ***** [中キーが変わるまでの繰り返し] *****
                   perform until (中キー) not = (保存中キー)
                              or (大キー) not = (保存大キー)
                       (小キーの保存 と 小キー累計域のクリア)
      *                ***** [小キーが変わるまでの繰り返し] *****
                       perform until (小キー) not = (保存小キー)
                                  or (中キー) not = (保存中キー)
                                  or (大キー) not = (保存大キー)
      *                    **** [キーが同じ時の処理] *****
                           perform 同一処理 thru 同一出口
                           perform 読込処理 thru 読込出口
                       end-perform
      *                ***** [小キーが変わったとき] *****
                       perform 小計処理 thru 小計出口
                   end-perform
      *            ***** [中キーが変わったとき] *****
                   perform 中計処理 thru 中計出口
               end-perform
      *        ***** [大キーが変わったとき] *****
               perform 大計処理 thru 大計出口
           end-perform
      *    ***** [file-end の時] *****
           perform 総計処理 thru 総計出口
           close (入力f) (出力f)  stop run.

      ********** [ 機能-module ] **********
       同一処理. (キーが同じ時の処理).
       同一出口. exit.

       小計処理. (小計の処理).
       小計出口. exit.

       中計処理. (中計の処理).
       中計出口. exit.

       大計処理. (大計の処理).
       大計出口. exit.

       総計処理. (総計の処理).
       総計出口. exit.

       読込処理. read (入力f) end move high-value to (入力キー)
                          not end continue
                 end-read
       読込出口. exit.

<<Back   Index   Next >>  < Top >