IDENTIFICATION DIVISION. PROGRAM-ID. MATCH001. AUTHOR. JIRO SUZUKI. *------------------------------------------------------------ * マッチング(1:N) *------------------------------------------------------------ ENVIRONMENT DIVISION. INPUT-OUTPUT SECTION. FILE-CONTROL. SELECT IN01 ASSIGN TO IN01NAME ACCESS MODE IS SEQUENTIAL. SELECT IN02 ASSIGN TO IN02NAME ACCESS MODE IS SEQUENTIAL. SELECT OUT1 ASSIGN TO OUT1NAME ACCESS MODE IS SEQUENTIAL. DATA DIVISION. FILE SECTION. FD IN01. COPY I-SECTION. FD IN02. COPY I-EMPLOYEE. FD OUT1. COPY O-EMPLOYEELIST. WORKING-STORAGE SECTION. 01 IN01NAME. 03 PIC X(16) VALUE "/HOME/OWNER/DAT/". 03 NAME PIC X(12) VALUE "MATCH001IN01". 03 PIC X(04) VALUE ".DAT". 01 IN02NAME. 03 PIC X(16) VALUE "/HOME/OWNER/DAT/". 03 NAME PIC X(12) VALUE "MATCH001IN02". 03 PIC X(04) VALUE ".DAT". 01 OUT1NAME. 03 PIC X(16) VALUE "/HOME/OWNER/DAT/". 03 NAME PIC X(12) VALUE "MATCH001OUT1". 03 PIC X(04) VALUE ".DAT". 01 CNS-AREA. 03 CNS-INIT-MSG. 05 PIC X(10) VALUE "----- PGM=". 05 PIC X(08) VALUE "MATCH001". 05 PIC X(11) VALUE "START -----". 03 CNS-TERM-MSG. 05 PIC X(10) VALUE "----- PGM=". 05 PIC X(08) VALUE "MATCH001". 05 PIC X(11) VALUE "END -----". 01 CNT-AREA. 03 CNT-IN01 PIC 9(12) VALUE ZERO. 03 CNT-IN02 PIC 9(12) VALUE ZERO. 03 CNT-OUT1 PIC 9(12) VALUE ZERO. 01 WORK-AREA. 03 W-MST-KEY PIC X(06). 03 W-TRN-KEY PIC X(06). *------------------------------------------------------------ PROCEDURE DIVISION. MAIN SECTION. *>全体処理 PERFORM INIT-PROC THRU INIT-EXIT. PERFORM MAIN-PROC THRU MAIN-EXIT. PERFORM TERM-PROC THRU TERM-EXIT. STOP RUN. *------------------------------------------------------------ INIT-PROC. *>初期処理 DISPLAY CNS-INIT-MSG. OPEN INPUT IN01 IN02 OUTPUT OUT1. INIT-EXIT. *------------------------------------------------------------ MAIN-PROC. *>主処理 PERFORM READ-IN01. PERFORM READ-IN02. PERFORM UNTIL ( W-MST-KEY = HIGH-VALUE ) AND ( W-TRN-KEY = HIGH-VALUE ) EVALUATE TRUE WHEN W-MST-KEY < W-TRN-KEY PERFORM MST-ONLY WHEN W-MST-KEY = W-TRN-KEY PERFORM MATCHING-PROC WHEN W-MST-KEY > W-TRN-KEY PERFORM TRN-ONLY END-EVALUATE END-PERFORM. MAIN-EXIT. *------------------------------------------------------------ TERM-PROC. *>終了処理 CLOSE IN01 IN02 OUT1. DISPLAY "IN01=" CNT-IN01. DISPLAY "IN02=" CNT-IN02. DISPLAY "OUT1=" CNT-OUT1. DISPLAY CNS-TERM-MSG. TERM-EXIT. *------------------------------------------------------------ MATCHING-PROC. *>マッチング処理 INITIALIZE O-EMPLOYEELIST. MOVE SPACE TO O-EMPLOYEELIST. * MOVE I-EMPLOYEEID OF I-EMPLOYEE TO O-EMPLOYEEID. MOVE I-SECTIONID OF I-EMPLOYEE TO O-SECTIONID. MOVE I-EMPNAMEKANA OF I-EMPLOYEE TO O-EMPNAMEKANA. MOVE I-EMPNAMEKANJI OF I-EMPLOYEE TO O-EMPNAMEKANJI. MOVE I-SECTIONNAMEKANA OF I-SECTION TO O-SECTIONNAMEKANA. MOVE I-SECTIONNAMEKANJI OF I-SECTION TO O-SECTIONNAMEKANJI. PERFORM WRITE-OUT1. PERFORM READ-IN02. *------------------------------------------------------------ MST-ONLY. *>マスターのみの処理 PERFORM READ-IN01. *------------------------------------------------------------ TRN-ONLY. *>トランのみの処理 INITIALIZE O-EMPLOYEELIST. MOVE SPACE TO O-EMPLOYEELIST. * MOVE I-EMPLOYEEID OF I-EMPLOYEE TO O-EMPLOYEEID. MOVE I-SECTIONID OF I-EMPLOYEE TO O-SECTIONID. MOVE I-EMPNAMEKANA OF I-EMPLOYEE TO O-EMPNAMEKANA. MOVE I-EMPNAMEKANJI OF I-EMPLOYEE TO O-EMPNAMEKANJI. PERFORM WRITE-OUT1. PERFORM READ-IN02. *------------------------------------------------------------ READ-IN01. *>IN01読込処理 READ IN01 INTO I-SECTION AT END MOVE HIGH-VALUE TO W-MST-KEY NOT AT END MOVE I-SECTIONID OF I-SECTION TO W-MST-KEY ADD 1 TO CNT-IN01 END-READ. *------------------------------------------------------------ READ-IN02. *>IN02読込処理 READ IN02 INTO I-EMPLOYEE AT END MOVE HIGH-VALUE TO W-TRN-KEY NOT AT END MOVE I-SECTIONID OF I-EMPLOYEE TO W-TRN-KEY ADD 1 TO CNT-IN02 END-READ. *------------------------------------------------------------ WRITE-OUT1. *>OUT1書込処理 WRITE O-EMPLOYEELIST. ADD 1 TO CNT-OUT1.