Compare file logic in COBOL



Support for OS/VS COBOL, VS COBOL II, COBOL for OS/390 & VM and Enterprise COBOL for z/OS

Compare file logic in COBOL

Postby nishantsinghal » Sun Aug 25, 2019 2:37 am

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.                                            
 
nishantsinghal
 
Posts: 11
Joined: Tue Oct 06, 2009 8:09 pm
Has thanked: 1 time
Been thanked: 0 time

Re: Compare file logic in COBOL

Postby enrico-sorichetti » Sun Aug 25, 2019 5:14 am

cheers
enrico
When I tell somebody to RTFM or STFW I usually have the page open in another tab/window of my browser,
so that I am sure that the information requested can be reached with a very small effort
enrico-sorichetti
Global moderator
 
Posts: 2994
Joined: Fri Apr 18, 2008 11:25 pm
Has thanked: 0 time
Been thanked: 164 times

Re: Compare file logic in COBOL

Postby enrico-sorichetti » Sun Aug 25, 2019 5:15 am

cheers
enrico
When I tell somebody to RTFM or STFW I usually have the page open in another tab/window of my browser,
so that I am sure that the information requested can be reached with a very small effort
enrico-sorichetti
Global moderator
 
Posts: 2994
Joined: Fri Apr 18, 2008 11:25 pm
Has thanked: 0 time
Been thanked: 164 times


Return to IBM Cobol

 


  • Related topics
    Replies
    Views
    Last post