マッチング処理(マスタデータとトランザクションデータを突き合わせる)のロジックについて、前回の記事で紹介しました。
サンプルプログラムを作成しましたので、参考までに紹介します。
言語は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 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 |
IDENTIFICATION DIVISION. PROGRAM-ID. MATCHING. ENVIRONMENT DIVISION. INPUT-OUTPUT SECTION. FILE-CONTROL. SELECT F1 ASSIGN TO "C:\tmp\a.txt". SELECT F2 ASSIGN TO "C:\tmp\b.txt". SELECT F3 ASSIGN TO "C:\tmp\c.txt". * DATA DIVISION. FILE SECTION. FD F1. 01 F1R. 03 F1-REC PIC X(30). FD F2. 01 F2R. 03 F2-REC PIC X(33). FD F3. 01 F3R. 03 F3-REC PIC X(31). * WORKING-STORAGE SECTION. 01 WORK. 03 F1-KEY PIC X(07). 03 F2-KEY PIC X(07). 01 F1-REC-WORK. 03 F1-SYOHIN-CODE PIC X(07). 03 F1-COMMA1 PIC X(01). 03 F1-SYOHIN-NAME PIC X(20). 03 F1-CRLF PIC X(02). 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). 01 F3-REC-WORK. 03 F3-SYOHIN-NAME PIC X(20). 03 F3-COMMA1 PIC X(01) VALUE ','. 03 F3-HANBAI-YMD PIC X(08). 03 F3-CRLF PIC X(02) VALUE X'0D0A'. * PROCEDURE DIVISION. * * 各種処理の呼び出し * 000-CONTROLLER-S. PERFORM 100-START-S THRU 100-START-E. PERFORM 200-MAIN-S THRU 200-MAIN-E UNTIL F1-KEY = HIGH-VALUE AND F2-KEY = HIGH-VALUE. PERFORM 300-END-S THRU 300-END-E. STOP RUN. 000-CONTROLLER-E. * * 前処理 * 100-START-S. OPEN INPUT F1. OPEN INPUT F2. OPEN OUTPUT F3. PERFORM 210-MASTER-READ-S THRU 210-MASTER-READ-E. PERFORM 220-TRAN-READ-S THRU 220-TRAN-READ-E. 100-START-E. * * 主処理 * 200-MAIN-S. IF F1-KEY < F2-KEY PERFORM 230-MASTER-ONLY-S THRU 230-MASTER-ONLY-E ELSE IF F1-KEY = F2-KEY PERFORM 240-MATCH-S THRU 240-MATCH-E ELSE PERFORM 250-TRAN-ONLY-S THRU 250-TRAN-ONLY-E END-IF END-IF. 200-MAIN-E. * * READ処理(マスタファイル) * 210-MASTER-READ-S. READ F1 AT END MOVE HIGH-VALUE TO F1-KEY GO TO 210-MASTER-READ-E END-READ. MOVE F1-REC TO F1-REC-WORK. MOVE F1-SYOHIN-CODE TO F1-KEY. 210-MASTER-READ-E. * * READ処理(トランザクションファイル) * 220-TRAN-READ-S. READ F2 AT END MOVE HIGH-VALUE TO F2-KEY GO TO 220-TRAN-READ-E END-READ. MOVE F2-REC TO F2-REC-WORK. MOVE F2-SYOHIN-CODE TO F2-KEY. 220-TRAN-READ-E. * * マスタのみ処理 * 230-MASTER-ONLY-S. PERFORM 210-MASTER-READ-S THRU 210-MASTER-READ-E. 230-MASTER-ONLY-E. * * マッチ時処理 * 240-MATCH-S. PERFORM UNTIL F1-KEY < F2-KEY MOVE F1-SYOHIN-NAME TO F3-SYOHIN-NAME MOVE F2-HANBAI-YMD TO F3-HANBAI-YMD MOVE F3-REC-WORK TO F3-REC WRITE F3R PERFORM 220-TRAN-READ-S THRU 220-TRAN-READ-E END-PERFORM. PERFORM 210-MASTER-READ-S THRU 210-MASTER-READ-E. 240-MATCH-E. * * トランザクションのみ処理 * 250-TRAN-ONLY-S. DISPLAY 'TRAN ONLY ' F2-KEY. PERFORM 220-TRAN-READ-S THRU 220-TRAN-READ-E. 250-TRAN-ONLY-E. * * 後処理 * 300-END-S. CLOSE F1. CLOSE F2. CLOSE F3. 300-END-E. |
【マスタファイル】
・C:\tmp\a.txt
1 2 3 |
0000001,hoge 0000002,fuga 0000004,piyo |
【トランザクションファイル】
・C:\tmp\b.txt
1 2 3 4 |
0000001,20180401,00100,00010000 0000001,20180402,00200,00020000 0000003,20180401,00001,00001000 0000004,20180401,00002,00002000 |
【出力ファイル】
・C:\tmp\c.txt
1 2 3 |
hoge ,20180401 hoge ,20180402 piyo ,20180401 |
【標準出力】
1 |
TRAN ONLY 0000003 |
いかがでしたでしょうか。
マッチング処理はそこそこ複雑なロジックなので、マッチング処理を使用するプログラムを前知識無しで目にすると戸惑うと思います。
しかし、前回の記事で紹介したフローが頭に入っていれば、プログラムも読めるようになると思います。
業務で開発するバッチプログラムでは頻出のロジックなので、前回の記事の内容と合わせて頭に入れておくことをお勧めします。
これからも、実務で役に立つ情報をお伝えできればと思います。
では、また来週!
コメント