MVSFORUMS.com Forum Index MVSFORUMS.com
A Community of and for MVS Professionals
 
 FAQFAQ   SearchSearch   Quick Manuals   RegisterRegister 
 ProfileProfile   Log in to check your private messagesLog in to check your private messages   Log inLog in 

File Comparison

 
Post new topic   Reply to topic   printer-friendly view    MVSFORUMS.com Forum Index -> Utilities
View previous topic :: View next topic  
Author Message
suresh05
Beginner


Joined: 14 Sep 2005
Posts: 18
Topics: 8

PostPosted: Wed Sep 14, 2005 6:27 am    Post subject: File Comparison Reply with quote

I know this can be done by a Program but just curious whether we can use SORT to get the desired results. I don
Back to top
View user's profile Send private message
Phantom
Data Mgmt Moderator
Data Mgmt Moderator


Joined: 07 Jan 2003
Posts: 1056
Topics: 91
Location: The Blue Planet

PostPosted: Wed Sep 14, 2005 7:16 am    Post subject: Reply with quote

Suresh05,

This could be accomplished using Syncsort. But For this I need to know the following.
1. LRECL & RECFM of your input files.
2. Is there any possibility of duplicates (key) in any of the files ?

Thanks,
Phantom
Back to top
View user's profile Send private message
suresh05
Beginner


Joined: 14 Sep 2005
Posts: 18
Topics: 8

PostPosted: Wed Sep 14, 2005 7:25 am    Post subject: Reply with quote

LRECL is 80 & RECFM is FB

key fields will be unique in both the files.
Back to top
View user's profile Send private message
Phantom
Data Mgmt Moderator
Data Mgmt Moderator


Joined: 07 Jan 2003
Posts: 1056
Topics: 91
Location: The Blue Planet

PostPosted: Wed Sep 14, 2005 9:34 am    Post subject: Reply with quote

Suresh05,

There is little problem with your S9(15)V9(03) Comp-3. Syncsort does not support more than 8 digits in Packed Decimal. I tested my code using ZD instead of PD. You may need to tailor the code appropriately.

Code:

