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 

Comparing Old and New file

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


Joined: 21 Oct 2003
Posts: 70
Topics: 25

PostPosted: Wed Aug 12, 2009 7:17 pm    Post subject: Comparing Old and New file Reply with quote

Hi Friends,
I have 2 files old and an new file of LRECL=80, I have to compare these two files and create 2 output files where one file will have all the changes and the other file will have records that didn't changed.

Code:

FILES ARE SORTED BY 2 KEYS - FIELD1 - (POSITION 1 TO 26) & FIELD2 - (POSITION 30 TO 39)

OLD FILE:-
----+----1----+----2----+----3----+----4----+----5----+----6----+----7----+----8
********************************* Top of Data **********************************
AAAAAAAAAAAAAAAAAAAAAAA100   1000000000 BBBBBBBBBBBBBBBBBBBBBBBBBBBBBB         
BBBBBBBBBBBBBBBBBBBBBBB100   1000000000 CCCCCCCCCCCCCCCCCCCCCCCCCCCCCC         
CCCCCCCCCCCCCCCCCCCCCCC100   2000000000 DDDDDDDDDDDDDDDDDDDDDDDDDDDDDD         
CCCCCCCCCCCCCCCCCCCCCCC200   3000000000 DDDDDDDDDDDDDDDDDDDDDDDDDDDDDD         
FFFFFFFFFFFFFFFFFFFFFFF100   1000000000 111111111111111111111111111111
GGGGGGGGGGGGGGGGGGGGGGG200   1000000000 111111111111111111111111111111
******************************** Bottom of Data ********************************


NEW FILE:-
----+----1----+----2----+----3----+----4----+----5----+----6----+----7----+----8
********************************* Top of Data **********************************
AAAAAAAAAAAAAAAAAAAAAAA100   1000000000 BBBBBBBBBBBBBBBBBBBBBBBBBBBBBB         
BBBBBBBBBBBBBBBBBBBBBBB100   3000000000 CCCCCCCCCCCCCCCCCCCCCCCCCCCCCC         
CCCCCCCCCCCCCCCCCCCCCCC100   1000000000 DDDDDDDDDDDDDDDDDDDDDDDDDDDDDD         
CCCCCCCCCCCCCCCCCCCCCCC200   4000000000 DDDDDDDDDDDDDDDDDDDDDDDDDDDDDD         
DDDDDDDDDDDDDDDDDDDDDDD100   1000000000 EEEEEEEEEEEEEEEEEEEEEEEEEEEEEE         
EEEEEEEEEEEEEEEEEEEEEEE100   1000000000 FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF         
FFFFFFFFFFFFFFFFFFFFFFF100   1000000000 222222222222222222222222222222
GGGGGGGGGGGGGGGGGGGGGGG200   1000000000 222222222222222222222222222222
******************************** Bottom of Data ********************************



Output:-
WE NEED 2 FILES, ONE FILE WITH ALL THE CHANGES AND OTHER FILE WITH UNCHANGED RECORDS


AFTER COMPARING THE PREVIOUS AND CURRENT FILES, POSTION 28 - INDICATES IF THE RECORD WAS:-
 'A' - ADDED -  IF THE NEW KEYS (KEYS ARE FIELD1 & FIELD2) HAS BEEN ADDED
 'D' - DELETED - IF THE KEYS (KEYS ARE FIELD1 & FIELD2) HAVE BEEN DELETED
 'C' - CHANGED - GET THE NEW RECORD FROM THE NEW FILE IF WE FIND CHANGES BETWEEN '41 THRU 80 COLUMNS'

FINALLY THIS FILE WILL BE SORTED BY FIELD1 AND FIELD2


FILE WITH CHANGES:-

