× The internal search function is temporarily non-functional. The current search engine is no longer viable and we are researching alternatives.
As a stop gap measure, we are using Google's custom search engine service.
If you know of an easy to use, open source, search engine ... please contact support@midrange.com.



Here is a CL that I created several years ago.  When you compare 2 source files 
the only printouts that are left are the ones with differences.

/* Begin source */
CMPALLSRC:  PGM        PARM(&NEWFILELIB &OLDFILELIB)               
            DCL        VAR(&NEWFILELIB) TYPE(*CHAR) LEN(20)        
            DCL        VAR(&OLDFILELIB) TYPE(*CHAR) LEN(20)        
                                                                   
            DCL        VAR(&NEWFILE) TYPE(*CHAR) LEN(10)           
            DCL        VAR(&NEWLIB) TYPE(*CHAR) LEN(10)            
            DCL        VAR(&OLDFILE) TYPE(*CHAR) LEN(10)           
            DCL        VAR(&OLDLIB) TYPE(*CHAR) LEN(10)            
                                                                   
            DCL        VAR(&MSGID) TYPE(*CHAR) LEN(7)              
            DCL        VAR(&MSGDTA) TYPE(*CHAR) LEN(512)           
                                                                   
            DCL        VAR(&TYPE) TYPE(*CHAR) LEN(1)               
            DCL        VAR(&PREFIX) TYPE(*CHAR) LEN(3)             
                                                                   
            DCLF       FILE(OLDMBRS)                               
            /* Submit to Batch Queue if Interactive */                          
                             
            RTVJOBA    TYPE(&TYPE)                                 
            IF         COND(&TYPE = '1') THEN(DO)                  
            SBMJOB     CMD(CALL PGM(TS990440C) PARM(&NEWFILELIB +  
                         &OLDFILELIB)) JOB(MASSCOMP) JOBQ(QPGMR)     
            RETURN                                                   
            ENDDO  
                /* Break out file names */                                      
            
            CHGVAR     VAR(&NEWFILE) VALUE(%SST(&NEWFILELIB 1 10))   
            CHGVAR     VAR(&NEWLIB) VALUE(%SST(&NEWFILELIB 11 10))   
                                                                     
            CHGVAR     VAR(&OLDFILE) VALUE(%SST(&OLDFILELIB 1 10))   
            CHGVAR     VAR(&OLDLIB) VALUE(%SST(&OLDFILELIB 11 10))   
                                                                     
            CHKOBJ     OBJ(&NEWLIB) OBJTYPE(*LIB)                    
            CHKOBJ     OBJ(&OLDLIB) OBJTYPE(*LIB)                    
                                                                     
            CHKOBJ     OBJ(&NEWLIB/&NEWFILE) OBJTYPE(*FILE)          
            CHKOBJ     OBJ(&OLDLIB/&OLDFILE) OBJTYPE(*FILE)          
            /* Get All Member names from one file /                             
                            
            DSPFD      FILE(&OLDLIB/&OLDFILE) TYPE(*MBRLIST) +       
                         OUTPUT(*OUTFILE) OUTFILE(OLDMBRS)           
            /* Remove all messages */                                           
              
            RMVMSG     PGMQ(*SAME) CLEAR(*ALL)                       
                                                                     
