View previous topic :: View next topic
Author
Message
padhumainframe New User Joined: 21 Sep 2010Posts: 17 Location: India
I have two i/p files FILEA and FILEB both of RECFM=FB and LRECL=100.
Below is how the data is present in the i/p files
FILEA
1---------8 10------17 19----------------100
DD000001 00000001 AAAAAAAA
DD000001 00000002 BBBBBBBB
DD000001 00000003 CCCCCCC
DD000001 00000004 DDDDD
DD000001 00000005 EEEEEEEEE
DD000001 00000006 FFFFF
DD000002 00000001 DDDDD
DD000003 00000007 XXXXX
FILEB
1---------8 10------17 19----------------100
AAAAAAAA
DDDDD
FFFFF
XXXXX
I need the output as in FILEC, RECFM=FB and LRECL=100 as
FILEB
1---------8 10------17 19----------------100
DD000001 00000001 AAAAAAAA
DD000001 00000004 DDDDD
DD000002 00000001 DDDDD
DD000001 00000006 FFFFF
DD000003 00000007 XXXXX
How can i achieve this......
Back to top
sqlcode1 Active Member Joined: 08 Apr 2010Posts: 577 Location: USA
padhumainframe,
Please use code tags to preserve formatting. Paste your data, select the text and click on "Code" button.
Please explain rules for getting output.
1) What is the matching key for FILEA and FILEB? Is it 19 through next 9 bytes of FILEA and 1 through 9 bytes of FILEB?
2) Could you have duplicates for the key in the FILEB and/or FILEA?
Thanks,
Back to top
Frank Yaeger DFSORT Developer Joined: 15 Feb 2005Posts: 7129 Location: San Jose, CA
Padmanaban,
Please show an example of the records in each input file (relevant fields only) and what you expect for output. Explain the "rules" for getting from input to output. Give the starting position, length and format of each relevant field. Give the RECFM and LRECL of the input files. If file1 can have duplicates within it, show that in your example. If file2 can have duplicates within it, show that in your example.
Also, run this job and show the //SYSOUT messages you receive, so I can see what level you're at:
Code:
//S1 EXEC PGM=SORT
//SYSOUT DD SYSOUT=*
//SORTIN DD *
RECORD
//SORTOUT DD DUMMY
//SYSIN DD *
OPTION COPY
/*
Back to top
padhumainframe New User Joined: 21 Sep 2010Posts: 17 Location: India
Frank,
FILEA is FB and length 100. Contains 3 fields A1=1-8, B1=9-17 and C1=19-82. All of these fields can have duplicate values. Key is C1.
FILEA contains data like below. Note the Duplicate values for C1 in rows 1,2,5and 7
Code:
=COLS> ----+----1----+----2----+----3----+----4----+----5----
000001 DD000001 00000391 -356530-LON
000002 DD000001 00000392 .KG CST-CLT GBP
000003 DD000001 00000393 -356531-LON
000004 DD000001 00000394 -356532-LON
000005 DD000003 00000001 -356530-LON
000006 DD000001 00000396 -356533-LON
000007 DD000002 00000397 .KG CST-CLT GBP
FILEB is FB and length100. Contains 2 field C2=1-82 and D2=83-18. Field D contains spaces for all rows. Field C2 is unique and is the Key.
FILEB contains data like below
Code:
=COLS> ----+----1----+----2----+----3----+----4----+----5----
000001 -356530-LON
000002 .KG CST-CLT GBP
000003 -356531-LON
000004 -356532-LON
I need to match the data in field C2 of FILEB with field C1 of FILEA and write corresponding fields A1, B1 and C1 of FILEA to the o/p file.
Output must look like
Code:
=COLS> ----+----1----+----2----+----3----+----4----+----5----
000001 DD000001 00000392 .KG CST-CLT GBP
000002 DD000002 00000397 .KG CST-CLT GBP
000003 DD000001 00000391 -356530-LON
000004 DD000003 00000001 -356530-LON
000005 DD000001 00000393 -356531-LON
000006 DD000001 00000394 -356532-LON
Rules : Output File must contain the records from FILEA where C1 in FILEA matches with C2 in FILEB. Duplicates for C1 in FILEA must not be eliminated.
Frank, Below is the sysout for the job u gave
Code:
********************************* TOP OF DATA **********************************************************************
1ICE143I 0 BLOCKSET COPY TECHNIQUE SELECTED
ICE250I 0 VISIT http://www.ibm.com/storage/dfsort FOR DFSORT PAPERS, EXAMPLES AND MORE
ICE000I 1 - CONTROL STATEMENTS FOR 5694-A01, Z/OS DFSORT V1R10 - 04:18 ON WED SEP 22, 2010 -
0 OPTION COPY 00076127
ICE201I F RECORD TYPE IS F - DATA STARTS IN POSITION 1
ICE751I 0 C5-K48846 C6-K90014 C7-K45047 C8-K46331 E9-K47759 C9-BASE E5-K48846 E7-K48846
ICE193I 0 ICEAM1 INVOCATION ENVIRONMENT IN EFFECT - ICETD1 ENVIRONMENT SELECTED
ICE088I 0 TTSRTSCR.STEP001 . , INPUT LRECL = 100, BLKSIZE = 27900, TYPE = FB
ICE093I 0 MAIN STORAGE = (MAX,6291456,6286430)
ICE156I 0 MAIN STORAGE ABOVE 16MB = (6221430,6221430)
ICE127I 0 OPTIONS: OVFLO=RC0 ,PAD=RC0 ,TRUNC=RC0 ,SPANINC=RC16,VLSCMP=N,SZERO=Y,RESET=Y,VSAMEMT=Y,DYNSPC=500
ICE128I 0 OPTIONS: SIZE=6291456,MAXLIM=1048576,MINLIM=450560,EQUALS=N,LIST=Y,ERET=RC16 ,MSGDDN=SYSOUT
ICE129I 0 OPTIONS: VIO=N,RESDNT=ALL ,SMF=FULL ,WRKSEC=Y,OUTSEC=Y,VERIFY=N,CHALT=N,DYNALOC=N ,ABCODE=MSG
ICE130I 0 OPTIONS: RESALL=16384,RESINV=0,SVC=109 ,CHECK=Y,WRKREL=Y,OUTREL=Y,CKPT=N,COBEXIT=COB2
ICE131I 0 OPTIONS: TMAXLIM=6291456,ARESALL=0,ARESINV=0,OVERRGN=65536,CINV=Y,CFW=Y,DSA=0
ICE132I 0 OPTIONS: VLSHRT=N,ZDPRINT=Y,IEXIT=N,TEXIT=N,LISTX=N,EFS=NONE ,EXITCK=W,PARMDDN=DFSPARM ,FSZEST=N
ICE133I 0 OPTIONS: HIPRMAX=OPTIMAL,DSPSIZE=MAX ,ODMAXBF=0,SOLRF=Y,VLLONG=N,VSAMIO=N,MOSIZE=MAX
ICE235I 0 OPTIONS: NULLOUT=RC0
ICE084I 0 BSAM ACCESS METHOD USED FOR SORTOUT
ICE084I 0 EXCP ACCESS METHOD USED FOR SORTIN
ICE751I 1 EF-K49535 F0-K49038 E8-K48846
ICE090I 0 OUTPUT LRECL = 100, BLKSIZE = 27900, TYPE = FB
ICE055I 0 INSERT 0, DELETE 0
ICE054I 0 RECORDS - IN: 104058, OUT: 104058
ICE052I 0 END OF DFSORT
******************************** BOTTOM OF DATA **********************************************************************
Back to top
padhumainframe New User Joined: 21 Sep 2010Posts: 17 Location: India
Frank,
To be added, I tried this with Joinkeys. But i have quite problems with the PTF. SO i need this with ICETOOL.
Thanks in advance
Back to top
smijoss Active User Joined: 30 Aug 2007Posts: 114 Location: pune
for ICETOOL you can use SPLICE , suggest you to read that..
are there duplicate records in File A ??
Back to top
padhumainframe New User Joined: 21 Sep 2010Posts: 17 Location: India
smijoss,
Yes, There are duplicates for Field C1 in FILEA.
Also, i've tried using SPLICE, but the duplicate rows for field C1 in FILEA are not written into my output. Only the first duplicate is written.
This is what i did...
FILEA
Code:
=COLS> ----+----1----+----2----+----3----+----4----+----5----+----6----+----7--
****** ***************************** Top of Data ******************************
000001 DD000001 00000391 -356530-LON
000002 DD000001 00000392 .KG CST-CLT GBP
000003 DD000001 00000393 -356531-LON
000004 DD000001 00000394 -356532-LON
000005 DD000001 00000396 -356533-LON
000006 DD000002 00000397 .KG CST-CLT GBP
000007 DD000003 00000001 -356530-LON
****** **************************** Bottom of Data ****************************
FILEB
Code:
=COLS> ----+----1----+----2----+----3----+----4----+----5----+----6----+----7--
****** ***************************** Top of Data ******************************
000001 -356530-LON
000002 .KG CST-CLT GBP
000003 -356531-LON
000004 -356532-LON
****** **************************** Bottom of Data ****************************
EXECUTION JCL
Code:
//STEP010 EXEC PGM=ICETOOL
//TOOLMSG DD SYSOUT=*
//DFSMSG DD SYSOUT=*
//IN1 DD DISP=SHR,DSN=TTXN.RAJUPDM.TEST.TXN.GMF
//IN2 DD DISP=SHR,DSN=TTXN.RAJUPDM.TEST.ADHOC
//T1 DD DSN=&&T1,UNIT=SYSDA,SPACE=(CYL,(10,10)),
// DISP=(MOD,PASS)
//MATCH DD DSN=TTXN.RAJUPDM.TEST.INDXFILE,
// DISP=(NEW,CATLG,DELETE),
// DCB=(RECFM=FB,LRECL=100),
// SPACE=(CYL,(100,100),RLSE)
//TOOLIN DD *
COPY FROM(IN1) TO(T1) USING(CTL1)
COPY FROM(IN2) TO(T1) USING(CTL2)
SPLICE FROM(T1) TO(MATCH) ON(19,82,CH) WITH(102,1) -
USING(CTL3)
/*
//CTL1CNTL DD *
OUTREC FIELDS=(1:1,18,19:19,82,101:C'11')
/*
//CTL2CNTL DD *
OUTREC FIELDS=(18X,19:1,82,101:C'22')
/*
//CTL3CNTL DD *
OUTFIL FNAMES=MATCH,INCLUDE(101,2,CH,EQ,C'12'),
OUTREC(1:1,18,19:19,82)
/*
OUTPUT FILE
Code:
=COLS> ----+----1----+----2----+----3----+----4----+----5----+----6----+----7--
****** ***************************** Top of Data ******************************
000001 DD000001 00000392 .KG CST-CLT GBP
000002 DD000001 00000391 -356530-LON
000003 DD000001 00000393 -356531-LON
000004 DD000001 00000394 -356532-LON
****** **************************** Bottom of Data ****************************
Note that the rows 6 and 7 in FILEA are missing in the OUTPUT.
Back to top
smijoss Active User Joined: 30 Aug 2007Posts: 114 Location: pune
Quote:
SPLICE FROM(T1) TO(MATCH) ON(19,82,CH) WITH(102,1) -
USING(CTL3)
use the option WITHALL
Code:
SPLICE FROM(T1) TO(MATCH) ON(19,82,CH) WITH(102,1) -
USING(CTL3) WITHALL
Back to top
padhumainframe New User Joined: 21 Sep 2010Posts: 17 Location: India
smijoss,
tried with the option WITHALL. Output is still the same
Back to top
smijoss Active User Joined: 30 Aug 2007Posts: 114 Location: pune
Code:
//STEP010 EXEC PGM=ICETOOL
//TOOLMSG DD SYSOUT=*
//DFSMSG DD SYSOUT=*
//IN1 DD *
-356530-LON
.KG CST-CLT GBP
-356531-LON
-356532-LON
/*
//IN2 DD *
DD000001 00000391 -356530-LON
DD000001 00000392 .KG CST-CLT GBP
DD000001 00000393 -356531-LON
DD000001 00000394 -356532-LON
DD000001 00000396 -356533-LON
DD000002 00000397 .KG CST-CLT GBP
DD000003 00000001 -356530-LON
/*
//T1 DD DSN=TEMP.TLM.TEST.TEMP,UNIT=SYSDA,SPACE=(CYL,(2,5)),
// DISP=(MOD,CATLG,DELETE)
//MATCH DD DSN=TEMP.TLM.TEST.INDXFILE,
// DISP=(NEW,CATLG,DELETE),
// SPACE=(CYL,(100,100),RLSE)
//TOOLIN DD *
COPY FROM(IN1) TO(T1) USING(CTL2)
COPY FROM(IN2) TO(T1) USING(CTL1)
SPLICE FROM(T1) TO(MATCH) ON(19,50,CH) WITH(102,1) -
WITH(1,18) WITHALL
* USING(CTL3) WITHALL
/*
//CTL1CNTL DD *
OUTREC FIELDS=(1:1,18,19:19,50,101:C'11')
/*
//CTL2CNTL DD *
OUTREC FIELDS=(18X,19:1,50,101:C'22')
/*
//CTL3CNTL DD *
OUTFIL FNAMES=MATCH,INCLUDE(101,2,CH,EQ,C'12'),
OUTREC(1:1,18,19:19,82)
/*
Back to top
smijoss Active User Joined: 30 Aug 2007Posts: 114 Location: pune
i have changed your length from 82 to 51 to allow instream data..
you may modify as per your input file
smijoss wrote:
Code:
//STEP010 EXEC PGM=ICETOOL
//TOOLMSG DD SYSOUT=*
//DFSMSG DD SYSOUT=*
//IN1 DD *
-356530-LON
.KG CST-CLT GBP
-356531-LON
-356532-LON
/*
//IN2 DD *
DD000001 00000391 -356530-LON
DD000001 00000392 .KG CST-CLT GBP
DD000001 00000393 -356531-LON
DD000001 00000394 -356532-LON
DD000001 00000396 -356533-LON
DD000002 00000397 .KG CST-CLT GBP
DD000003 00000001 -356530-LON
/*
//T1 DD DSN=TEMP.TLM.TEST.TEMP,UNIT=SYSDA,SPACE=(CYL,(2,5)),
// DISP=(MOD,CATLG,DELETE)
//MATCH DD DSN=TEMP.TLM.TEST.INDXFILE,
// DISP=(NEW,CATLG,DELETE),
// SPACE=(CYL,(100,100),RLSE)
//TOOLIN DD *
COPY FROM(IN1) TO(T1) USING(CTL2)
COPY FROM(IN2) TO(T1) USING(CTL1)
SPLICE FROM(T1) TO(MATCH) ON(19,50,CH) WITH(102,1) -
WITH(1,18) WITHALL
* USING(CTL3) WITHALL
/*
//CTL1CNTL DD *
OUTREC FIELDS=(1:1,18,19:19,50,101:C'11')
/*
//CTL2CNTL DD *
OUTREC FIELDS=(18X,19:1,50,101:C'22')
/*
//CTL3CNTL DD *
OUTFIL FNAMES=MATCH,INCLUDE(101,2,CH,EQ,C'12'),
OUTREC(1:1,18,19:19,82)
/*
Back to top
padhumainframe New User Joined: 21 Sep 2010Posts: 17 Location: India
smijoss,
Is this line in the SPLICE operator commented???
Code:
* USING(CTL3) WITHALL
Back to top
smijoss Active User Joined: 30 Aug 2007Posts: 114 Location: pune
yes , i forgot to add that to the original SPLICE command ,
please add the USING clause to original SPLICE command
Back to top
padhumainframe New User Joined: 21 Sep 2010Posts: 17 Location: India
Thanks smijoss
U ROCK!!!!
Back to top
padhumainframe New User Joined: 21 Sep 2010Posts: 17 Location: India
Received another problem. There is an unwanted record in the output.
FILEA : TTXN.RAJUPDM.TEST.TXN.GMF
Code:
=COLS> ----+----1----+----2----+----3----+----4----+----5----+----6----+----7--
****** ***************************** Top of Data ******************************
000001 DD000001 00000001
000002 DD000001 00000002
000003 DD000001 00000003
000004 DD000001 00000004
000005 DD000001 00000005
000006 DD000001 00000391 -356530-LON
000007 DD000001 00000392 .KG CST-CLT GBP
000008 DD000001 00000393 -356531-LON
000009 DD000001 00000394 -356532-LON
000010 DD000001 00000396 356533-LON
000011 DD000002 00000001
000012 DD000002 00000002
000013 DD000002 00000003
000014 DD000002 00000397 .KG CST-CLT GBP
000015 DD000003 00000001 -356530-LON
000016 DD000003 00000004 -356534-LON
000017 DD000003 00000005 -356535-LON
000018 DD000003 00000006 -356535-LON
****** **************************** Bottom of Data ****************************
FILEB : TTXN.RAJUPDM.TEST.ADHOC
Code:
=COLS> ----+----1----+----2----+----3----+----4----+----5----+----6----+----7--
****** ***************************** Top of Data ******************************
000001 -356530-LON
000002 .KG CST-CLT GBP
000003 -356531-LON
000004 -356532-LON
000005 356533-LON
****** **************************** Bottom of Data ****************************
EXECUTION JCL
Code:
//STEP010 EXEC PGM=ICETOOL
//TOOLMSG DD SYSOUT=*
//DFSMSG DD SYSOUT=*
//IN1 DD DISP=SHR,DSN=TTXN.RAJUPDM.TEST.ADHOC
//IN2 DD DISP=SHR,DSN=TTXN.RAJUPDM.TEST.TXN.GMF
//T1 DD DSN=TTXN.RAJUPDM.TEST.T1,
// DISP=(MOD,CATLG,DELETE),
// UNIT=SYSDA,SPACE=(CYL,(100,100),RLSE)
//MATCH DD DSN=TTXN.RAJUPDM.TEST.INDXFIL1,
// DISP=(NEW,CATLG,DELETE),
// DCB=(RECFM=FB,LRECL=100),
// SPACE=(CYL,(100,100),RLSE)
//TOOLIN DD *
COPY FROM(IN1) TO(T1) USING(CTL2)
COPY FROM(IN2) TO(T1) USING(CTL1)
SPLICE FROM(T1) TO(MATCH) ON(19,82,CH) WITH(102,1) -
WITH(1,18) WITHALL
* USING(CTL3) WITHALL
//CTL1CNTL DD *
INCLUDE COND=(19,82,CH,NE,C' ')
OUTREC FIELDS=(1:1,18,19:19,82,101:C'11')
/*
//CTL2CNTL DD *
OUTREC FIELDS=(18X,19:1,82,101:C'22')
/*
//CTL3CNTL DD *
OUTFIL FNAMES=MATCH,INCLUDE(101,2,CH,EQ,C'12'),
OUTREC(1:1,18,19:19,82)
/*
//
OUTPUT : TTXN.RAJUPDM.TEST.INDXFIL1
Code:
=COLS> ----+----1----+----2----+----3----+----4----+----5----+----6----+----7--
****** ***************************** Top of Data ******************************
000001 DD000001 00000396 356533-LON
000002 DD000001 00000392 .KG CST-CLT GBP
000003 DD000002 00000397 .KG CST-CLT GBP
000004 DD000001 00000391 -356530-LON
000005 DD000003 00000001 -356530-LON
000006 DD000001 00000393 -356531-LON
000007 DD000001 00000394 -356532-LON
000008 DD000003 00000006 -356535-LON
****** **************************** Bottom of Data ****************************
The row 8 in output file is unwanted as the key -356535-LON is not part of the match key in FILEB.
Thanks in Advance
Back to top
sqlcode1 Active Member Joined: 08 Apr 2010Posts: 577 Location: USA
padhumainframe,
Why did you comment line with USING(CTL3) WITHALL? Uncomment CTL3 line and delete the line above it ( WITH(1,18) WITHALL).
Thanks,
Back to top
smijoss Active User Joined: 30 Aug 2007Posts: 114 Location: pune
padhumainframe ,
yes, i had asked you to include USING in the Splice command, that should solve your problem
Back to top
padhumainframe New User Joined: 21 Sep 2010Posts: 17 Location: India
smijoss
Quote:
yes, i had asked you to include USING in the Splice command, that should solve your problem
The problem is not only this.
I've changed the control cards as below and is working fine now.
Code:
//TOOLIN DD *
COPY FROM(IN1) TO(T1) USING(CTL2)
COPY FROM(IN2) TO(T1) USING(CTL1)
SPLICE FROM(T1) TO(MATCH) ON(19,82,CH) WITH(102,1) -
WITH(1,18) USING(CTL3) WITHALL
/*
//CTL1CNTL DD *
INCLUDE COND=(19,82,CH,NE,C' ')
OUTREC FIELDS=(1:1,18,19:19,82,101:C'22')
/*
//CTL2CNTL DD *
OUTREC FIELDS=(18X,19:1,82,101:C'11')
/*
//CTL3CNTL DD *
OUTFIL FNAMES=MATCH,INCLUDE(101,2,CH,EQ,C'12'),
OUTREC(1:1,18,19:19,82)
/*
Note: Earlier, IN1 records are added 22 and IN2 are added 11
Back to top
smijoss Active User Joined: 30 Aug 2007Posts: 114 Location: pune
ok good , i was busy today, so cudnt get time to execute it
Back to top
Please enable JavaScript!