----+----1----+----2----+----3----+----4----+----5----+----6----+----7----+----8
********************************* Top of Data **********************************
BBBBBBBBBBBBBBBBBBBBBBB100 D 1000000000 CCCCCCCCCCCCCCCCCCCCCCCCCCCCCC         
BBBBBBBBBBBBBBBBBBBBBBB100 A 3000000000 CCCCCCCCCCCCCCCCCCCCCCCCCCCCCC         
CCCCCCCCCCCCCCCCCCCCCCC100 A 1000000000 DDDDDDDDDDDDDDDDDDDDDDDDDDDDDD         
CCCCCCCCCCCCCCCCCCCCCCC100 D 2000000000 DDDDDDDDDDDDDDDDDDDDDDDDDDDDDD         
CCCCCCCCCCCCCCCCCCCCCCC200 D 3000000000 DDDDDDDDDDDDDDDDDDDDDDDDDDDDDD         
CCCCCCCCCCCCCCCCCCCCCCC200 A 4000000000 DDDDDDDDDDDDDDDDDDDDDDDDDDDDDD         
DDDDDDDDDDDDDDDDDDDDDDD100 A 1000000000 EEEEEEEEEEEEEEEEEEEEEEEEEEEEEE         
EEEEEEEEEEEEEEEEEEEEEEE100 A 1000000000 FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF         
FFFFFFFFFFFFFFFFFFFFFFF100 C 1000000000 222222222222222222222222222222
GGGGGGGGGGGGGGGGGGGGGGG200 C 1000000000 222222222222222222222222222222
******************************** Bottom of Data ********************************

FILE WITHOUT CHANGES:-

----+----1----+----2----+----3----+----4----+----5----+----6----+----7----+----8
********************************* Top of Data **********************************
AAAAAAAAAAAAAAAAAAAAAAA100   1000000000 BBBBBBBBBBBBBBBBBBBBBBBBBBBBBB         
******************************** Bottom of Data ********************************


Kindly appreciate your help

Thanks for your help in advance,
Lal
Back to top
View user's profile Send private message
lal
Beginner


Joined: 21 Oct 2003
Posts: 70
Topics: 25

PostPosted: Wed Aug 12, 2009 7:19 pm    Post subject: Reply with quote

Hi Friends,
I have cobol program which does this, but want an SORT solution for this.

Thanks,
Lal
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 Aug 12, 2009 7:54 pm    Post subject: Reply with quote

lal,

The folllowing DFSORT JCL will give you the desired results. We concatenate a single record with HDR in the 1st 3 bytes before each file so that we can use that as a string to identify the record as to which file it belongs to.

Code:

//STEP0100 EXEC PGM=SORT   
//SYSOUT   DD SYSOUT=*     
//SORTIN   DD *             
HDR                         
//         DD DSN=your old file,DISP=SHR
//         DD *   
HDR               
//         DD DSN=your new file,DISP=SHR
//OUT1     DD SYSOUT=*                                           
//OUT2     DD SYSOUT=*                                           
//SORTOUT  DD SYSOUT=*                                           
//SYSIN    DD *                                                   
  INREC IFTHEN=(WHEN=INIT,OVERLAY=(81:40Z)),                     
  IFTHEN=(WHEN=GROUP,BEGIN=(1,3,CH,EQ,C'HDR'),PUSH=(121:ID=1)),   
  IFTHEN=(WHEN=(121,1,ZD,EQ,2),OVERLAY=(81:41,40))               

  SORT FIELDS=(1,26,CH,A,30,10,CH,A),EQUALS                       
  SUM FIELDS=(81,8,BI,89,8,BI,97,8,BI,105,8,BI,113,8,BI,121,1,ZD)
                                                                 
  OUTREC IFOUTLEN=80,IFTHEN=(WHEN=INIT,OVERLAY=(28:X)),           
  IFTHEN=(WHEN=(121,1,ZD,EQ,3,AND,41,40,CH,NE,81,40,CH),         
  OVERLAY=(28:C'C')),                                             
  IFTHEN=(WHEN=(121,1,ZD,EQ,1),OVERLAY=(28:C'D')),               
  IFTHEN=(WHEN=(121,1,ZD,EQ,2),OVERLAY=(28:C'A'))                 
                                                                 
  OUTFIL FNAMES=OUT1,                                             
  INCLUDE=(28,1,CH,EQ,C' ',AND,1,3,CH,NE,C'HDR')                 
                                                                 
  OUTFIL FNAMES=OUT2,                                             
  INCLUDE=(28,1,SS,EQ,C'A,C,D',AND,1,3,CH,NE,C'HDR')             
