Hi Friends,
i am a begineer in mainframes,i need your suggestion for my query in cobol file handling.
I have two infile -file1 & file2 has sorted records for ENO.
I have ENO,ENAME,EMOB in file1 & ENO1,ELCN,EDOB in file2.
Now i want to compare file1 & file2 based on ENO,the matching recoreds should write in outfile3 along with duplicates and unmatched records in outfile4.
Kindly help me out.
I have written code,but couldnt able to move duplicates in outfile3.Kindly correct me.
ID DIVISION.
PROGRAM-ID. COMPARE.
ENVIRONMENT DIVISION.
INPUT-OUTPUT SECTION.
FILE-CONTROL.
SELECT INFILE1 ASSIGN DD1
ORGANIZATION IS SEQUENTIAL
ACCESS MODE IS SEQUENTIAL
FILE STATUS IS INFL-ST1.
SELECT INFILE2 ASSIGN DD2
ORGANIZATION IS SEQUENTIAL
ACCESS MODE IS SEQUENTIAL
FILE STATUS IS INFL-ST2.
*************************************
SELECT OUTFILE1 ASSIGN DD3
ORGANIZATION IS SEQUENTIAL
ACCESS MODE IS SEQUENTIAL
FILE STATUS IS OUTFL-ST1.
SELECT OUTFILE2 ASSIGN DD4
ORGANIZATION IS SEQUENTIAL
ACCESS MODE IS SEQUENTIAL
FILE STATUS IS OUTFL-ST2.
DATA DIVISION.
FILE SECTION.
FD INFILE1.
01 INREC1.
04 ENO PIC X(04).
04 NAME PIC X(20).
04 EMOB PIC X(10).
04 FILLER PIC X(46).
FD INFILE2.
01 INREC2.
04 ENO1 PIC X(04).
04 ELCN PIC X(05).
04 EDOB PIC X(10).
04 FILLER PIC X(61).
FD OUTFILE1.
01 OUTREC1.
04 ENO2 PIC X(04).
04 NAME2 PIC X(20).
04 EMOB2 PIC X(10).
04 ELCN2 PIC X(05).
04 EDOB2 PIC X(10).
04 FILLER PIC X(31).
FD OUTFILE2.
01 OUTREC2.
04 ENO3 PIC X(04).
04 NAME3 PIC X(20).
04 FILLER PIC X(56).
WORKING-STORAGE SECTION.
01 INFL-ST1 PIC X(2).
88 INFL-OK1 VALUE '00'.
88 END-INFL1 VALUE '10'.
01 INFL-ST2 PIC X(2).
88 INFL-OK2 VALUE '00'.
88 END-INFL2 VALUE '10'.
01 OUTFL-ST1 PIC X(2).
88 OUTFL-OK1 VALUE '00'.
88 END-OUTFL1 VALUE '10'.
01 OUTFL-ST2 PIC X(2).
88 OUTFL-OK2 VALUE '00'.
88 END-OUTFL2 VALUE '10'.
PROCEDURE DIVISION.
000-MAIN.
DISPLAY 'FILE COMPARING STARTS NOW'
PERFORM 100-OPEN-PARA
THRU 100-OPEN-PARA-EXIT
PERFORM 200-PROCESS-PARA
THRU 200-PROCESS-PARA-EXIT
UNTIL END-INFL1 AND END-INFL2
PERFORM 300-CLOSE-PARA
THRU 300-CLOSE-PARA-EXIT
PERFORM 999-STOP-RUN
THRU 999-STOP-RUN-EXIT.
100-OPEN-PARA.
OPEN INPUT INFILE1
IF INFL-OK1
DISPLAY 'INFILE OPEN SUCESSFULLY'
ELSE
DISPLAY 'ERROR OPENING INFILE: ' INFL-ST1
PERFORM 999-STOP-RUN
THRU 999-STOP-RUN-EXIT
END-IF
OPEN INPUT INFILE2
IF INFL-OK2
DISPLAY 'INFILE OPEN SUCESSFULLY'
ELSE
DISPLAY 'ERROR OPENING INFILE: ' INFL-ST2
PERFORM 999-STOP-RUN
THRU 999-STOP-RUN-EXIT
END-IF
*******************************************************
OPEN OUTPUT OUTFILE1
IF OUTFL-OK1
DISPLAY 'OUTFILE OPEN SUCESSFULLY'
ELSE
DISPLAY 'ERROR OPENING OUTFILE1: ' OUTFL-ST1
PERFORM 999-STOP-RUN
THRU 999-STOP-RUN-EXIT
END-IF
OPEN OUTPUT OUTFILE2
IF OUTFL-OK2
DISPLA 'OUTFILE OPEN SUCESSFULLY
ELSE
DISPLAY 'ERROR OPENING OUTFILE2: ' OUTFL-ST2
PERFORM 999-STOP-RUN
THRU 999-STOP-RUN-EXIT
END-IF.
100-OPEN-PARA-EXIT.
EXIT.
200-PROCESS-PARA.
READ INFILE1
IF INFL-OK1
DISPLAY 'INFILE READ SUCESSFULLY'
ELSE
DISPLAY 'ERROR READING INFILE1: ' INFL-ST1
GO TO 200-PROCESS-PARA-EXIT
END-IF
READ INFILE2
IF INF DISPLAY 'INFILE READ SUCESSFULLY'
ELSE
DISPLAY 'ERROR READING INFILE2: ' INFL-ST2
GO TO 200-PROCESS-PARA-EXIT
END-IF
IF ENO = ENO1
MOVE ENO TO ENO2
MOVE NAME TO NAME2
MOVE EMOB TO EMOB2
MOVE ELCN TO ELCN2
MOVE EDOB TO EDOB2
WRITE OUTREC1
EVALUATE OUTFL-ST1
WHEN '00'
CONTINUE
WHEN OTHER
DISPLAY 'ERROR WRITING THE OUTFILE1 ' OUTFL-ST1 L-OK2
GO TO 300-CLOSE-PARA
END-EVALUATE
ELSE
MOVE ENO TO ENO3
MOVE NAME TO NAME3
WRITE OUTREC2
EVALUATE OUTFL-ST2
WHEN '00'
CONTINUE
WHEN OTHER
DISPLAY 'ERROR WRITING THE OUTFILE2 ' OUTFL-ST2
GO TO 300-CLOSE-PARA
END-IF.
200-PROCESS-PARA-EXIT.
EXIT.
300-CLOSE-PARA.
CLOSE INFILE1
IF INFL-OK1
DISPLAY 'INFILE CLOSE SUCESSFULLY'
ELSE
DISPLAY 'ERROR CLOSING INFILE1: ' INFL-ST1
GO TO 300-CLOSE-PARA-EXIT
END-IF
CLOSE INFILE2
IF INFL-OK2
DISPLAY 'INFILE CLOSE SUCESSFULLY'
ELSE
DISPLAY 'ERROR CLOSING INFILE2: ' INFL-ST2
GO TO 300-CLOSE-PARA-EXIT
END-IF
*********************************************************
CLOSE OUTFILE1
IF OUTFL-OK1
DI SPLAY 'INFILE CLOSE SUCESSFULLY'
ELSE
DISPLAY 'ERROR CLOSING INFILE: ' OUTFL-ST1
GO TO 300-CLOSE-PARA-EXIT
END-IF
CLOSE OUTFILE2
IF OUTFL-OK2
DISPLAY 'INFILE CLOSE SUCESSFULLY'
ELSE
DISPLAY 'ERROR CLOSING INFILE: ' OUTFL-ST2
PERFORM 999-STOP-RUN
THRU 999-STOP-RUN-EXIT
END-IF.
300-CLOSE-PARA-EXIT.
EXIT.
999-STOP-RUN.
DISPLAY ' PGM ENDED'
STOP RUN.