Page 1 of 1

Compare file logic in COBOL

PostPosted: Sun Aug 25, 2019 2:37 am
by nishantsinghal
Hi All,

I want to compare two sorted input files on the basis of key and need all matched and unmatched values in single output file. I have already written the code but my code is not giving expected results if number of records in input file are not same (record count may differ in any of the input file or it could be same also). I searched the forum before posting this query but didnt find any solution. Looking forward to your suggestions/input. Thanks!

Eg:
Input Files (Number of records are not same):
File1
1
2
3
5
7
8

File2
1
2
4
5
6


Expected Output File:
1
2
3
4
5
6
7
8


Code:

FILE SECTION.                          
FD  IN-FILE1.                          
01  IN-FILE1-REC.                      
     10 KEY-FILE1      PIC 9(1).
FD  IN-FILE2.                          
01  IN-FILE2-REC.                      
     10 KEY-FILE2      PIC 9(1).
FD  OUT-FILE3.                          
01  OUT-FILE3-REC.                      
     10 KEY-FILE3      PIC 9(1).

WORKING-STORAGE SECTION.                                
01  WS-TEMP-VAR.                                      
    05  WS-FILE1-EOF-FLG          PIC X(1) VALUE SPACE.
        88 WS-FILE1-SOF           VALUE 'N'.            
        88 WS-FILE1-EOF           VALUE 'Y'.            
    05  WS-FILE2-EOF-FLG          PIC X(1) VALUE SPACE.
        88  WS-FILE2-SOF          VALUE 'N'.            
        88  WS-FILE2-EOF          VALUE 'Y'.            
                                                       
PROCEDURE DIVISION.                                  
                                                     
 0000-BEGIN.                                        
     PERFORM 1000-INIT                              
     PERFORM 2000-PROCESS   THRU 2000-EXIT          
       UNTIL WS-FILE1-EOF OR  WS-FILE2-EOF          
     PERFORM 3000-TERMINATE THRU 3000-EXIT          
     GOBACK.                                        
                                                     
 1000-INIT.                                            
     OPEN INPUT  IN-FILE1                              
                 IN-FILE2                              
     OPEN OUTPUT OUT-FILE3                          
     PERFORM READ-FILE1                                
     PERFORM READ-FILE2.                            
****************************************************
 2000-PROCESS.                                    
      IF KEY-FILE1 = KEY-FILE2                    
          MOVE IN-FILE1-REC TO OUT-FILE3-REC      
          WRITE OUT-FILE3-REC                    
          PERFORM READ-FILE1                      
          PERFORM READ-FILE2                      
      ELSE                                        
                                                 
         IF KEY-FILE1 < KEY-FILE2                
          MOVE IN-FILE1-REC TO OUT-FILE3-REC      
          WRITE OUT-FILE3-REC                    
          PERFORM READ-FILE1                      
          PERFORM WRITE-FILE2                    
                                                 
         ELSE                                    
                                                 
          MOVE IN-FILE2-REC TO OUT-FILE3-REC        
          WRITE OUT-FILE3-REC                        
          PERFORM READ-FILE2                        
          PERFORM WRITE-FILE1                        
        END-IF                                      
      END-IF.                                        
****************************************************
 2000-EXIT.                                          
      EXIT.                                          
****************************************************
 READ-FILE1.                                        
     READ IN-FILE1                                  
        AT END                                      
          DISPLAY 'FILE1 FILE IS EMPTY'              
           SET WS-FILE1-EOF    TO TRUE              
     END-READ.                                                                          
****************************************************
 READ-FILE2.                                        
     READ IN-FILE2                                  
       AT END                                        
         DISPLAY 'FILE2 FILE IS EMPTY'              
         SET WS-FILE2-EOF    TO TRUE                
     END-READ.                                      
****************************************************
 WRITE-FILE1.                                        
       IF WS-FILE2-EOF                              
          MOVE IN-FILE1-REC  TO OUT-FILE3-REC        
          WRITE OUT-FILE3-REC                        
       END-IF.  
****************************************************
 WRITE-FILE2.                                        
       IF WS-FILE1-EOF                              
          MOVE IN-FILE2-REC TO OUT-FILE3-REC        
          WRITE OUT-FILE3-REC                              
       END-IF.                                            
*****************************************************
 3000-TERMINATE.                                          
     CLOSE IN-FILE2                                        
               IN-FILE1                                        
               OUT-FILE3                                      
 3000-EXIT.                                                
     EXIT.                                            
 

Re: Compare file logic in COBOL

PostPosted: Sun Aug 25, 2019 5:14 am
by enrico-sorichetti

Re: Compare file logic in COBOL

PostPosted: Sun Aug 25, 2019 5:15 am
by enrico-sorichetti