コントロールブレイク(キー項目が変わる度に何らかの処理を実行)のロジックについて、前回の記事で紹介しました。
サンプルプログラムを作成しましたので、参考までに紹介します。
言語はCOBOL(opensource COBOL)です。
【サンプルプログラム】
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 |
IDENTIFICATION DIVISION. PROGRAM-ID. CONTBREK. ENVIRONMENT DIVISION. INPUT-OUTPUT SECTION. FILE-CONTROL. SELECT F1 ASSIGN TO "C:\tmp\a.txt". SELECT F2 ASSIGN TO "C:\tmp\b.txt". * DATA DIVISION. FILE SECTION. FD F1. 01 F1R. 03 F1-REC PIC X(33). FD F2. 01 F2R. 03 F2-REC PIC X(33). * WORKING-STORAGE SECTION. 01 WORK. 03 F1-END PIC X(01). 03 F1-OLD-KEY PIC X(07). 01 F1-REC-WORK. 03 F1-SYOHIN-CODE PIC X(07). 03 F1-COMMA1 PIC X(01). 03 F1-HANBAI-YMD PIC X(08). 03 F1-COMMA2 PIC X(01). 03 F1-HANBAI-KOSUU PIC X(05). 03 F1-COMMA3 PIC X(01). 03 F1-HANBAI-KINGAKU PIC X(09). 03 F1-CRLF PIC X(02). 01 F2-TITLE-WORK. 03 F2-ASTER1 PIC X(02) VALUE '**'. 03 F2-SYOHIN-CODE-TITLE PIC X(07). 03 F2-ASTER2 PIC X(22) VALUE '**********************'. 03 F2-CRLF-TITLE PIC X(02) VALUE X'0D0A'. 01 F2-REC-WORK. 03 F2-SYOHIN-CODE PIC X(07). 03 F2-COMMA1 PIC X(01). 03 F2-HANBAI-YMD PIC X(08). 03 F2-COMMA2 PIC X(01). 03 F2-HANBAI-KOSUU PIC X(05). 03 F2-COMMA3 PIC X(01). 03 F2-HANBAI-KINGAKU PIC X(09). 03 F2-CRLF PIC X(02). * PROCEDURE DIVISION. * * 各種処理の呼び出し * 000-CONTROLLER-S. PERFORM 100-START-S THRU 100-START-E. PERFORM 200-MAIN-S THRU 200-MAIN-E UNTIL F1-END = HIGH-VALUE. PERFORM 300-END-S THRU 300-END-E. STOP RUN. 000-CONTROLLER-E. * * 前処理 * 100-START-S. INITIALIZE WORK. OPEN INPUT F1. OPEN OUTPUT F2. PERFORM 210-READ-S THRU 210-READ-E. 100-START-E. * * 主処理 * 200-MAIN-S. IF F1-SYOHIN-CODE NOT = F1-OLD-KEY PERFORM 220-WRITE-TITLE-S THRU 220-WRITE-TITLE-E MOVE F1-SYOHIN-CODE TO F1-OLD-KEY END-IF. PERFORM 230-WRITE-RECORD-S THRU 230-WRITE-RECORD-E. PERFORM 210-READ-S THRU 210-READ-E. 200-MAIN-E. * * READ処理 * 210-READ-S. READ F1 AT END MOVE HIGH-VALUE TO F1-END GO TO 210-READ-E END-READ. MOVE F1-REC TO F1-REC-WORK. 210-READ-E. * * WRITE処理(タイトル) * 220-WRITE-TITLE-S. MOVE F1-SYOHIN-CODE TO F2-SYOHIN-CODE-TITLE. MOVE F2-TITLE-WORK TO F2-REC. WRITE F2R. 220-WRITE-TITLE-E. * * WRITE処理(レコード) * 230-WRITE-RECORD-S. MOVE F1-REC-WORK TO F2-REC-WORK. MOVE F2-REC-WORK TO F2-REC. WRITE F2R. 230-WRITE-RECORD-E. * * 後処理 * 300-END-S. CLOSE F1. CLOSE F2. 300-END-E. |
【入力ファイル】
・C:\tmp\a.txt
1 2 3 4 |
0000001,20180401,00100,00010000 0000001,20180402,00200,00020000 0000002,20180401,00001,00001000 0000003,20180402,00002,00002000 |
【出力ファイル】
・C:\tmp\b.txt
1 2 3 4 5 6 7 |
**0000001********************** 0000001,20180401,00100,00010000 0000001,20180402,00200,00020000 **0000002********************** 0000002,20180401,00001,00001000 **0000003********************** 0000003,20180402,00002,00002000 |
いかがでしたでしょうか。
前回の記事ではプログラムまでは作成しなかったので、今回の記事ではプログラムも作成してみました。
今回はCOBOLでプログラムを作成したので、java等の他の言語を学んできた方にはわかりにくかったかもしれません。
しかし、COBOLは自然言語に近い書き方ができるという特徴があるので、経験が浅い方でもなんとなく雰囲気を感じ取ってもらえるのではないか、と個人的には思っています。
また、コントロールブレイクを使用する現場ではCOBOL資産に触れる機会が少なくないので、その意味でも慣れておいて損はないと思っています。
次回は、コントロールブレイクと並んで使用されることが多いロジックであるマッチングについて書いていきたいと思います。
では、また来週!
コメント