COBOLサンプルソース集)印刷制御

【LSTDV1】先読み手法による場合

先読みの場合には、カウントはWriteしたカウントではなく読込んだデータの件数を示します。1頁に明細を5行印刷する場合、5回WRITEして頁計を印刷するのは良いとして、次に1行スキップするのか、総計を印刷するのかは、次の頁に印刷すべきデータの有無を認識しない限り制御出来ません。

そのため読込んだ件数が6件目だったら[行スキップ][改頁][見出し]を行ってから明細の処理をします。カウンタの初期値は00ですが01は最初の一回だけで、後は 01〜06の間で変化します。カウンタが06ということは、既に次頁に印刷すべきデータを読んでいる状態なので、カウンタは01に戻します。こうすることで、明細・改頁・見出しといった機能の独立性が保たれます。?? の部分は指定された1頁の明細行の値で入れ替えます。

      *****  印 刷 制 御 ドライバ(1) [先読み]  *****  [LSTDV1]     (20 F10)
      *  [ 1頁に指定される明細行数によって ? 印の値を変更する ]
      *  (  ) 内に命令等を記述する

       procedure         division.
      **********  [ 制御-module ]  **********
           open input (入力f) output (出力f)
      *    ***** [1件の先読み] *****
           perform 読込処理 thru 読込出口
      *    ***** [ファイル終了までの繰返し] *****
           perform until (入力fステータス) not = "00"
               add 1 to cnt
      *        ***** [印刷処理の制御] *****
               evaluate cnt
                   when  01   perform 改頁処理 thru 改頁出口
                              perform 見出処理 thru 見出出口
                   when  06   perform 頁計処理 thru 頁計出口
      *                  ??
                              perform 行送処理 thru 行送出口
                              perform 改頁処理 thru 改頁出口
                              perform 見出処理 thru 見出出口
                              move 1 to cnt
                   when other continue
               end-evaluate
      *        ***** [1件の処理] *****
               perform 明細処理 thru 明細出口
      *        ***** [次の読込み] *****
               perform 読込処理 thru 読込出口
           end-perform
      *    ***** [ファイル終了後の処理] *****
           perform 行送処理 thru 行送出口 until cnt = 5
      *                                               ?
           perform 頁計処理 thru 頁計出口
           perform 総計処理 thru 総計出口
           perform 改頁処理 thru 改頁出口
           close (入力f) (出力f)  stop run.

      **********  [ 機能-module ]  **********
       改頁処理. (改頁処理に必要な機能)
       改頁出口. exit.

       見出処理. (見出処理に必要な機能)
       見出出口. exit.

       明細処理. (明細1件の処理に必要な機能)
       明細出口. exit.

       頁計処理. (頁計処理に必要な機能と累計域のクリア)
       頁計出口. exit.

       総計処理. (総計処理に必要な機能)
       総計出口. exit.

       行送処理. (行送りに必要な機能と cnt + 1)
       行送出口. exit.

       読込処理. read (入力f) end continue
                          not end continue
                 end-read.
       読込出口. exit.

<< Back   Index   Next >>    < Top >