Sync sort joining records



Support for NetApp SyncSort for z/OS, Visual SyncSort, SYNCINIT, SYNCLIST and SYNCTOOL

Sync sort joining records

Postby joenazi » Sun Sep 20, 2009 11:51 pm

Hi,

Not sure how my previous 2 posts disappeared.
I have a requirement as below, whereby the first and second record in file1 should be joined into one record, the third
and fourth record into another record and so on, there is no particular key, file1 contains even number of records
so that pairs can be formed. So if there are 1000 records the output should have 500 records in total.
Example:
file1
James Burn
programmer
Jack Tingley
accountant

Result in output file2 should be like
James Burn programmer
Jack Tingley accountant

Thanks in Advance
joenazi
 
Posts: 5
Joined: Sun Sep 20, 2009 10:13 am
Has thanked: 0 time
Been thanked: 0 time

Re: sync sort help - previous question disappeared !!

Postby lal » Mon Sep 21, 2009 8:56 pm

Hi,
This should resolve your problem, here I am assuming that your file is 80 bytes in length and your input data fills for first 15 bytes in each record

//STEP010 EXEC PGM=SORT                                     
//SYSOUT   DD SYSOUT=*                                       
//SORTIN   DD *                                               
JAMES BURN                                                   
PROGRAMMER                                                   
JACK TINGLEY                                                 
ACCOUNTANT                                                   
/*                                                           
//SORTOUT DD DSN=OUTPUT.DATASET1,                         
//           DISP=(NEW,CATLG,DELETE),                         
//           UNIT=XXXXX,                                     
//           SPACE=(CYL,(2,1),RLSE),                         
//           DCB=(RECFM=FB,LRECL=80)                 
//SYSIN    DD *                                               
 SORT FIELDS=COPY                                             
 OUTFIL OUTREC=(1,15,SEQNUM,5,ZD,60X)                           
//*                                                             
//STEP020 EXEC PGM=SORT                                         
//SYSOUT   DD SYSOUT=*                                           
//SORTIN   DD DSN=OUTPUT.DATASET1,DISP=SHR                   
//F1      DD DSN=OUTPUT.DATASET2,                             
//           DISP=(NEW,CATLG,DELETE),                           
//           UNIT=XXXXX,                                         
//           SPACE=(CYL,(2,1),RLSE),                             
//           DCB=(BLKSIZE=0,RECFM=FB,LRECL=80)         
//F2      DD DSN=OUTPUT.DATASET3,                             
//           DISP=(NEW,CATLG,DELETE),                           
//           UNIT=XXXXX,                                         
//           SPACE=(CYL,(2,1),RLSE),                             
//           DCB=(BLKSIZE=0,RECFM=FB,LRECL=80)         
//SYSIN    DD *                                                 
 SORT FIELDS=COPY                                                   
 OUTFIL FNAMES=F1,INCLUDE=(20,1,CH,EQ,C'1',OR,20,1,CH,EQ,C'3',OR,   
                           20,1,CH,EQ,C'5',OR,20,1,CH,EQ,C'7',OR,   
                           20,1,CH,EQ,C'9'),                       
        OUTREC=(1,15,SEQNUM,5,ZD,60X)                               
 OUTFIL FNAMES=F2,INCLUDE=(20,1,CH,EQ,C'2',OR,20,1,CH,EQ,C'4',OR,   
                           20,1,CH,EQ,C'6',OR,20,1,CH,EQ,C'8',OR,   
                           20,1,CH,EQ,C'0'),                       
        OUTREC=(1,15,SEQNUM,5,ZD,60X)                               
//*                                                                 
//STEP030 EXEC PGM=SORT                                           
//SYSOUT   DD SYSOUT=*                                             
//SORTJNF1 DD DSN=OUTPUT.DATASET2,DISP=SHR                       
//SORTJNF2 DD DSN=OUTPUT.DATASET3,DISP=SHR                       
//F4      DD DSN=OUTPUT.DATASET4,                               
//           DISP=(NEW,CATLG,DELETE),                               
//           UNIT=XXXXX,                                           
//           SPACE=(CYL,(2,1),RLSE),                               
//           DCB=(BLKSIZE=0,RECFM=FB,LRECL=80)             
//SYSIN    DD *                                                     
  JOINKEYS FILE=F1,FIELDS=(16,5,A)                                   
  JOINKEYS FILE=F2,FIELDS=(16,5,A)                                   
  REFORMAT FIELDS=(F1:1,15,F2:1,15)                                 
  SORT FIELDS=COPY                                                   
  OUTFIL FNAMES=F4,BUILD=(1,30,50X)                                 
//*                                                                 


Thanks,
lal
lal
 
Posts: 24
Joined: Thu Aug 13, 2009 10:06 pm
Has thanked: 0 time
Been thanked: 0 time

Re: sync sort help - previous question disappeared !!

Postby arcvns » Tue Sep 22, 2009 8:24 pm

joenazi ,

The below SyncSort job does what you asked for.
//STEP01   EXEC PGM=SORT                                 
//SYSOUT   DD SYSOUT=*                                   
//SORTIN   DD *                                         
James Burn                                               
programmer                                               
Jack Tingley                                             
accountant                                               
/*                                                       
//SORTOUT  DD SYSOUT=*                                   
//*                                                     
//SYSIN    DD *                                         
 INREC IFTHEN=(WHEN=GROUP,RECORDS=2,PUSH=(81:SEQ=1,1,15))
 SORT FIELDS=COPY                                       
 OUTFIL INCLUDE=(81,1,ZD,EQ,2),BUILD=(82,15,1,15) 
SORTOUT
James Burn     programmer
Jack Tingley   accountant
Arun
User avatar
arcvns
 
Posts: 55
Joined: Sat Feb 28, 2009 12:36 am
Location: India
Has thanked: 0 time
Been thanked: 0 time

Re: sync sort help - previous question disappeared !!

Postby arcvns » Tue Sep 22, 2009 8:59 pm

I am in a good mood today and have lot of free time :D

joenazi ,

If you dont have the latest SyncSort version (SyncSort 1.3.2) which supports the 'WHEN=GROUP' function, you can either go for a 2-step JOIN solution or a SYNCTOOL SPLICE as shown below.

SYNCTOOL SPLICE
//STEP01   EXEC PGM=SYNCTOOL                                   
//TOOLMSG  DD SYSOUT=*                                         
//DFSMSG   DD SYSOUT=*                                         
//OUT      DD SYSOUT=*                                         
//IN       DD *                                                 
James Burn                                                     
programmer                                                     
Jack Tingley                                                   
accountant                                                     
/*                                                             
//*                                                             
//TOOLIN   DD *                                                 
 SPLICE FROM(IN) TO(OUT) ON(81,8,CH) WITH(89,15) USING(CTL1)   
//CTL1CNTL DD *                                                 
 INREC IFTHEN=(WHEN=INIT,                                       
       OVERLAY=(81:SEQNUM,8,ZD,89:81,8,ZD,MOD,+2,M11,LENGTH=1)),
       IFTHEN=(WHEN=(89,1,ZD,EQ,0),                             
       OVERLAY=(81:81,8,ZD,SUB,+1,M11,LENGTH=8,1,15))           
 OUTFIL BUILD=(1,15,89,15)                                     
//* 
SYNCSORT JOIN
//STEP01   EXEC PGM=SORT                                       
//SYSOUT   DD SYSOUT=*                                         
//SORTIN   DD *                                                 
James Burn                                                     
programmer                                                     
Jack Tingley                                                   
accountant                                                     
/*                                                             
//T1       DD DSN=&&T1,DISP=(,PASS)                             
//T2       DD DSN=&&T1,DISP=(,PASS)                             
//*                                                             
//SYSIN    DD *                                                 
 INREC IFTHEN=(WHEN=INIT,                                       
       OVERLAY=(81:SEQNUM,8,ZD,89:81,8,ZD,MOD,+2,M11,LENGTH=1)),
       IFTHEN=(WHEN=(89,1,ZD,EQ,0),                             
       OVERLAY=(81:81,8,ZD,SUB,+1,M11,LENGTH=8))               
 SORT FIELDS=COPY                                               
 OUTFIL FNAMES=T1,INCLUDE=(89,1,ZD,EQ,1),BUILD=(1,88)           
 OUTFIL FNAMES=T2,SAVE,BUILD=(1,88)                             
//*                                                             
//STEP02   EXEC PGM=SORT                 
//SYSOUT   DD SYSOUT=*                   
//SORTOUT  DD SYSOUT=*                   
//SORTJNF1 DD DSN=&&T1,DISP=(OLD,PASS)   
//SORTJNF2 DD DSN=&&T1,DISP=(OLD,PASS)   
//SYSIN    DD *                         
 JOINKEYS FILE=F1,FIELDS=(81,8,A)       
 JOINKEYS FILE=F2,FIELDS=(81,8,A)       
 REFORMAT FIELDS=(F1:1,15,F2:1,15)       
 SORT FIELDS=COPY
Arun
User avatar
arcvns
 
Posts: 55
Joined: Sat Feb 28, 2009 12:36 am
Location: India
Has thanked: 0 time
Been thanked: 0 time

Thanks a lot !! Arun & Lal

Postby joenazi » Wed Sep 23, 2009 12:21 am

Hi Arun and Lal,


First of all thanks for taking the trouble in finding a solution for the requirement.

lal, your solution will work for say 10 records but will not work (will be tedious) for an input file where the number of records are dynamic specially if they a huge in numbers, sorry that my question did not imply that, but really appreciate
you trying to find a solution.

Arun - I used the SPLICE, it worked like a bullet !!! exactly what I needed, you the man.

Once again, Thanks Arun and Lal and all others on this forum including Admins who spend their precious time in answering and helping people with solutions.

Cheers
Joe
joenazi
 
Posts: 5
Joined: Sun Sep 20, 2009 10:13 am
Has thanked: 0 time
Been thanked: 0 time

Re: sync sort help - previous question disappeared !!

Postby lal » Wed Sep 23, 2009 1:16 am

Hi Joe,
You're welcome. Well, I disagree with your statement
lal, your solution will work for say 10 records but will not work (will be tedious) for an input file where the number of records are dynamic specially if they a huge in numbers


The JCL should work for input records (in this case upto 99999) but depending upon the number of input records you can increase SEQNUM.

Thanks,
lal
lal
 
Posts: 24
Joined: Thu Aug 13, 2009 10:06 pm
Has thanked: 0 time
Been thanked: 0 time

Re: sync sort help - previous question disappeared !!

Postby joenazi » Wed Sep 23, 2009 5:54 am

I am so sorry Lal .... you are correct, please disregard my previous comment.

Reading your code now I fully understand your solution

(excellento mundo)

Sincerely
Thanks
joe
joenazi
 
Posts: 5
Joined: Sun Sep 20, 2009 10:13 am
Has thanked: 0 time
Been thanked: 0 time

Re: sync sort help - previous question disappeared !!

Postby arcvns » Wed Sep 23, 2009 6:56 am

Arun - I used the SPLICE, it worked like a bullet !!! exactly what I needed, you the man.
Joe,

Glad that it helped. :)
Arun
User avatar
arcvns
 
Posts: 55
Joined: Sat Feb 28, 2009 12:36 am
Location: India
Has thanked: 0 time
Been thanked: 0 time


Return to Syncsort/Synctool

 


  • Related topics
    Replies
    Views
    Last post