Joined: 21 Nov 2008 Posts: 31 Location: United Kingdom
Requirement - compare FileA & FileB, any matches found in FileB write to an output file.
FileA FB 237 bytes Key=2,7(alphanumeric)
FileB FB 1000 bytes Key=61,7(alphanumeric).
You provided me with the following JCL which works fine when FileB FB 100 bytes Key=55,7(alphanumeric). I have tried tweaking your jcl but cannot get it to work. Thanks for your help.
Code:
//* STEP0100 WILL ELIMINATE THE DUPLICATES FROM 237 BYTE FILE
//* AND CREATE A 100 BYTE FILE POPULATING THE KEY FROM POS 2 FOR 7 BYTES
//* ONTO POS 55.
//*
//*
//**********************************************************************
//STEP0100 EXEC PGM=ICEMAN
//SYSOUT DD SYSOUT=*
//SORTIN DD DSN=DTSX018.C1000.MASTFILE.REFRESH.SORTED,DISP=SHR
//SORTOUT DD DSN=&&I2,DISP=(,PASS),SPACE=(CYL,(5,5),RLSE)
//SYSIN DD *
INREC BUILD=(2,7)
SORT FIELDS=(1,7,CH,A)
SUM FIELDS=NONE
OUTREC BUILD=(55:1,7,100:X)
//**********************************************************************
//*
//* STEP0200 WILL CONCATENATE 100 ORGINAL FILE AND THE FILE CREATED
//* IN STEP ABOVE AND PICK ALL THE DUPLICATES AS ANY MATCHING KEY
//* WILL BE A DUPLICATE. USING OMIT ON OUTFIL DROP THE RECORDS CREATED
//* IN STEP0100 THERE BY RESULTING IN THE DESIRED OUTPUT
//*
//**********************************************************************
//STEP0200 EXEC PGM=ICETOOL
//TOOLMSG DD SYSOUT=*
//DFSMSG DD SYSOUT=*
//IN DD DSN=TCSRGA.C1000.ASSET.ADASTRIP.TESTAF.B,DISP=SHR
// DD DSN=&&I2,DISP=SHR
//OUT DD SYSOUT=*
//TOOLIN DD *
SELECT FROM(IN) ON(55,7,CH) TO(OUT) ALLDUPS USING(CTL1)
//CTL1CNTL DD *
OMIT COND=(55,7,CH,EQ,C' ')
OUTFIL FNAMES=OUT,OMIT=(1,54,CH,EQ,C' ',AND,62,39,CH,EQ,C' ')
/*
Joined: 07 Dec 2007 Posts: 2205 Location: San Jose
Richard Galley,
The following JCL will give you the desired results
Code:
//**********************************************************************
//STEP0100 EXEC PGM=ICEMAN
//SYSOUT DD SYSOUT=*
//SORTIN DD DSN=Your 237byte dups file,
// DISP=SHR
//SORTOUT DD DSN=&&FILEA,DISP=(,PASS),SPACE=(CYL,(X,Y),RLSE)
//SYSIN DD *
INREC BUILD=(2,7)
SORT FIELDS=(1,7,CH,A)
SUM FIELDS=NONE
OUTREC BUILD=(61:1,7,1000:X)
//*
//**********************************************************************
//*
//* STEP0200 WILL CONCATENATE THE ABOVE CREATED TEMP FILE TO THE 1000 BYTE
//* ORGINAL FILE. ie. THE TEMPFILE WILL BE FIRST IN THE CONCATENATION LIST
//* WE PICK THE LASTDUP AS ANY MATCHING KEY WILL BE A DUPLICATE AND WE
//* ARE PICKING THE LASTDUP AS ORIGINAL FILE IS CONCATENATED LAST
//* THERE BY RESULTING IN THE DESIRED OUTPUT
//*
//**********************************************************************
//STEP0200 EXEC PGM=ICETOOL
//TOOLMSG DD SYSOUT=*
//DFSMSG DD SYSOUT=*
//IN DD DSN=&&FILEA,
// DISP=SHR
// DD DSN=Your 1000 byte fileb,
// DISP=SHR
//OUT DD SYSOUT=*
//TOOLIN DD *
SELECT FROM(IN) TO(OUT) ON(61,7,CH) LASTDUP USING(CTL1)
//CTL1CNTL DD *
OMIT COND=(61,7,CH,EQ,C' ')
//*
Joined: 21 Nov 2008 Posts: 31 Location: United Kingdom
Thanks Skolusu
I have run this but the key field is now in pos 62(should be 61). This is what happened when I amended your original code and ran it.
Code:
---+----1----+----2----+----3----+----4----+----5----+----6----+----7----+----8-
********************************* TOP OF DATA **********************************
0633832039118DVL0807R0630007369682VE303 AA279
0633832039116DVL0807R0630007369682VE0011 AA58
0633826069135STCOPCP 0630007369898VE61217124 AB4088
0633832039139DVL0807R0630007369898VE11699 AB9028
Joined: 21 Nov 2008 Posts: 31 Location: United Kingdom
Hi Guys
The key in fileB is 61 as previously stated but it looks like when the output file is written it starts in pos 2 instead of pos 1. Therefore the key ends up being at pos 62 instead of 61. Thanks.
Code:
----+----1----+----2----+----3----+----4----+----5----+----6----+----7----+----8
********************************* TOP OF DATA **********************************
0633832039118DVL0807R0630007369682VE303 AA279
0633832039116DVL0807R0630007369682VE0011 AA58
0633826069135STCOPCP 0630007369898VE61217124 AB4088
0633832039139DVL0807R0630007369898VE11699 AB9028
Joined: 07 Dec 2007 Posts: 2205 Location: San Jose
Richard Galley,
I am guessing that you are using reporting features. Unless you show me the control cards you used I canNOT help you as to why your positions are off by a byte.
Joined: 21 Nov 2008 Posts: 31 Location: United Kingdom
Sorry I am not sure what you mean in your previous comment. This is the code I am using -
Code:
//**********************************************************************
//STEP0100 EXEC PGM=ICEMAN
//SYSOUT DD SYSOUT=*
//SORTIN DD DSN=Your 237byte dups file,
// DISP=SHR
//SORTOUT DD DSN=&&FILEA,DISP=(,PASS),SPACE=(CYL,(X,Y),RLSE)
//SYSIN DD *
INREC BUILD=(2,7)
SORT FIELDS=(1,7,CH,A)
SUM FIELDS=NONE
OUTREC BUILD=(61:1,7,1000:X)
//*
//**********************************************************************
//*
//* STEP0200 WILL CONCATENATE THE ABOVE CREATED TEMP FILE TO THE 1000 BYTE
//* ORGINAL FILE. ie. THE TEMPFILE WILL BE FIRST IN THE CONCATENATION LIST
//* WE PICK THE LASTDUP AS ANY MATCHING KEY WILL BE A DUPLICATE AND WE
//* ARE PICKING THE LASTDUP AS ORIGINAL FILE IS CONCATENATED LAST
//* THERE BY RESULTING IN THE DESIRED OUTPUT
//*
//**********************************************************************
//STEP0200 EXEC PGM=ICETOOL
//TOOLMSG DD SYSOUT=*
//DFSMSG DD SYSOUT=*
//IN DD DSN=&&FILEA,
// DISP=SHR
// DD DSN=Your 1000 byte fileb,
// DISP=SHR
//OUT DD SYSOUT=*
//TOOLIN DD *
SELECT FROM(IN) TO(OUT) ON(61,7,CH) LASTDUP USING(CTL1)
//CTL1CNTL DD *
OMIT COND=(61,7,CH,EQ,C' ')
//*
Joined: 21 Nov 2008 Posts: 31 Location: United Kingdom
Guys
I have this sorted now. It looks like the problem was caused by the output being written to SYSOUT=*. When it is written to a dataset it is fine. Thanks