I have 2 input files and want to create output files for the following:
* matched key that appear on both file1 and 2
* key that appears only on file1
* key that appears only on file2
These 2 input files are Fixed Block, recl=80, key is in same place, position 1-10;
Output file is also FB, recl=80; I used the ICETOOL SPLICE and it seemed to worked,
however, I have a couple questions:
1/ When I build output the file, how can I remove the identifier 'VV' BB' 'VB'?
2/ Currently the key is character (1,10,CH), will this solution works if the key is unsigned packed (1,10,PD)?
3/ If I need to have another output file that has matched key (pos. 1 to 10), but the detail does not match
(pos 11 to pos 80), how can I do it? Do I need to add another identifier?
4/ To sort the output files by the key, do I need an extra step to sort it or can I sort it at the same time that I build the output files?
Thanks.
input file 1
RECORD1 1 20100706
RECORD3 3 20100706
RECORD2 2 20100706
RECORD4 4 20100706
RECORD3 3 20100706
RECORD2 2 20100706
RECORD4 4 20100706
Input file 2
RECORD1 1 20100706
RECORD3 3 20100706
RECORD6 6 20100706
RECORD2 2 20100706
RECORD5 5 20100706
RECORD3 3 20100706
RECORD6 6 20100706
RECORD2 2 20100706
RECORD5 5 20100706
Output - key matched on both file1 and 2
RECORD1 1 20100706 VB
RECORD2 2 20100706 VB
RECORD3 3 20100706 VB
RECORD2 2 20100706 VB
RECORD3 3 20100706 VB
Output - key only in file 1
RECORD4 4 20100706 BB
Output file - key only in file 2
RECORD5 5 20100706 VV
RECORD6 6 20100706 VV
RECORD6 6 20100706 VV
JCL:
//PS030 EXEC PGM=ICETOOL
//TOOLMSG DD SYSOUT=*
//DFSMSG DD SYSOUT=*
//IN1 DD DSN=SAT.SP.TEST.FILE1,DISP=SHR
//IN2 DD DSN=SAT.SP.TEST.FILE2,DISP=SHR
//T1 DD DSN=&&T1,
// UNIT=SYSDA,
// SPACE=(CYL,(10,10),RLSE),
// DISP=(MOD,PASS)
//OUT12 DD DSN=SAT.SP.TEST.FILE.FIL1FIL2.MATCH,
// DISP=OLD
//* DISP=(,CATLG,DELETE),
//* UNIT=SYSDA,
//* SPACE=(80,(250,100),RLSE),AVGREC=K,
//* DCB=(MODEL,RECFM=FB,LRECL=80,BLKSIZE=0)
//OUT1 DD DSN=SAT.SP.TEST.FILE.NOMATCH.FILE1,
// DISP=OLD
//* DISP=(,CATLG,DELETE),
//* UNIT=SYSDA,
//* SPACE=(80,(250,100),RLSE),AVGREC=K,
//* DCB=(MODEL,RECFM=FB,LRECL=80,BLKSIZE=0)
//OUT2 DD DSN=SAT.SP.TEST.FILE.NOMATCH.FILE2,
// DISP=OLD
//* DISP=(,CATLG,DELETE),
//* UNIT=SYSDA,
//* SPACE=(80,(250,100),RLSE),AVGREC=K,
//* DCB=(MODEL,RECFM=FB,LRECL=80,BLKSIZE=0)
//TOOLIN DD *
* ADD 'BB' IDENTIFIER FOR FILE1 RECORDS
COPY FROM(IN1) TO(T1) USING(CTL1)
* ADD 'VV' IDENTIFIER FOR FILE2 RECORDS
COPY FROM(IN2) TO(T1) USING(CTL2)
* SPLICE TO MATCH UP RECORDS AND WRITE THEM TO THEIR
* APPROPRIATE OUTPUT FILES.
SPLICE FROM(T1) TO(OUT12) ON(1,10,CH) WITH(70,1) -
USING(CTL3) KEEPNODUPS
/*
//CTL1CNTL DD *
* ADD 'BB' (BASE) IDENTIFIER TO FILE1 RECORDS.
INREC OVERLAY=(70:C'BB')
/*
//CTL2CNTL DD *
* ADD 'VV' (BASE) IDENTIFIER TO FILE2 RECORDS.
INREC OVERLAY=(70:C'VV')
/*
//CTL3CNTL DD *
* WRITE MATCHING RECORDS TO OUT12 FILE
OUTFIL FNAMES=OUT12,INCLUDE=(70,2,CH,EQ,C'VB'),BUILD=(1,80)
* WRITE FILE1 ONLY RECORDS TO OUT1 FILE
OUTFIL FNAMES=OUT1,INCLUDE=(70,2,CH,EQ,C'BB'),BUILD=(1,80)
* WRITE FILE2 ONLY RECORDS TO OUT2 FILE
OUTFIL FNAMES=OUT2,INCLUDE=(70,2,CH,EQ,C'VV'),BUILD=(1,80)
/*
//TOOLMSG DD SYSOUT=*
//DFSMSG DD SYSOUT=*
//IN1 DD DSN=SAT.SP.TEST.FILE1,DISP=SHR
//IN2 DD DSN=SAT.SP.TEST.FILE2,DISP=SHR
//T1 DD DSN=&&T1,
// UNIT=SYSDA,
// SPACE=(CYL,(10,10),RLSE),
// DISP=(MOD,PASS)
//OUT12 DD DSN=SAT.SP.TEST.FILE.FIL1FIL2.MATCH,
// DISP=OLD
//* DISP=(,CATLG,DELETE),
//* UNIT=SYSDA,
//* SPACE=(80,(250,100),RLSE),AVGREC=K,
//* DCB=(MODEL,RECFM=FB,LRECL=80,BLKSIZE=0)
//OUT1 DD DSN=SAT.SP.TEST.FILE.NOMATCH.FILE1,
// DISP=OLD
//* DISP=(,CATLG,DELETE),
//* UNIT=SYSDA,
//* SPACE=(80,(250,100),RLSE),AVGREC=K,
//* DCB=(MODEL,RECFM=FB,LRECL=80,BLKSIZE=0)
//OUT2 DD DSN=SAT.SP.TEST.FILE.NOMATCH.FILE2,
// DISP=OLD
//* DISP=(,CATLG,DELETE),
//* UNIT=SYSDA,
//* SPACE=(80,(250,100),RLSE),AVGREC=K,
//* DCB=(MODEL,RECFM=FB,LRECL=80,BLKSIZE=0)
//TOOLIN DD *
* ADD 'BB' IDENTIFIER FOR FILE1 RECORDS
COPY FROM(IN1) TO(T1) USING(CTL1)
* ADD 'VV' IDENTIFIER FOR FILE2 RECORDS
COPY FROM(IN2) TO(T1) USING(CTL2)
* SPLICE TO MATCH UP RECORDS AND WRITE THEM TO THEIR
* APPROPRIATE OUTPUT FILES.
SPLICE FROM(T1) TO(OUT12) ON(1,10,CH) WITH(70,1) -
USING(CTL3) KEEPNODUPS
/*
//CTL1CNTL DD *
* ADD 'BB' (BASE) IDENTIFIER TO FILE1 RECORDS.
INREC OVERLAY=(70:C'BB')
/*
//CTL2CNTL DD *
* ADD 'VV' (BASE) IDENTIFIER TO FILE2 RECORDS.
INREC OVERLAY=(70:C'VV')
/*
//CTL3CNTL DD *
* WRITE MATCHING RECORDS TO OUT12 FILE
OUTFIL FNAMES=OUT12,INCLUDE=(70,2,CH,EQ,C'VB'),BUILD=(1,80)
* WRITE FILE1 ONLY RECORDS TO OUT1 FILE
OUTFIL FNAMES=OUT1,INCLUDE=(70,2,CH,EQ,C'BB'),BUILD=(1,80)
* WRITE FILE2 ONLY RECORDS TO OUT2 FILE
OUTFIL FNAMES=OUT2,INCLUDE=(70,2,CH,EQ,C'VV'),BUILD=(1,80)
/*