LOOP:        /* Get member name */                                              
                   
             RCVF                                                             
             MONMSG     MSGID(CPF0000) EXEC(GOTO CMDLBL(SKIP))                
             /* Check existence */                                              
                   
             CHKOBJ     OBJ(&NEWLIB/&NEWFILE) OBJTYPE(*FILE) +                
                          MBR(&MLNAME)                                        
             MONMSG     MSGID(CPF0000) EXEC(DO)                               
             RCVMSG     PGMQ(*SAME) MSGTYPE(*NEXT) MSGKEY(*TOP) +             
                          MSGDTA(&MSGDTA) MSGID(&MSGID)                       
             GOTO       CMDLBL(LOOP)                                          
             ENDDO                                                            
             /* Compare source using proper parameters */                       
                                          
             IF         COND(&MLSEU2 = 'RPGLE' | &MLSEU2 = 'RPGMOD') +        
                          THEN(CMPPFM NEWFILE(&NEWLIB/&NEWFILE) +             
                          NEWMBR(&MLNAME) OLDFILE(&OLDLIB/&OLDFILE) +         
                          OLDMBR(&MLNAME) RPTTYPE(*DETAIL) +             
                          OUTPUT(*PRINT) OPTION(*IGNORECASE *WIDE +      
                          *RPGLESRCCOL *OMTRPGLECMT))                    
             ELSEIF       COND(&MLSEU2 = 'CLLE' | &MLSEU2 = 'CLMOD') +     
                          THEN(CMPPFM NEWFILE(&NEWLIB/&NEWFILE) +        
                          NEWMBR(&MLNAME) OLDFILE(&OLDLIB/&OLDFILE) +    
                          OLDMBR(&MLNAME) RPTTYPE(*DETAIL) +             
                          OUTPUT(*PRINT) OPTION(*IGNORECASE *WIDE +      
                          *OMTCLCMT))                                    
             ELSEIF       COND(&MLSEU2 = 'DSPF' | &MLSEU2 = 'PF' | +       
                          &MLSEU2 = 'LF' | &MLSEU2 = 'PRTF' | +          
                          &MLSEU2 = 'CMD' | &MLSEU2 = 'DSPFCOPY') +      
                          THEN(CMPPFM NEWFILE(&NEWLIB/&NEWFILE) +        
                          NEWMBR(&MLNAME) OLDFILE(&OLDLIB/&OLDFILE) +    
                          OLDMBR(&MLNAME) RPTTYPE(*DETAIL) +             
                          OUTPUT(*PRINT) OPTION(*IGNORECASE *WIDE))      
             ELSEIF       COND(&MLSEU2 = 'CLLE' | &MLSEU2 = 'CLMOD') +    
                          THEN(CMPPFM NEWFILE(&NEWLIB/&NEWFILE) +       
                          NEWMBR(&MLNAME) OLDFILE(&OLDLIB/&OLDFILE) +   
                          OLDMBR(&MLNAME) RPTTYPE(*DETAIL) +            
                          OUTPUT(*PRINT) OPTION(*IGNORECASE *WIDE +     
                         *OMTCLCMT))                                   
            ELSEIF       COND(&MLSEU2 = 'DSPF' | &MLSEU2 = 'PF' | +      
                         &MLSEU2 = 'LF' | &MLSEU2 = 'PRTF' | +         
                         &MLSEU2 = 'CMD' | &MLSEU2 = 'DSPFCOPY') +     
                         THEN(CMPPFM NEWFILE(&NEWLIB/&NEWFILE) +       
                         NEWMBR(&MLNAME) OLDFILE(&OLDLIB/&OLDFILE) +   
                         OLDMBR(&MLNAME) RPTTYPE(*DETAIL) +            
                         OUTPUT(*PRINT) OPTION(*IGNORECASE *WIDE))     
            ELSE       CMD(DO)                                         
            CMPPFM     NEWFILE(&NEWLIB/&NEWFILE) NEWMBR(&MLNAME) +     
                          OLDFILE(&OLDLIB/&OLDFILE) OLDMBR(&MLNAME) + 
                          RPTTYPE(*DETAIL) OUTPUT(*PRINT) +           
                          OPTION(*IGNORECASE *WIDE)                   
                                                                      
            ENDDO                                                    
                /* Check Compare message */                                     
                                 
             RCVMSG     PGMQ(*SAME) MSGTYPE(*NEXT) MSGKEY(*TOP) +     
                          MSGDTA(&MSGDTA) MSGID(&MSGID)     
                /* No differences */          
             IF         COND(&MSGID = 'SPC6001') THEN(DO)   
             DLTSPLF    FILE(QSYSPRT) SPLNBR(*LAST)                   
             RCVMSG     PGMQ(*SAME) MSGTYPE(*NEXT) MSGKEY(*TOP) +     
                          MSGDTA(&MSGDTA) MSGID(&MSGID)               
             GOTO       CMDLBL(LOOP)                                  
             ENDDO                                                    
                /* There are differences - put member name in user data field */
             ELSEIF         COND(&MSGID = 'SPC6002') THEN(DO)             
             CHGSPLFA   FILE(QSYSPRT) SPLNBR(*LAST) USRDTA(&MLNAME)   
             GOTO       CMDLBL(LOOP)                                  
             ENDDO                                                  
             ELSE       CMD(DO)                                     
             CHGSPLFA   FILE(QSYSPRT) SPLNBR(*LAST) USRDTA(&MSGID)  
             RCVMSG     PGMQ(*SAME) MSGTYPE(*NEXT) MSGKEY(*TOP) +   
                          MSGDTA(&MSGDTA) MSGID(&MSGID)             
             GOTO       CMDLBL(LOOP)                                
             ENDDO                                                  
                                                                    
             GOTO LOOP                                  
