Excelなどから入力したデータを基にして,該当するCSVファイルのデータを印刷します。このとき,APで設定した条件とCSVファイルのデータをマッチングさせ,ある条件に該当するデータに対し拡大印刷したり,「*」を付けて印刷したりできます。ここでは,1科目でも100点があるか,または前回より20番以上順位が上がった人のデータに対して「*」を付けて印刷する例を示します。
図9-14 CSVファイルから出力される帳票の出力例
処理の概要を示します。
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.