COBOLサンプル集

 

COBOL初心者のために、COBOLプログラムのサンプルを書いてみました。

終了は[×](閉じる)
 
ヒント集
COBOL・基本サンプル1 COBOL・基本サンプル2
COBOL・NDBサンプル COBOL・RDBサンプル
    
 
ヒント ヒント内容
COBOL・基本サンプル1
SAMPLE01 順次ファイルコンバート
SAMPLE02 順次ファイルのマッチング(1:N)
SAMPLE03 コントロールブレークリスト出力
 
COBOL・基本サンプル2
1   
2   
3   
 
COBOL・NDBサンプル
1   
2   
3   
 
COBOL・RDBサンプル
1   
2   
3   
 



 
■ COBOL・基本サンプル1


SAMPLE01 順次ファイルコンバート
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
順次ファイルコンバート
1つのファイルをある条件に従って3ファイルに出力する。
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
----*----1----*----2----*----3----*----4----*----5----*----6----*----7
000000* SAMPLE01 LEVEL=1 DATE=95.10.01
000100****************************************************************
000200* *
000300* サブシステム名:資材所要量計画 *
000400* *
000500* モジュール名 :順次ファイルコンバート *
000600* *
000700* モジュールID:SAMPLE01 *
000800* *
000900* 機能概要 :1つのファイルをある条件に従って3ファイルに *
001000*        :出力する。 *
001100* *
001200* 作成者 :山田太郎 *
001300* 作成日 :1995.10.01 *
001400* 変更履歴 :1996.08.01 山田 XXXを追加 *
001500* *
001600****************************************************************
001700 IDENTIFICATION DIVISION.
001800 PROGRAM-ID. SAMPLE01.
001900*
002000 ENVIRONMENT DIVISION.
002100 INPUT-OUTPUT SECTION.
002200 FILE-CONTROL.
002300   SELECT IN01-FILE ASSIGN IN01.
002400   SELECT OT01-FILE ASSIGN OT01.
002400   SELECT OT02-FILE ASSIGN OT02
002400   SELECT OT03-FILE ASSIGN OT03.
002500/
002600 DATA DIVISION.
002700 FILE SECTION.
002800 FD IN01-FILE
002900     BLOCK CONTAINS 0 RECORDS.
003000 01 I1-REC.
003100   COPY AAA001 REPLACING ==()== BY ==I1-==.
003200*
003300 FD OT01-FILE.
003400 01 O1-REC.
003500    COPY BBB001 REPLACING ==()== BY ==O1-==.
003200*
003300 FD OT02-FILE.
003400 01 O2-REC.
003500    COPY BBB001 REPLACING ==()== BY ==O2-==.
003200*
003300 FD OT03-FILE.
003400 01 O3-REC.
003500    COPY BBB001 REPLACING ==()== BY ==O3-==.
003600/
002400 WORKING-STORAGE SECTION.
002500*
003900*----ワークエリア----------------------------------------------*
004000 01 WRK-AREA.
004100   03 CAN-AREA.
004200     05 CAN-PGMID PIC X(08) VALUE "SAMPLE01".
004300   03 CTR-AREA.
004400     05 CTR-I1 PIC S9(09) PACKED-DECIMAL.
004500     05 CTR-O1 PIC S9(09) PACKED-DECIMAL.
004500     05 CTR-O2 PIC S9(09) PACKED-DECIMAL.
004500     05 CTR-O3 PIC S9(09) PACKED-DECIMAL.
004100   03 KEY-AREA.
004200     05 KEY-NEW PIC X(01).
002700   03 MSG-AREA.
002800     COPY DISPMSG.
004600*
004700*----初期化領域------------------------------------------------*
004800 01 INI-O1-REC.
004900    COPY BBB001 REPLACING ==()== BY ==INI-O1-==.
004600*
004700*----共通領域--------------------------------------------------*
004800 01 W1-REC.
004900    COPY BBB001 REPLACING ==()== BY ==W1-==.
006900/
007000PROCEDURE DIVISION.
007100****************************************************************
007200* SAMPLE01 (0.0) *
007300****************************************************************
007400 00-SAMPLE01 SECTION.
007100*
007500   PERFORM 10-INIT.
007700   PERFORM 20-MAIN
008000     UNTIL KEY-NEW = HIGH-VALUE.
008100   PERFORM 30-END.
008200*
008300 00-SAMPLE01-EXIT.
008400   EXIT PROGRAM.
008500/***************************************************************
008600* <初期処理> (1.0) *
008700* 領域の初期クリア、入出力ファイルをオープンする。 *
008800* *
008900****************************************************************
009000 10-INIT SECTION.
009100*
007200*----出力ファイルの初期化--------------------------------------*
007300 MOVE SPACE TO INI-O1-REC.
007400 INITIALIZE INI-O1-REC.
007900*
008000*----ワークエリアの初期化--------------------------------------*
008100 MOVE LOW-VALUE TO KEY-NEW.
008200 MOVE ZERO TO CTR-AREA.
007500*
007600*----ファイルOPEN------------------------------------------*
007700 OPEN INPUT IN01-FILE.
007800 OPEN OUTPUT OT01-FILE
007800          OT02-FILE
007800          OT03-FILE.
007500*
008220*----入力ファイルのREAD------------------------------------*
008230 PERFORM 11-READ.

012100*
012200 10-INIT-EXIT.
012300 EXIT.
012400****************************************************************
012500* <READ処理> (1.1) *
012600* 入力ファイルをREADする。 *
012700* *
012800****************************************************************
012900 11-READ SECTION.
013000*
009400   READ IN01-FILE
009500    AT END
009600     MOVE HIGH-VALUE TO KEY-NEW
009700    NOT AT END
009800     COMPUTE CTR-I1 = CTR-I1 + 1
009900   END-READ.
014000*
014100 11-READ-EXIT.
014200 EXIT.
014300****************************************************************
014400* <主処理> (2.0) *
014500* レコードを編集してWRITEする。 *
014600* *
014700****************************************************************
014800 20-MAIN SECTION.
014900*
015000*----出力ファイルの初期化--------------------------------------*
015100 MOVE INI-O1-REC TO W1-REC.
015200*
015300*----出力ファイルの編集----------------------------------------*
015400 MOVE I1-AA0001 TO W1-BB0001.
015500 MOVE I1-AA0002 TO W1-BB0002.
015600 MOVE I1-AA0003 TO W1-BB0003.
015700 MOVE I1-AA0004 TO W1-BB0004.
015800 MOVE I1-AA0005 TO W1-BB0005.
015900*
016000*----振り分け&出力ファイルのWRITE------------------------*
016100   EVALUATE I1-AA0001
016200     WHEN 1
016300     WHEN 2
016400       MOVE W1-REC TO O2-REC *1,2の時
016500       PERFORM 22-WRITE
016700     WHEN 3
016400       MOVE W1-REC TO O3-REC *3の時
016500       PERFORM 23-WRITE
017100     WHEN OTHER
016400       MOVE W1-REC TO O1-REC *1,2,3以外の時
016500       PERFORM 21-WRITE
017500   END-EVALUATE.
017600*
017610*----入力ファイルのREAD------------------------------------*
017620 PERFORM 11-READ.
017630*
017700 20-MAIN-EXIT.
017800 EXIT.
017900****************************************************************
018000* <終了処理> (3.0) *
018100* 入出力ファイルをCLOSEする。 *
018200* *
018300****************************************************************
018400 30-END SECTION.
018500*
014400*----ファイルCLOSE----------------------------------------*
014500 CLOSE IN01-FILE
014600     OT01-FILE
014600     OT02-FILE
014600     OT03-FILE.
020100*
020200* 件数のコンソール表示
020300 MOVE SPACE TO MSG-REC.
020400 MOVE CAN-PGMID TO MSG-PROGRAM-ID.
020500 MOVE 3 TO MSG-TBL-NUM.
020600 MOVE "XXXXX" TO MSG-MESSAGE-B(1).
020700 MOVE CTR-I1 TO MSG-REC-CTR(1).
020800 MOVE "XXXXX" TO MSG-MESSAGE-B(2).
020900 MOVE CTR-O1 TO MSG-REC-CTR(2).
021000 MOVE "XXXXX" TO MSG-MESSAGE-B(3).
021100 MOVE CTR-O2 TO MSG-REC-CTR(3).
021200 CALL "AAAAMSG" USING MSG-AREA.
021300*
021400 30-END-EXIT.
021500 EXIT.
012500/***************************************************************
012600* <WRITE処理> (2.1) *
012700* 出力ファイル1へのWRITEする。 *
012800* *
012900****************************************************************
013000 21-WRITE SECTION.
013100*
013200 WRITE O1-REC.
017000 COMPUTE CTR-O1 = CTR-O1 + 1.
013400*
013500 21-WRITE-EXIT.
013600 EXIT.
012500****************************************************************
012600* <WRITE処理> (2.2) *
012700* 出力ファイル2へのWRITEする。 *
012800* *
012900****************************************************************
013000 22-WRITE SECTION.
013100*
013200 WRITE O2-REC.
017000 COMPUTE CTR-O2 = CTR-O2 + 1.
013400*
013500 22-WRITE-EXIT.
013600 EXIT. 012500****************************************************************
012600* <WRITE処理> (2.3) *
012700* 出力ファイル3へのWRITEする。 *
012800* *
012900****************************************************************
013000 23-WRITE SECTION.
013100*
013200 WRITE O3-REC.
017000 COMPUTE CTR-O3 = CTR-O3 + 1.
013400*
013500 23-WRITE-EXIT.
013600 EXIT.



SAMPLE02 順次ファイルのマッチング(1:N)

++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
順次ファイルのマッチング(1:N)
2つのファイルをキーに従って1ファイルにまとめる。
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
----*----1----*----2----*----3----*----4----*----5----*----6----*----7
000000* SAMPLE02 LEVEL=1 DATE=95.10.01
000100****************************************************************
000200* *
000300* サブシステム名:資材所要量計画 *
000400* *
000500* モジュール名 :順次ファイルのマッチング *
000600* *
000700* モジュールID:SAMPLE02 *
000800* *
000900* 機能概要 :2つのファイルをキーに従って *
001000* :1ファイルにまとめる。 *
001100* *
001200* 作成者 :山田太郎 *
001300* 作成日 :1995.10.01 *
001400* 変更履歴 :1996.08.01 山田 XXXを追加 *
001500* *
001600****************************************************************
001700 IDENTIFICATION DIVISION.
001800 PROGRAM-ID. SAMPLE02.
001900/
002000 ENVIRONMENT DIVISION.
002100 INPUT-OUTPUT SECTION.
002200 FILE-CONTROL.
002300 SELECT IN01-FILE ASSIGN IN01.
002300 SELECT IN02-FILE ASSIGN IN02.
002400 SELECT OT01-FILE ASSIGN OT01.
002500/
002600 DATA DIVISION.
002700 FILE SECTION.
002800 FD IN01-FILE
002900    BLOCK CONTAINS 0 RECORDS.
003000 01 I1-REC.
003100     COPY AAA001 REPLACING ==()== BY ==I1-==.
003200*
002800 FD IN02-FILE
002900     BLOCK CONTAINS 0 RECORDS.
003000 01 I2-REC.
003100     COPY BBB001 REPLACING ==()== BY ==I2-==.
003200*
003300 FD OT01-FILE.
003400 01 O1-REC.
003500     COPY CCC001 REPLACING ==()== BY ==O1-==.
003600/
003700 WORKING-STORAGE SECTION.
003800*
003900*----ワークエリア----------------------------------------------*
005400 01 WRK-AREA.
004100   03 CAN-AREA.
004200     05 CAN-PGMID PIC X(08) VALUE "SAMPLE02".
005500   03 CTR-AREA.
005600     05 CTR-I1 PIC S9(09) PACKED-DECIMAL.
005700     05 CTR-I2 PIC S9(09) PACKED-DECIMAL.
005800     05 CTR-O1 PIC S9(09) PACKED-DECIMAL.
005900   03 KEY-AREA.
006000     05 KEY-I1.
006100       07 KEY-I1-XX0001 PIC X(01).
006200       07 KEY-I1-YY0001 PIC X(08).
006300     05 KEY-I2.
006400       07 KEY-I2-XX0001 PIC X(01).
006500       07 KEY-I2-YY0001 PIC X(08).
006600*
004700*----初期化領域------------------------------------------------*
004800 01 INI-O1-REC.
004900    COPY CCC001 REPLACING ==()== BY ==INI-O1-==.
007000/
007100 PROCEDURE DIVISION.
007200****************************************************************
007300* SAMPLE02 (0.0) *
007400****************************************************************
007500 00-SAMPLE02 SECTION.
006600*
007600   PERFORM 10-INIT.
007900   PERFORM 20-MAIN
007900        UNTIL ( KEY-I1 = HIGH-VALUE )
008000         AND ( KEY-I2 = HIGH-VALUE ).
009600   PERFORM 30-END.
009700*
009800 00-SAMPLE02-EXIT.
009900    EXIT PROGRAM.
010000****************************************************************
010100* <初期処理> (1.0) *
010200* 領域の初期クリア、入出力ファイルをオープンする。 *
010300* *
010400****************************************************************
010500 10-INIT SECTION.
010600*
010700*----出力ファイルの初期化--------------------------------------*
010800 MOVE SPACE TO INI-O1-REC.
010900 INITIALIZE INI-O1-REC.
011000*
008000*----ワークエリアの初期化--------------------------------------*
008100 MOVE LOW-VALUE TO KEY-AREA.
008200 MOVE ZERO TO CTR-AREA.
011500*
007600*----ファイルOPEN------------------------------------------*
007700 OPEN INPUT IN01-FILE
007710        IN02-FILE.
007800 OPEN OUTPUT OT01-FILE.
012110*
012120*----入力ファイル1のREAD----------------------------------*
012130 PERFORM 11-READ.
012130 PERFORM 12-READ.
013000*
013100 10-INIT-EXIT.
013200 EXIT.
013300****************************************************************
013400* <ファイルREAD処理> (1.1) *
013500* 標準入力ファイル1をREADする。 *
013600* *
013700****************************************************************
013800 11-READ SECTION.
013900*
009400   READ IN01-FILE
009500    AT END
014800     MOVE HIGH-VALUE TO KEY-I1
009700    NOT AT END
009800     COMPUTE CTR-I1 = CTR-I1 + 1
014500     MOVE I1-XX0001 TO KEY-I1-XX0001
014600     MOVE I1-YY0001 TO KEY-I1-YY0001
009900   END-READ.
015000*
015100 11-READ-EXIT.
015200 EXIT.
015300****************************************************************
015400* <ファイルREAD処理> (1.2) *
015500* 標準入力ファイル2 をREADする。 *
015600* *
015700****************************************************************
015800 12-READ SECTION.
015900*
009400   READ IN02-FILE
009500    AT END
014800     MOVE HIGH-VALUE TO KEY-I2
009700    NOT AT END
009800     COMPUTE CTR-I2 = CTR-I2 + 1
014500     MOVE I2-XX0001 TO KEY-I2-XX0001
014600     MOVE I2-YY0001 TO KEY-I2-YY0001
009900   END-READ.
017000*
017100 12-READ-EXIT.
017200 EXIT.
017300****************************************************************
017400* <マッチング> (2.0) *
017500* *
017600* *
017700****************************************************************
017800 20-MAIN SECTION.
017900*
008100   EVALUATE TRUE
008200     WHEN KEY-I1 < KEY-I2
008300        PERFORM 21-I1-ONLY
008400        PERFORM 11-READ
008500     WHEN KEY-I1 > KEY-I2
008600        PERFORM 22-I2-ONLY
008700        PERFORM 12-READ
008800     WHEN KEY-I1 = KEY-I2
008900        PERFORM UNTIL KEY-I1 NOT = KEY-I2
009000          PERFORM 23-MATCH
009100          PERFORM 12-READ
009200          END-PERFORM
009300        PERFORM 11-READ
009400   END-EVALUATE
018200*
018300 20-MAIN-EXIT.
018400   EXIT.
017300****************************************************************
017400* <出力ファイル編集1> (2.1) *
017500* *
017600* *
017700****************************************************************
017800 21-I1-ONLY SECTION.
017900*IN01-FILEのみの時
018000* ここでは何もしない
018100    CONTINUE.
018200*
018300 21-I1-ONLY-EXIT.
018400 EXIT.
018500****************************************************************
018600* <出力ファイル編集2> (2.2) *
018700* *
018800* *
018900****************************************************************
019000 22-I2-ONLY SECTION.
021500*IN02-FILEのみの時
021600*----出力ファイルの初期化--------------------------------------*
021700 MOVE INIT-O1-REC TO O1-REC.
021800*
021900*----出力ファイルの編集----------------------------------------*
022000 MOVE I2-AA0001 TO O1-BB0001.
022100 MOVE I2-AA0002 TO O1-BB0002.
022200 MOVE I2-AA0003 TO O1-BB0003.
022300 MOVE I2-AA0004 TO O1-BB0004.
022400 MOVE I2-AA0005 TO O1-BB0005.
022500*
022600*----出力ファイル1のWRITE--------------------------------*
012100 PERFORM 221-WRITE.
023000*
020700 22-I2-ONLY-EXIT.
020800 EXIT.
020900****************************************************************
021000* <出力ファイル編集3> (2.3) *
021100* *
021200* *
021300****************************************************************
021400 23-MATCH SECTION.
021500*
021600*----出力ファイルの初期化--------------------------------------*
021700 MOVE INIT-O1-REC TO O1-REC.
021800*
021900*----出力ファイルの編集----------------------------------------*
022000 MOVE I2-AA0001 TO O1-BB0001.
022100 MOVE I2-AA0002 TO O1-BB0002.
022200 MOVE I2-AA0003 TO O1-BB0003.
022300 MOVE I2-AA0004 TO O1-BB0004.
022400 MOVE I2-AA0005 TO O1-BB0005.
022500*
022600*----出力ファイル1のWRITE--------------------------------*
012100 PERFORM 221-WRITE.
023000*
023100 23-MATCH-EXIT.
023200 EXIT.
023300****************************************************************
023400* <終了処理> (3.0) *
023500* 入出力ファイルをCLOSEする。 *
023600* *
023700****************************************************************
023800 30-END SECTION.
023900*
014400*----ファイルCLOSE----------------------------------------*
014500 CLOSE IN01-FILE
014600      IN02-FILE
014600      OT01-FILE.
025100*
026400 30-END-EXIT.
026500 EXIT.
028600****************************************************************
028700* <書出処理> (2.2.1) *
028800* 順編成ファイル出力。 *
028900* *
029000****************************************************************
029100 221-WRITE SECTION.
029300*
029310 WRITE O1-REC.
013300 COMPUTE CTR-O1 = CTR-O1 + 1.
029300*
029400 221-WRITE-EXIT.
029500 EXIT.



SAMPLE03 コントロールブレークリスト出力

++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
コントロールブレークリスト出力。
1入力で明細リスト出力して、ある条件で合計出力する。
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
----*----1----*----2----*----3----*----4----*----5----*----6----*----7
000000* SAMPLE03 LEVEL=1 DATE=95.10.01
000100****************************************************************
000200* *
000300* サブシステム名:資材所要量計画 *
000400* *
000500* モジュール名 :コントロールブレークリスト出力 *
000600* *
000700* モジュールID:SAMPLE03 *
000800* *
000900* 機能概要 :明細と合計を印刷する。 *
001000* : *
001100* *
001200* 作成者 :山田太郎 *
001300* 作成日 :1995.10.01 *
001400* 変更履歴 :1996.08.01 山田 XXXを追加 *
001500* *
001600****************************************************************
001700 IDENTIFICATION DIVISION.
001800 PROGRAM-ID. SAMPLE03.
001900*
002000 ENVIRONMENT DIVISION.
002100*
002200 INPUT-OUTPUT SECTION.
002300 FILE-CONTROL.
002300 SELECT IN01-FILE ASSIGN IN01.
002400 SELECT OT01-FILE ASSIGN OT01.
002500*
002600 DATA DIVISION.
002700 FILE SECTION.
002800 FD IN01-FILE
002900 BLOCK CONTAINS 0 RECORDS.
003000 01 I1-REC.
003100 COPY AAA001 REPLACING ==()== BY ==I1-==.
003200*
003300 FD OT01-FILE.
003500 01 O1-REC PIC X(300).
003600/
003700 WORKING-STORAGE SECTION.
005100*----ワークエリア----------------------------------------------*
005200 01 WRK-AREA.
004100 03 CAN-AREA.
004200 05 CAN-PGMID PIC X(08) VALUE "SAMPLE03".
005500*
005300   03 CNM-AREA. 005400    05 CNM-O1-LINE-MAX PIC S9(04) BINARY VALUE 58.
005500*
005600 03 CTR-AREA.
005700 05 CTR-I1 PIC S9(09) PACKED-DECIMAL.
005800 05 CTR-O1 PIC S9(09) PACKED-DECIMAL.
005900   05 CTR-O1-PAGE   PIC S9(04) PACKED-DECIMAL.
006000   05 CTR-O1-LINE   PIC S9(04) PACKED-DECIMAL.
006100*
006200  03 KEY-AREA.
006300   05 KEY-NEW.
006400    07 KEY-NEW-XXX001 PIC X(04).
006500   05 KEY-OLD.
006600    07 KEY-OLD-XXX001 PIC X(04).
006700*
006800  03 MSG-AREA.
006900   COPY VDISPMSG.
007000*
007100  03 SUM-AREA.
007200    05 SUM-FIN-AAA001   PIC S9(09) BINARY SYNC.
007300    05 SUM-FIN-BBB001   PIC S9(09) BINARY SYNC.
007400    05 SUM-FIN-CCC001   PIC S9(09) BINARY SYNC.
007500    05 SUM-TOT-AAA001   PIC S9(09) BINARY SYNC.
007600    05 SUM-TOT-BBB001   PIC S9(09) BINARY SYNC.
007700    05 SUM-TOT-CCC001   PIC S9(09) BINARY SYNC.
007800*
007900*----ヘッダ1--------------------------------------------------*
008000 01 O1-HEAD1.
008100 03 FILLER   PIC X(10)
008200   VALUE "(SAMPLE03)"
008300   POSITION 3.
008400 03 FILLER   PIC N(21)
008500 VALUE NC"*** 金額集計表 ***"
008600   MODE-1 POSITION 46.
008700 03 O1-OP-DATE-YY   PIC ZZZ9 POSITION 114.
008800 03 FILLER   PIC N(01)
008900   VALUE NC"年" MODE-3.
009000 03 O1-OP-DATE-MM   PIC Z9.
009100 03 FILLER   PIC N(01)
009200   VALUE NC"月" MODE-3.
009300 03 O1-OP-DATE-DD   PIC Z9.
009400 03 FILLER   PIC N(01)
009500   VALUE NC"日" MODE-3.
009600 03 O1-PAGE   PIC ZZZ9 POSITION 130.
009700 03 FILLER   PIC N(01)
009800   VALUE NC"頁" MODE-3.
009900*
010000*----ヘッダ2--------------------------------------------------*
010100 01 O1-HEAD2.
010200    03 O1-CODE1   PIC ZZZ9 POSITION 5.
010300*
010400*----ヘッダ3--------------------------------------------------*
010500 01 O1-HEAD3.
010600    03 O1-CODE2   PIC X(NN) POSITION 5.
010700*
010800*----明細1----------------------------------------------------*
010900 01 O1-MEISAI1.
011000   03 O1-MEISAI11     PIC X(NN) POSITION 2.
011100    03 O1-MEISAI12     PIC N(NN) MODE-2 POSITION 12.
011200    03 O1-MEISAI13     PIC X(NN) POSITION 47.
011300*
011400*----明細2----------------------------------------------------*
011500 01 O1-MEISAI2.
011600    03 FILLER     PIC N(05)
011700         VALUE NC"*営業部計"
011800         MODE-2 POSITION 79.
011900    03 O1-SUM-TOT-AAA001     PIC ZZZ,ZZZ,ZZ9
011900 POSITION 94.
012000    03 O1-SUM-TOT-BBB001     PIC ZZZ,ZZZ,ZZ9
012010 POSITION 103.
012100  03 O1-SUM-TOT-CCC001     PIC ZZZ,ZZZ,ZZ9
012110 POSITION 113.
012200*
012300*----明細3----------------------------------------------------*
012400 01 O1-MEISAI3.
012500   03 FILLER            PIC N(05)
012600                     VALUE NC"**総合計"
012700                     MODE-2 POSITION 79.
012800   03 O1-SUM-FIN-AAA001      PIC ZZZ,ZZZ,ZZ9
012810                     POSITION 94.
012900   03 O1-SUM-FIN-BBB001      PIC ZZZ,ZZZ,ZZ9
012910                     POSITION 103.
013000   03 O1-SUM-FIN-CCC001      PIC ZZZ,ZZZ,ZZ9.
013010                     POSITION 113.
013100*
013200/
013300 PROCEDURE DIVISION.
013400****************************************************************
013500* SAMPLE03                 (0.0)        *
013600****************************************************************
013700 00-SAMPLE03 SECTION.
013800*
013900   PERFORM 10-INIT.
014000   PERFORM UNTIL ( KEY-NEW = HIGH-VALUE )
014100     PERFORM 20-INIT
014200     PERFORM UNTIL ( KEY-NEW = HIGH-VALUE )
014300       PERFORM 30-INIT
014400       PERFORM UNTIL ( KEY-NEW-XXX001
014500                NOT = KEY-OLD-XXX001 )
014600         PERFORM 40-MAIN
014700       END-PERFORM
014800       PERFORM 50-END
014900     END-PERFORM
015000     PERFORM 60-END
015100   END-PERFORM.
015200   PERFORM 70-END.
015300*
015400 00-SAMPLE03-EXIT.
015500  EXIT PROGRAM.
015600****************************************************************
015700* <初期処理>       (1.0)        *
015800*   領域の初期クリア、入出力ファイルをオープンする。     *
015900*           *
016000****************************************************************
016100 10-INIT SECTION.
016200*
016300*----ファイルOPEN------------------------------------------*
016400 OPEN INPUT IN01-FILE.
016500 OPEN OUTPUT OT01-FILE.
016600*
017300 10-INIT-EXIT.
017400 EXIT.
017500****************************************************************
017600* <ファイルREAD処理>         (1.1)        *
017700*   標準入力ファイル1をREADする。           *
017800*           *
017900****************************************************************
018000 11-READ SECTION.
018100*
018200   READ IN01-FILE
018300    AT END
018400     MOVE HIGH-VALUE TO KEY-NEW
018500    NOT AT END
018600     COMPUTE CTR-I1 = CTR-I1 + 1
018700   END-READ.
018800*
018900 11-READ-EXIT.
019000   EXIT.
019100****************************************************************
019200* <合計行の初期化>             (2.0)     *
019300*         *
019400* *
019500****************************************************************
019600 20-INIT SECTION.
019700*
019800*----ページ初期化----------------------------------------------*
019900 MOVE ZERO TO CTR-O1-PAGE.
020000*
020100*----合計行の初期化--------------------------------------------*
020200   MOVE ZERO TO SUM-FIN-AAA001
020300           SUM-FIN-BBB001
020400           SUM-FIN-CCC001.
020500*
020600 20-INIT-EXIT.
020700 EXIT.
020800****************************************************************
020900* <X計行の初期化>  (3.0) *
021000*      *
021100* *
021200****************************************************************
021300 30-INIT SECTION.
021400*
021500*----改ページ設定----------------------------------------------*
021600 MOVE CNM-O1-LINE-MAX TO CTR-O1-LINE.
021700*
021800*----X計行の初期化--------------------------------------------*
021900   MOVE       ZERO TO SUM-TOT-AAA001
022000                 SUM-TOT-BBB001
022100                 SUM-TOT-CCC001.
022200*
022300   MOVE      KEY-NEW TO KEY-OLD.
022400*
022500 30-INIT-EXIT.
022600 EXIT.
022700****************************************************************
022800* <主処理>  (4.0) *
022900*      *
023000* *
023100****************************************************************
023200 40-MAIN SECTION.
023300*
023400*----改ページ判定----------------------------------------------*
023500   IF CTR-O1-LINE + 1 > CNM-O1-LINE-MAX
023600     PERFORM 99-NEWPAGE
023700   END-IF.
023800   WRITE O1-REC FROM O1-MEISAI1 AFTER 1.
023900   COMPUTE CTR-O1-LINE = CTR-O1-LINE + 1.
024000*
024100*----ZZZZ計加算--------------------------------------------*
024200 COMPUTE SUM-TOT-AAA001 = SUM-TOT-AAA001 + I1-AAA001.
024400 COMPUTE SUM-TOT-BBB001 = SUM-TOT-BBB001 + I1-BBB001.
024600 COMPUTE SUM-TOT-CCC001 = SUM-TOT-CCC001 + I1-CCC001.
024800*
024900 40-MAIN-EXIT.
025000 EXIT.
025100****************************************************************
025200* <XXXX計行の印刷> (5.0) *
025300* *
025400* *
025500****************************************************************
025600 50-END SECTION.
025700*
025800*----編集------------------------------------------------------*
025900 MOVE SUM-TOT-AAA001 TO O1-SUM-TOT-AAA001.
026000 MOVE SUM-TOT-BBB001 TO O1-SUM-TOT-BBB001.
026100 MOVE SUM-TOT-CCC001 TO O1-SUM-TOT-CCC001.
026200*
026300*----改ページ判定/XXXX計行の印刷--------------------------*
026400 IF CTR-O1-LINE + 1 > CNM-O1-LINE-MAX
026500 PERFORM 99-NEWPAGE
026600 END-IF.
026700 WRITE O1-REC FROM O1-MEISAI2 AFTER 1.
026800 COMPUTE CTR-O1-LINE = CTR-O1-LINE + 1.
026900*
027000*----合計加算--------------------------------------------------*
027100 COMPUTE SUM-FIN-AAA001 = SUM-FIN-AAA001 + SUM-TOT-AAA001.
027300 COMPUTE SUM-FIN-BBB001 = SUM-FIN-BBB001 + SUM-TOT-BBB001.
027500 COMPUTE SUM-FIN-CCC001 = SUM-FIN-CCC001 + SUM-TOT-CCC001.
027700*
027800 50-END-EXIT.
027900 EXIT.
028000****************************************************************
028100* <合計行の印刷> (6.0) *
028200* *
028300* *
028400****************************************************************
028500 60-END SECTION.
028600*
028700*----編集------------------------------------------------------*
028800 MOVE SUM-FIN-AAA001 TO O1-SUM-FIN-AAA001.
028900 MOVE SUM-FIN-BBB001 TO O1-SUM-FIN-BBB001.
029000 MOVE SUM-FIN-CCC001 TO O1-SUM-FIN-CCC001.
029100*
029200*----改ページ判定/合計行の印刷--------------------------------*
029300 IF CTR-O1-LINE + 1 > CNM-O1-LINE-MAX
029400 PERFORM 99-NEWPAGE
029500 END-IF.
029600 WRITE O1-REC FROM O1-MEISAI3 AFTER 1.
029700*
029800 60-END-EXIT.
029900 EXIT.
030000****************************************************************
030100* <終了処理>                (7.0)        *
030200*   入出力ファイルをCLOSEする。             *
030300*           *
030400****************************************************************
030500 70-END SECTION.
030600*
030700*----ファイルのCLOSE--------------------------------------*
030800 CLOSE IN01-FILE
030900 OT01-FILE.
032000*
032100 70-END-EXIT.
032200 EXIT.
032300****************************************************************
032400* <改ページ>                (9.9)        *
032500*   改ページ処理を行う。              *
032600*           *
032700****************************************************************
032800 99-NEWPAGE SECTION.
032900*
033000*----行カウンタ初期化/ページカウンタ設定----------------------*
033100 MOVE ZERO TO CTR-O1-LINE.
033200 COMPUTE CTR-O1-PAGE = CTR-O1-PAGE + 1.
033300 MOVE CTR-O1-PAGE TO O1-PAGE.
033400*
033500*----改ページ処理----------------------------------------------*
033600 MOVE SPACE TO O1-REC.
033700 WRITE O1-REC AFTER PAGE.
033800 WRITE O1-REC FROM O1-HEAD1 AFTER 2.
033900 WRITE O1-REC FROM O1-HEAD2 AFTER 2.
034000 WRITE O1-REC FROM O1-HEAD31 AFTER 2.
034100 WRITE O1-REC FROM O1-HEAD32 AFTER 1.
034200 COMPUTE CTR-O1-LINE = CTR-O1-LINE + 8.
034300*
034400 99-NEWPAGE-EXIT.
034500 EXIT.




 
■   


 

 
 
 


 


 
 



 
このページTOPへ
メインフレーム         COBOLエラー対処 

SEプログラマー・ヒント集メニューへ

Copyright © 2006-2013 s-kitagawa cobolhint