同じく重層度が増えるだけで、一定のルールに従ってさえいれば、何も考える箇所はありません。超簡単ですね。
研修中の新人と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.