//R010   EXEC PGM=SYNCTOOL                                     
//TOOLMSG  DD  SYSOUT=*                                         
//DFSMSG   DD  SYSOUT=*                                         
//INPUT1   DD  *                                               
12345 11111 000000000E 000000000A 000000000F 000000000J         
12345 22222 000000000F 000000000B 000000000G 000000000G         
12340 33333 000000000G 000000000C 000000000H 000000000I         
12340 44444 000000000H 000000000D 000000000I 000000000I         
/*                                                             
//INPUT2   DD  *                                               
000000000A 000000000E 11111 000000000A 000000000A 000000000B   
000000000E 000000000B 44444 000000000B 000000000A 000000000D   
/*                                                             
//TEMP1    DD  DSN=&&T1,DISP=(,PASS)                           
//TEMP2    DD  DSN=&&T2,DISP=(,PASS)                           
//CONCAT   DD  DSN=&&T1,DISP=SHR,VOL=REF=*.TEMP1               
//         DD  DSN=&&T2,DISP=SHR,VOL=REF=*.TEMP2               
//OUTPUT1  DD  DSN=&&O1,DISP=(,PASS)                           
//OUTPUT2  DD  DSN=&&O2,DISP=(,PASS)                           
//OUTCON   DD  DSN=&&O1,DISP=SHR,VOL=REF=*.OUTPUT1         
//         DD  DSN=&&O2,DISP=SHR,VOL=REF=*.OUTPUT2         
//OUTPUT   DD  SYSOUT=*                                   
//TOOLIN   DD  *                                           
  COPY FROM(INPUT1)  TO(TEMP1)  USING(CTL1)               
  COPY FROM(INPUT2)  TO(TEMP2)  USING(CTL2)               
  SORT FROM(CONCAT)             USING(CTL3)               
  COPY FROM(OUTCON)  TO(OUTPUT)                           
/*                                                         
//CTL1CNTL DD  *                                           
  INREC FIELDS=(1,60,       *  COPY FULL DATA *           
                60Z,        *  60 LOW-VALUES  *           
                130:X)      *  BLANK TILL 110 *           
/*                                                         
//CTL2CNTL DD  *                                           
  INREC FIELDS=(6X,         *  6 BLANKS       *           
                23,5,       *  KEY FIELD @ COL 7 *         
                60:X,       *  BLANK TILL 40  *           
                1,10,       *  FIELD 1        *           
                X,                                           
                12,10,      *  FIELD 2        *             
                X,                                           
                29,10,      *  FIELD 4        *             
                X,                                           
                40,10,      *  FIELD 5        *             
                X,                                           
                51,10,      *  FIELD 6        *             
                130:X)      *  BLANK TILL 130 *             
/*                                                           
//CTL3CNTL DD  *                                             
  INREC FIELDS=(1,130,           *  COPY FULL DATA *         
                C'1')            *  SEQ NUM TO FIND MATCH * 
  SORT FIELDS=(7,5,ZD,A)         *  SORT ON KEY FIELD *     
  SUM FIELDS=(61,8,BI,69,2,BI,   *  BINARY SUM ON FIELD1  * 
              72,8,BI,80,2,BI,   *  BINARY SUM ON FIELD2  * 
              83,8,BI,91,2,BI,   *  BINARY SUM ON FIELD4  * 
              94,8,BI,102,2,BI,  *  BINARY SUM ON FIELD5  * 
              105,8,BI,113,2,BI, *  BINARY SUM ON FIELD6  * 
              131,1,ZD)          *  SUM ON SEQ NUMBER     *       
  OUTFIL FNAMES=OUTPUT1,                                           
  INCLUDE=(131,1,CH,EQ,C'2',AND, *  MATCHING RECORDS      *       
           46,10,ZD,LT,0),       *  FILE 1 - FIELD 6 < 0  *       
  OUTREC=(1,12,                                                   
          13,10,ZD,SUB,61,10,ZD,ZD,LENGTH=10,   * F1-3 - F2-1 *   
          X,                                                       
          24,10,ZD,ADD,72,10,ZD,ZD,LENGTH=10,   * F1-4 + F2-2 *   
          X,                                                       
          35,10,                                * F1-5        *   
          X,                                                       
          46,10,ZD,ADD,94,10,ZD,ZD,LENGTH=10)   * F1-6 + F2-5 *   
  OUTFIL FNAMES=OUTPUT2,                                           
  INCLUDE=(131,1,CH,EQ,C'2',AND,        *  MATCHING RECORDS      *
           46,10,ZD,GE,0),              *  FILE 1 - FIELD 6 >= 0 *
  OUTREC=(1,12,                                                   
          13,10,ZD,SUB,61,10,ZD,ZD,LENGTH=10,   * F2-1 - F1-3 *   
          X,                                                       
          24,10,ZD,ADD,72,10,ZD,ZD,LENGTH=10,   * F1-4 + F2-2 *   
          X,                                                       
          35,10,                                * F1-5        *   
          X,                                                       
          46,10,ZD,ADD,105,10,ZD,ZD,LENGTH=10)  * F1-6 + F2-6 *   
/*                                                                 


Output:
Code:

12345 11111 000000000D 000000000F 000000000F 000000000{
12340 44444 000000000C 000000000F 000000000I 000000001C


Hope this helps,

Thanks,
Phantom
Back to top
View user's profile Send private message
kolusu
Site Admin
Site Admin


Joined: 26 Nov 2002
Posts: 12378
Topics: 75
Location: San Jose

PostPosted: Wed Sep 14, 2005 10:16 am    Post subject: Reply with quote

Suresh05,

I assumed that your files has the following layout.

File1 layout:
Code:

01 INPUT1.                               
   05 FIELD-1       PIC S9(15)V9(3) COMP-3   
   05 FIELD-2       PIC 9(5).             
   05 FIELD-3       PIC S9(15)V9(3) COMP-3   
   05 FIELD-4       PIC S9(15)V9(3) COMP-3   
   05 FIELD-5       PIC S9(15)V9(3) COMP-3   
   05 FIELD-6       PIC S9(15)V9(3) COMP-3   
   05 FILLER        PIC X(25).           


File2 layout:
Code:

01 INPUT2.                                       
   05 FIELD-1       PIC S9(15)V9(3) COMP-3         
   05 FIELD-2       PIC S9(15)V9(3) COMP-3         
   05 FIELD-3       PIC 9(5).                   
   05 FIELD-4       PIC S9(15)V9(3) COMP-3         
   05 FIELD-5       PIC S9(15)V9(3) COMP-3         
   05 FIELD-6       PIC S9(15)V9(3) COMP-3         
   05 FILLER        PIC X(25).                   


Syncsort only supports 8 bytes for packed decimal(comp-3) for arthimetic operations.

The following JCL will give you the desired results. you need syncsort for z/os 1.2 for the join function to work. I don't have time to explain as to how the job works.

Code:

//STEP0100 EXEC PGM=SORT                                 
//SYSOUT   DD SYSOUT=*                                   
//SORTJNF1 DD DSN=YOUR INPUT FILE1,                             
//            DISP=SHR                                   
//SORTJNF2 DD DSN=YOUR INPUT FILE2,                             
//            DISP=SHR                                   
//SORTOUT  DD DSN=YOUR DESIRED OUTPUT,
//            DISP=(NEW,CATLG,DELETE),
//            UNIT=SYSDA,
//            SPACE=(CYL,(X,Y),RLSE)
//SYSIN    DD *                                             
  JOINKEYS FILES=F1,FIELDS=(11,5,A)                         
  JOINKEYS FILES=F2,FIELDS=(21,5,A)                         
  REFORMAT FIELDS=(F1:01,10,   $ FILE-1-FIELD1             
                   F1:11,05,   $ FILE-1-FIELD2             
                   F1:16,10,   $ FILE-1-FIELD3             
                   F1:26,10,   $ FILE-1-FIELD4             
                   F1:36,10,   $ FILE-1-FIELD5             
                   F1:46,10,   $ FILE-1-FIELD6             
                   F2:01,10,   $ FILE-2-FIELD1             
                   F2:11,10,   $ FILE-2-FIELD2             
                   F2:36,10,   $ FILE-2-FIELD5             
                   F2:46,10)   $ FILE-2-FIELD6             
  SORT FIELDS=(11,5,CH,A)                                   
  OUTREC FIELDS=(1,75,                                             
                 76:55,1,CHANGE=(10,X'0C',X'0000000000000000000C', 
                                    X'0F',X'0000000000000000000C', 
                                    X'1C',X'0000000000000000000C', 
                                    X'2F',X'0000000000000000000C', 
                                    X'2C',X'0000000000000000000C', 
                                    X'2F',X'0000000000000000000C', 
                                    X'2C',X'0000000000000000000C', 
                                    X'3F',X'0000000000000000000C', 
                                    X'3C',X'0000000000000000000C', 
                                    X'4F',X'0000000000000000000C', 
                                    X'4C',X'0000000000000000000C', 
                                    X'5F',X'0000000000000000000C', 
                                    X'5C',X'0000000000000000000C', 
                                    X'6F',X'0000000000000000000C', 
                                    X'6C',X'0000000000000000000C', 
                                    X'7F',X'0000000000000000000C', 
                                    X'7C',X'0000000000000000000C', 
                                    X'8F',X'0000000000000000000C', 
                                    X'8C',X'0000000000000000000C', 
                                    X'9F',X'0000000000000000000C', 
                                    X'9C',X'0000000000000000000C'),
                                    NOMATCH=(76,10),               
                 86:55,1,CHANGE=(10,X'0D',X'0000000000000000000C', 
                                    X'0B',X'0000000000000000000C', 
                                    X'1D',X'0000000000000000000C', 
                                    X'1B',X'0000000000000000000C', 
                                    X'2D',X'0000000000000000000C', 
                                    X'2B',X'0000000000000000000C', 
                                    X'2D',X'0000000000000000000C', 
                                    X'2B',X'0000000000000000000C', 
                                    X'3D',X'0000000000000000000C', 
                                    X'3B',X'0000000000000000000C', 
                                    X'4D',X'0000000000000000000C', 
                                    X'4B',X'0000000000000000000C', 
                                    X'5D',X'0000000000000000000C', 
                                    X'5B',X'0000000000000000000C', 
                                    X'6D',X'0000000000000000000C', 
                                    X'6B',X'0000000000000000000C', 
                                    X'7D',X'0000000000000000000C', 
                                    X'7B',X'0000000000000000000C', 
                                    X'8D',X'0000000000000000000C', 
                                    X'8B',X'0000000000000000000C', 
                                    X'9D',X'0000000000000000000C', 
                                    X'9B',X'0000000000000000000C'),
                                    NOMATCH=(86,10))               
 OUTFIL OUTREC=(01,15,
                2Z,(18,8,PD,SUB,58,8,PD),PD,LENGTH=8,                     
                2Z,(28,8,PD,ADD,68,8,PD),PD,LENGTH=8,                     
                36,10,                                                     
                2Z,(48,8,PD,ADD,78,8,PD,ADD,88,8,PD),PD,LENGTH=8,
                80:X)
/*


Hope this helps...

Cheers

Kolusu
_________________
Kolusu
www.linkedin.com/in/kolusu
Back to top
View user's profile Send private message Send e-mail Visit poster's website
suresh05
Beginner


Joined: 14 Sep 2005
Posts: 18
Topics: 8

PostPosted: Thu Sep 15, 2005 10:13 am    Post subject: Reply with quote

Thanks Phantom & kolusu
Back to top
View user's profile Send private message
Display posts from previous:   
Post new topic   Reply to topic   printer-friendly view    MVSFORUMS.com Forum Index -> Utilities All times are GMT - 5 Hours
Page 1 of 1

 
Jump to:  
You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum
You cannot vote in polls in this forum


MVSFORUMS
Powered by phpBB © 2001, 2005 phpBB Group