■  マッチング処理サンプル


マッチング処理をするにはMATCH文を使います。
下記例は3ファイルのマッチングのサンプルです。

EX)
//FILEA    DD *          ←INPUTその1
001001001      AREC NO.1
001001002      AREC NO.2
001001004      AREC NO.3
001001005      AREC NO.4
//FILEB    DD *          ←INPUTその2
001001001      BREC NO.1
001001002      BREC NO.2
001001002      BREC NO.3
001001003      BREC NO.4
001001007      BREC NO.5
999999999      BREC NO.6
//FILEC    DD *          ←INPUTその3
001001001      CREC NO.1
001001005      CREC NO.2
001001005      CREC NO.3
001001006      CREC NO.4
001001007      CREC NO.5
999999999      CREC NO.6
//OUTFL    DD  DUMMY,DCB=(RECFM=FB,LRECL=100,BLKSIZE=27000)  ←出力ファイル
//SYSIN    DD  *
LIST  OFF
FILE  FILEA                 ←INPUTその1の定義
 AKEY             1  10  A
 AREC             1  30  A
FILE  FILEB                 ←INPUTその2の定義
 BKEY             1  10  A
 BREC             1  30  A
FILE  FILEC                 ←INPUTその3の定義
 CKEY             1  10  A
 CREC             1  30  A
FILE  OUTFL                 ←出力ファイルの定義
 C1               1  30  A
 C2               *  30  A
 C3               *  30  A
 C4               *  10  A
 OUTREC           1 100  A
*
JOB INPUT (FILEA KEY(AKEY) FILEB KEY(BKEY) FILEC KEY(CKEY))
****IF  MATCHED (FILEA FILEB)         ←INPUT1とINPUT2がマッチした時
    IF  MATCHED                       ←全ファイルがマッチした時
        DISPLAY 'MATCH!! ' AKEY
        IF DUPLICATE FILEA            ←INPUT1がn件ある場合
           DISPLAY 'DUP AREC=' AREC
        END-IF
        IF DUPLICATE FILEB            ←INPUT2がn件ある場合
           DISPLAY 'DUP BREC=' BREC
        END-IF
        IF DUPLICATE FILEC            ←INPUT3がn件ある場合
           DISPLAY 'DUP CREC=' CREC
        END-IF
        MOVE AKEY TO C1 FILL '*'      ←AKEYをC1に移送して余った部分に*を充填
        MOVE BKEY TO C2 FILL '#'      ←BKEYをC2に移送して余った部分に#を充填
        MOVE CKEY TO C3 FILL '@'      ←CKEYをC3に移送して余った部分に@を充填
        C4 = C4 XOR C4                ←C4をNULLクリアー
        PUT OUTFL
        DISPLAY HEX OUTREC
    ELSE                              ←どれかがマッチした時                              
       IF  FILEA AND FILEB            ←INPUT1とINPUT2がマッチした時
           DISPLAY 'FILEA AND FILEB=' AREC
           IF DUPLICATE FILEA
              DISPLAY 'DUP AREC=' AREC
           END-IF
           IF DUPLICATE FILEB
              DISPLAY 'DUP BREC=' BREC
           END-IF
       ELSE
           IF  FILEA AND FILEC        ←INPUT1とINPUT3がマッチした時                              
               DISPLAY 'FILEA AND FILEC=' AREC
               IF DUPLICATE FILEA
                  DISPLAY 'DUP AREC=' AREC
               END-IF
               IF DUPLICATE FILEC
                  DISPLAY 'DUP CREC=' CREC
               END-IF
           ELSE
               IF  FILEB AND FILEC    ←INPUT2とINPUT3がマッチした時
                   DISPLAY 'FILEB AND FILEC=' BREC
                   IF DUPLICATE FILEB
                      DISPLAY 'DUP BREC=' BREC
                   END-IF
                   IF DUPLICATE FILEC
                      DISPLAY 'DUP CREC=' CREC
                   END-IF
               ELSE                        ←どれもマッチしなかった場合
                   IF  FILEA               ←INPUT1だけにレコードがある場合
                       DISPLAY 'FILEA=' AREC
                   ELSE
                       IF  FILEB           ←INPUT2だけにレコードがある場合
                           DISPLAY 'FILEB=' BREC
                       ELSE
                           IF  FILEC      ←INPUT3だけにレコードがある場合
                               DISPLAY 'FILEC=' CREC
                           END-IF
                       END-IF
                   END-IF
               END-IF
           END-IF
       END-IF
    END-IF
    DISPLAY '***********************************************'
/*

 

※マッチングの入力ファイル数はマニュアル上はいくつでも可能。しかし但し書として3本以上 のマッチングも可能であるがプログラムの繁雑さを避ける為2本単位を勧めるとの記述があります。


BEFORE PAGE

TOP PAGE