SKIP:                                                               
ENDPGM                                                              

/* End Source */

I made a few adjustments to the source so there might be some compile errors. 

Marvin



















-----Original Message-----
From: rpg400-l-bounces@xxxxxxxxxxxx [mailto:rpg400-l-bounces@xxxxxxxxxxxx] On 
Behalf Of ganeshkumar.murugesan@xxxxxxxxx
Sent: Tuesday, May 17, 2005 1:57 AM
To: rpg400-l@xxxxxxxxxxxx
Subject: RE: compare source file


Source file is also a Physical file.

You can compare only one member at a time using CMPPFM. I guess you want to 
compare all the members in a source file.

Write a CL program and do a CMPPFM for all the members in the source file.

You can do this as follows,

* Get all the members in the source file using the command DSPFD FILE (&FILNAM) 
TYPE (*MBRLIST) and write the result to an outfile.
* Read this outfile and execute CMPPFM for each member.

Guess this won't take you much time.

Thanks,
Ganesh

-----Original Message-----
From: rpg400-l-bounces@xxxxxxxxxxxx [mailto:rpg400-l-bounces@xxxxxxxxxxxx] On 
Behalf Of Tomasz Chojecki
Sent: Tuesday, May 17, 2005 2:12 PM
To: RPG programming on the AS400 / iSeries
Subject: compare source file

Hello Everyone,

Is there any function to compare two source files? I already tried to compare 
with CMPPFM but its comparing PF File.

TIA

 

Załączniki:
  1) <none>


--
Pozdrowienia/Best Regards,
 Tomasz Chojecki                   mailto:tomasz.chojecki@xxxxxxxxxx

KIA Motors Polska Sp. z o.o.
IT Department

Phone No: +48 (prefix) 22 546 40 00
Fax No:   +48 (prefix) 22 546 40 40
Web site: http://www.kia.com.pl

--
This is the RPG programming on the AS400 / iSeries (RPG400-L) mailing list
To post a message email: RPG400-L@xxxxxxxxxxxx
To subscribe, unsubscribe, or change list options,
visit: http://lists.midrange.com/mailman/listinfo/rpg400-l
or email: RPG400-L-request@xxxxxxxxxxxx
Before posting, please take a moment to review the archives
at http://archive.midrange.com/rpg400-l.



Confidentiality Notice

The information contained in this electronic message and any attachments to 
this message are intended
for the exclusive use of the addressee(s) and may contain confidential or 
privileged information. If
you are not the intended recipient, please notify the sender at Wipro or 
Mailadmin@xxxxxxxxx immediately
and destroy all copies of this message and any attachments.

-- 
This is the RPG programming on the AS400 / iSeries (RPG400-L) mailing list
To post a message email: RPG400-L@xxxxxxxxxxxx
To subscribe, unsubscribe, or change list options,
visit: http://lists.midrange.com/mailman/listinfo/rpg400-l
or email: RPG400-L-request@xxxxxxxxxxxx
Before posting, please take a moment to review the archives
at http://archive.midrange.com/rpg400-l.




As an Amazon Associate we earn from qualifying purchases.

This thread ...


Follow On AppleNews
Return to Archive home page | Return to MIDRANGE.COM home page

This mailing list archive is Copyright 1997-2024 by midrange.com and David Gibbs as a compilation work. Use of the archive is restricted to research of a business or technical nature. Any other uses are prohibited. Full details are available on our policy page. If you have questions about this, please contact [javascript protected email address].

Operating expenses for this site are earned using the Amazon Associate program and Google Adsense.