画面・帳票サポートシステム XMAP3 プログラミングガイド 帳票編

[目次][用語][索引][前へ][次へ]

9.3.10 COBOLでのCSVファイルを利用した書式印刷例(CSVファイル印刷例題

Excelなどから入力したデータを基にして,該当するCSVファイルのデータを印刷します。このとき,APで設定した条件とCSVファイルのデータをマッチングさせ,ある条件に該当するデータに対し拡大印刷したり,「*」を付けて印刷したりできます。ここでは,1科目でも100点があるか,または前回より20番以上順位が上がった人のデータに対して「*」を付けて印刷する例を示します。

(a) 出力例

図9-14 CSVファイルから出力される帳票の出力例

[図データ]

書式オーバレイのサイズの目安は約2KBです。
(b) 処理の流れ

処理の概要を示します。

[図データ]

(c) コーディング

CSVファイルを利用した書式オーバレイのコーディングパターンの例を次に示します。プログラムサイズは約44KBです。

 
000100************************************************************
000200* <書式CSVファイル入力>                                     *
000300************************************************************
000400************************************************************
000500* 指定環境  環境変数    CBLX_PRT001=#PRT                         *
000600*                         CBL_SYSCSVIN=csvファイル名(CSVPRFC.CSV)  *
000700* コンパイルオプション  -XMAP,LinePrintまたは-Ks               *
000800* 書式イメージ          CSV1FC6G.FMP                             *
000900* 行制御データ          CSV1FC6G.PCI                             *
001000************************************************************
001100 IDENTIFICATION      DIVISION. 
001200 PROGRAM-ID.         CSVPRFC.
001300* 
001400 ENVIRONMENT         DIVISION. 
001500*  
001600 INPUT-OUTPUT        SECTION.
001700 FILE-CONTROL.  
001800   SELECT  プリンタ  ASSIGN  TO  PRT001
001900           ORGANIZATION IS SEQUENTIAL
002000           FILE  STATUS  IS  プリンタ状態.
002100*  
002200************************************************************
002300*       書式印刷の定義                                               *
002400************************************************************
002500 I-O-CONTROL.
002600   APPLY  FORMS-OVERLAY  TO  書式名  ON  プリンタ.
002700*  
002800************************************************************
002900*       CSVファイルの呼び名の定義                                 *
003000************************************************************
003100 CONFIGURATION       SECTION. 
003200 SPECIAL-NAMES.  
003300     SYSCSV  IS  CSVIN. 
003400* 
003500 DATA  DIVISION.
003600 FILE  SECTION. 
003700************************************************************
003800*       プリンタの定義                                               *
003900************************************************************
004000   FD  プリンタ  IS  GLOBAL 
004100       RECORDING  MODE  IS  F
004200       LABEL  RECORD  IS  OMITTED
004300       DATA  RECORD  IS  行データ.
004400************************************************************
004500*       一行分のデータエリア                                         *
004600************************************************************
004700   01  行データ                PIC  X(70). 
004800* 
004900 WORKING-STORAGE    SECTION. 
005000* 
005100   01  書式名                    PIC  X(8). 
005200*  
005300 01  模試回数ヘッダ行. 
005400   02  FILLER                  PIC  X(15). 
005500   02  ヘッダ模試回数          PIC  Z9 
005600                          CHARACTER  TYPE  IS  POINT-12 WIDE. 
005700   02  FILLER                  PIC  X(51). 
005800*    
005900 01   明細行-1                 REDEFINES  明細行. 
006000   02   FILLER                 PIC  X(1). 
006100   02   明細行-順位1           PIC  ZZZZZZ9. 
006200   02   明細行-氏名1           PIC  X(16).
006300   02   FILLER                 PIC  X(4).
006400   02   明細行-英語点数1       PIC  ZZ9 
006500                               CHARACTER  TYPE  IS  FORMAT-2.
006600   02   FILLER                 PIC  X(3). 
006700   02   明細行-数学点数1       PIC  ZZ9  
006800                               CHARACTER  TYPE  IS  FORMAT-2.
006900         :
007000************************************************************
007100*       プログラムの開始                                             *
007200************************************************************
007300 PROCEDURE          DIVISION.
007400*  
007500*    プリンタのオープン
007600     OPEN  OUTPUT  プリンタ
007700     IF  プリンタ状態  =  正常
007800       THEN
007900*        書式マップ名の設定
008000         MOVE  'CSV1FC6G'  TO  書式名  
008100            :
008200*       1ページ分の印刷処理
008300         PERFORM  1ページ印刷  UNTIL  印刷終了 = 1
008400*  
008500*       プリンタのクローズ 
008600         CLOSE  プリンタ
008700         IF  プリンタ状態  NOT  =  正常 
008800           THEN 
008900             MOVE  異常  TO  プログラム状態
009000         END-IF 
009100*  
009200       ELSE 
009300         MOVE  異常  TO  プログラム状態 
009400     END-IF. 
009500************************************************************
009600*       プログラムの終了                                             *
009700************************************************************
009800     IF  プログラム状態  =  正常 
009900       THEN 
010000         MOVE  正常終了  TO  RETURN-CODE
010100       ELSE 
010200         MOVE  異常終了  TO  RETURN-CODE
010300     END-IF 
010400*   
010500     STOP  RUN.  
010600***********************************************************
010700*       一ページ印刷                                                * 
010800***********************************************************
010900 1ページ印刷  SECTION.  
011000*  
011100     PERFORM  ヘッダ印刷
011200* 
011300     IF  プログラム状態  =  正常 
011400       THEN
011500         PERFORM  明細印刷 
011600     END-IF 
011700* 
011800     IF  プログラム状態  =  正常 
011900       THEN 
012000         PERFORM  トレイラ印刷 
012100     END-IF. 
012200 1ページ印刷-END. 
012300     EXIT. 
012400************************************************************
012500*       ヘッダ印刷処理                                               *
012600************************************************************
012700 ヘッダ印刷  SECTION.   
012800        :
012900 ヘッダ印刷-END. 
013000     EXIT.  
013100************************************************************
013200*       明細印刷処理                                                 *
013300************************************************************
013400 明細印刷  SECTION.   
013500          :  
013600       PERFORM  明細行組み立て 
013700          :
013800       PERFORM  明細行出力 
013900          :  
014000 明細印刷-END.
014100     EXIT.  
014200************************************************************
014300*       トレイラ印刷処理                                             *
014400************************************************************
014500 トレイラ印刷  SECTION. 
014600        : 
014700 トレイラ印刷-END. 
014800     EXIT. 
014900************************************************************
015000*       行出力処理                                                   *
015100************************************************************
015200 行出力  SECTION. 
015300     IF  改行数  =  999 
015400       THEN 
015500         WRITE  行データ  BEFORE  ADVANCING   PAGE 
015600       ELSE 
015700         WRITE  行データ  BEFORE  ADVANCING   改行数  LINE 
015800     END-IF 
015900     COMPUTE  行カウンタ = 行カウンタ + 改行数
016000         : 
016100* 
016200 行出力-END. 
016300     EXIT. 
016400************************************************************
016500*       明細行出力処理                                               *
016600************************************************************
016700 明細行出力  SECTION.  
016800*   
016900     EVALUATE  書体種別 
017000       WHEN   ビット-X01
017100*             英語のみ100点 
017200         WRITE  行データ  FROM  明細行2-2 
017300                        BEFORE  ADVANCING   改行数  LINE 
017400          :  
017500       WHEN   OTHER  
017600*             その他 
017700         WRITE  行データ  FROM  明細行 
017800                        BEFORE  ADVANCING   改行数  LINE 
017900     END-EVALUATE 
018000          : 
018100* 
018200 明細行出力-END. 
018300     EXIT.
018400************************************************************
018500*       明細行組み立て処理                                           *
018600************************************************************
018700 明細行組み立て  SECTION. 
018800       :
018900     PERFORM  書体変更 
019000       : 
019100*  
019200 明細行組み立て-END. 
019300     EXIT.
019400************************************************************
019500*       書体変更処理                                                 *
019600************************************************************
019700 書体変更  SECTION. 
019800     INITIALIZE  書体フラグ
019900     MOVE  SPACE  TO  明細行2 
020000* 
020100     IF  英語点数 = 100 
020200       THEN 
020300         COMPUTE  書体−英語 = 書体−英語 OR ビットON
020400         MOVE  '*'  TO  明細行2-英語P 
020500     END-IF. 
020600        :
020700*  
020800 書体変更-END.
020900     EXIT. 
021000************************************************************
021100 END  PROGRAM  CSVPRFC. 
 

注※
COBOL2002の場合は-XMAP,LinePrint,COBOL85の場合は-Ksとなります。