/*                                                               


out1 output is

Code:

AAAAAAAAAAAAAAAAAAAAAAA100   1000000000 BBBBBBBBBBBBBBBBBBBBBBBBBBBBBB


out2 output is

Code:

BBBBBBBBBBBBBBBBBBBBBBB100 D 1000000000 CCCCCCCCCCCCCCCCCCCCCCCCCCCCCC
BBBBBBBBBBBBBBBBBBBBBBB100 A 3000000000 CCCCCCCCCCCCCCCCCCCCCCCCCCCCCC
CCCCCCCCCCCCCCCCCCCCCCC100 A 1000000000 DDDDDDDDDDDDDDDDDDDDDDDDDDDDDD
CCCCCCCCCCCCCCCCCCCCCCC100 D 2000000000 DDDDDDDDDDDDDDDDDDDDDDDDDDDDDD
CCCCCCCCCCCCCCCCCCCCCCC200 D 3000000000 DDDDDDDDDDDDDDDDDDDDDDDDDDDDDD
CCCCCCCCCCCCCCCCCCCCCCC200 A 4000000000 DDDDDDDDDDDDDDDDDDDDDDDDDDDDDD
DDDDDDDDDDDDDDDDDDDDDDD100 A 1000000000 EEEEEEEEEEEEEEEEEEEEEEEEEEEEEE
EEEEEEEEEEEEEEEEEEEEEEE100 A 1000000000 FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFF100 C 1000000000 111111111111111111111111111111
GGGGGGGGGGGGGGGGGGGGGGG200 C 1000000000 111111111111111111111111111111

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


Joined: 21 Oct 2003
Posts: 70
Topics: 25

PostPosted: Thu Aug 13, 2009 10:19 am    Post subject: Reply with quote

Hi Kolusu,
Thank you very much for the reply, I tried your JCL, but I am getting the following error, I am not sure what it is not liking in the JCL

Code:

SYSIN :                                                                       
  INREC IFTHEN=(WHEN=INIT,OVERLAY=(81:40Z)),                                 
       *                                                                     
  IFTHEN=(WHEN=GROUP,BEGIN=(1,3,CH,EQ,C'HDR'),PUSH=(121:ID=1)),               
  IFTHEN=(WHEN=(121,1,ZD,EQ,2),OVERLAY=(81:41,40))                           
                                                                             
  SORT FIELDS=(1,26,CH,A,30,10,CH,A),EQUALS                                   
  SUM FIELDS=(81,8,BI,89,8,BI,97,8,BI,105,8,BI,113,8,BI,121,1,ZD)             
                                                                             
  OUTREC IFOUTLEN=80,IFTHEN=(WHEN=INIT,OVERLAY=(28:X)),                       
                             *                                               
  IFTHEN=(WHEN=(121,1,ZD,EQ,3,AND,41,40,CH,NE,81,40,CH),                     
  OVERLAY=(28:C'C')),                                                         
  IFTHEN=(WHEN=(121,1,ZD,EQ,1),OVERLAY=(28:C'D')),                           
  IFTHEN=(WHEN=(121,1,ZD,EQ,2),OVERLAY=(28:C'A'))                             
                                                         
  OUTFIL FNAMES=OUT1,                                     
  INCLUDE=(28,1,CH,EQ,C' ',AND,1,3,CH,NE,C'HDR')         
                                                         
  OUTFIL FNAMES=OUT2,                                     
  INCLUDE=(28,1,SS,EQ,C'A,C,D',AND,1,3,CH,NE,C'HDR')     

WER268A  INREC STATEMENT   : SYNTAX ERROR                 
WER270A  OUTREC STATEMENT  : DUPLICATE PARM FOUND


Thanks,
Lal
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: Thu Aug 13, 2009 10:27 am    Post subject: Reply with quote

Lal,

Your Error messages indicate you are using syncsort. I'm a DFSORT developer. DFSORT and Syncsort are competitive products. I'm happy to answer questions on DFSORT and DFSORT's ICETOOL, but I don't answer questions on Syncsort.
_________________
Kolusu
www.linkedin.com/in/kolusu
Back to top
View user's profile Send private message Send e-mail Visit poster's website
lal
Beginner


Joined: 21 Oct 2003
Posts: 70
Topics: 25

PostPosted: Thu Aug 13, 2009 10:39 am    Post subject: Reply with quote

Hi Kolusu,
Not a problem, I do understand.

Thanks for your help,

Thanks,
Lal
Back to top
View user's profile Send private message
lal
Beginner


Joined: 21 Oct 2003
Posts: 70
Topics: 25

PostPosted: Thu Aug 13, 2009 10:48 am    Post subject: Reply with quote

Hi Kolusu,
Can you please modify your JCL to use ICETOOL instead of SORT. Since many of my JCL's work with INREC IFTHEN with ICETOOL. When I submit these JCL's they will be executed by SYNCTOOL.

So I am just hoping that running your JCL through ICETOOL might fix the issue. I apologize if I am being unwise.

Thanks,
Lal
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: Thu Aug 13, 2009 11:29 am    Post subject: Reply with quote

lal,

Nope Sorry. I am not going to spend any time when you are using a competitive product.
_________________
Kolusu
www.linkedin.com/in/kolusu
Back to top
View user's profile Send private message Send e-mail Visit poster's website
Brian Wood
Beginner


Joined: 14 Jan 2009
Posts: 37
Topics: 0
Location: USA

PostPosted: Thu Aug 13, 2009 4:00 pm    Post subject: Reply with quote

Lal: You advise that you are using SyncSort for z/OS. What release? If you are using SyncSort for z/OS Release 1.2 or Release 1.3 you should easily be able to use SyncSort's JOIN to accomplish this task. What you describe is similar to Example 7 in the SyncSort EXPLOITING JOIN Guide. If you would please identify the release you are using I will work up some sample coding for you when I am back in the office on Friday.
_________________
Brian Wood
SyncSort Mainframe Product Services
201-930-8260
zos_tech@syncsort.com
Back to top
View user's profile Send private message Send e-mail
Brian Wood
Beginner


Joined: 14 Jan 2009
Posts: 37
Topics: 0
Location: USA

PostPosted: Mon Aug 17, 2009 3:12 pm    Post subject: Reply with quote

Lal:

Please try the following SyncSort JOIN code:

Code:
//STEP01 EXEC PGM=SORT                               
//SORTOF1  DD DSN=WWCBRW.NO.CHANGE,                           
//            UNIT=SYSDA,SPACE=(TRK,(1,1)),DISP=(NEW,CATLG),         
//            DCB=(RECFM=FB,BLKSIZE=0)                               
//SORTOF2  DD DSN=WWCBRW.ALL.CHANGE,                           
//            UNIT=SYSDA,SPACE=(TRK,(1,1)),DISP=(NEW,CATLG),         
//            DCB=(RECFM=FB,BLKSIZE=0)                               
//SORTJNF1 DD DSN=WWCBRW.OLD.FILE,DISP=SHR                       
//SORTJNF2 DD DSN=WWCBRW.NEW.FILE,DISP=SHR                       
//SYSOUT DD SYSOUT=*                                                 
//SYSIN  DD *                                                         
 JOINKEYS FILE=F1,FIELDS=(1,26,A,30,10,A)
 JOINKEYS FILE=F2,FIELDS=(1,26,A,30,10,A)                               
 JOIN UNPAIRED                                                         
 REFORMAT FIELDS=(F1:1,80,F2:1,80),FILL=X'FF'                           
 SORT FIELDS=COPY                                                     
 OUTFIL FILES=1,                                                       
  INCLUDE=(1,80,CH,EQ,81,80,CH),                                       
  OUTREC=(1,80)                                                         
 OUTFIL FILES=2,                                                       
  OMIT=(1,80,CH,EQ,81,80,CH),                                           
      IFTHEN=(WHEN=(1,1,CH,EQ,X'FF'),                                   
        BUILD=(1:81,26,27:C' ',28:C'A',29:C' ',110,41),                 
        HIT=NEXT),                                                     
      IFTHEN=(WHEN=(81,1,CH,EQ,X'FF'),                                 
        BUILD=(1:1,26,27:C' ',28:C'D',29:C' ',30,41),                   
        HIT=NEXT),                                                     
      IFTHEN=(WHEN=NONE,                                               
         BUILD=(1:81,26,27:C' ',28:C'C',29:C' ',110,41))

This produced the following results:
Code:
********************************* Top of Data **********************************
AAAAAAAAAAAAAAAAAAAAAAA100   1000000000 BBBBBBBBBBBBBBBBBBBBBBBBBBBBBB         
******************************** Bottom of Data ********************************

********************************* Top of Data **********************************
BBBBBBBBBBBBBBBBBBBBBBB100 D 1000000000 CCCCCCCCCCCCCCCCCCCCCCCCCCCCCC         
BBBBBBBBBBBBBBBBBBBBBBB100 A 3000000000 CCCCCCCCCCCCCCCCCCCCCCCCCCCCCC         
CCCCCCCCCCCCCCCCCCCCCCC100 A 1000000000 DDDDDDDDDDDDDDDDDDDDDDDDDDDDDD         
CCCCCCCCCCCCCCCCCCCCCCC100 D 2000000000 DDDDDDDDDDDDDDDDDDDDDDDDDDDDDD         
CCCCCCCCCCCCCCCCCCCCCCC200 D 3000000000 DDDDDDDDDDDDDDDDDDDDDDDDDDDDDD         
CCCCCCCCCCCCCCCCCCCCCCC200 A 4000000000 DDDDDDDDDDDDDDDDDDDDDDDDDDDDDD         
DDDDDDDDDDDDDDDDDDDDDDD100 A 1000000000 EEEEEEEEEEEEEEEEEEEEEEEEEEEEEE         
EEEEEEEEEEEEEEEEEEEEEEE100 A 1000000000 FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF         
FFFFFFFFFFFFFFFFFFFFFFF100 C 1000000000 222222222222222222222222222222         
GGGGGGGGGGGGGGGGGGGGGGG200 C 1000000000 222222222222222222222222222222         
******************************** Bottom of Data ********************************

Please let me know if you require further assistance with this.
_________________
Brian Wood
SyncSort Mainframe Product Services
201-930-8260
zos_tech@syncsort.com
Back to top
View user's profile Send private message Send e-mail
Brian Wood
Beginner


Joined: 14 Jan 2009
Posts: 37
Topics: 0
Location: USA

PostPosted: Mon Aug 17, 2009 3:51 pm    Post subject: Reply with quote

Lal:
I just noticed that the LRECL I built for the second OUTFIL is only 70 bytes long (your data records appeared to be 70 bytes long); you will probably want to modify my coding example to specify 10 additional blanks (or the value of your choice) at the end of each BUILD statement in the second OUTFIL in order to meet the requirement of a 80-byte file.
_________________
Brian Wood
SyncSort Mainframe Product Services
201-930-8260
zos_tech@syncsort.com
Back to top
View user's profile Send private message Send e-mail
lal
Beginner


Joined: 21 Oct 2003
Posts: 70
Topics: 25

PostPosted: Mon Sep 21, 2009 10:34 am    Post subject: Reply with quote

Thanks Brian Wood for the reply. I didn't notice your reply until today.

Thank you very much,

lal
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