Page 1 of 1

icetool with splice

Posted: Mon Jan 04, 2010 7:08 pm
by 4ubobby
HI,

I Need to compare two files on a key field which is at different positions and if matching record is found some part of the record from file 1 and complete record from file 2 needs to be written to the output file

input file 1:- lrecl 215 with key at position 1 length 7
input file 2:- lrecl 100 with key at position 87 length 7 has duplicate i want them in the output file as well

This is the jcl i am trying and i am getting errors.

Code: Select all

//STEP01 EXEC PGM=ICETOOL
//TOOLMSG DD SYSOUT=*
//DFSMSG DD SYSOUT=*
//IN1 DD DSN=input file 1,DISP=SHR
//IN2 DD DSN=input file 2,DISP=SHR
//T1 DD DSN=&&T1,UNIT=SYSDA,SPACE=(CYL,(5,5)),DISP=(MOD,PASS)
//OUT DD DSN=output file,DISP=(NEW,CATLG,DELETE),
// DCB=(RECFM=FB,LRECL=250,BLKSIZE=2500),
// UNIT=SYSDA,SPACE=(TRK,(5,1),RLSE)
//TOOLIN DD *
COPY FROM(IN2) TO(T1) ON FIRST USING(CTL1)
COPY FROM(IN1) TO(T1) ON FIRST USING(CTL2)
SPLICE FROM(T1) TO(OUT) ON(101,7,CH) -
FIRSTDUP WITH(143,2) USING(CTL3)
/*
//CTL1CNTL DD *
INREC OVERLAY=(1,100,3X,104:1,7,33X,143:C'11')
/*
//CTL2CNTL DD *
INREC OVERLAY=(1,103,104:96,7,110:17,24,135:79,9,143:C'22')
/*
//CTL3CNTL DD *
OUTFIL FNAMES=OUT,INCLUDE=(286,2,CH,EQ,C'12'), -
BUILD=(1,103,104:110,24,128:135,9)
/*

error message
*************

ICE600I 0 DFSORT ICETOOL UTILITY RUN STARTED


ICE632I 0 SOURCE FOR ICETOOL STATEMENTS:  TOOLIN


ICE630I 0 MODE IN EFFECT:  STOP

          COPY FROM(IN2) TO(T1)ON FIRST USING(CTL1)
                               $
ICE604A 0 ERROR IN KEYWORD, PARAMETER, OR DELIMITER
ICE602I 0 OPERATION RETURN CODE:  12

ICE630I 2 MODE IN EFFECT:  SCAN

          COPY FROM(IN1) TO(T1)ON FIRST USING(CTL2)
                               $
ICE604A 0 ERROR IN KEYWORD, PARAMETER, OR DELIMITER

Posted: Mon Jan 04, 2010 10:02 pm
by Frank Yaeger
Sigh.

Code: Select all

COPY FROM(IN2) TO(T1) ON FIRST USING(CTL1) 
COPY FROM(IN1) TO(T1) ON FIRST USING(CTL2) 
SPLICE FROM(T1) TO(OUT) ON(101,7,CH) - 
FIRSTDUP WITH(143,2) USING(CTL3) 
Your syntax is incorrect in many ways. You can't just invent your own syntax and expect it to work. You have to use the documented syntax.

If you want help, describe what you're trying to do rather than what you did that didn't work. 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.

icetool

Posted: Mon Jan 04, 2010 11:57 pm
by 4ubobby
I Need to compare two files on a key field which is at different positions and if matching record is found some part of the record from file 1 and complete record from file 2 needs to be written to the output file

input file 1:- lrecl 215 with key at position 1 length 7
input file 2:- lrecl 100 with key at position 87 length 7 has duplicate i want them in the output file as well

example

Posted: Tue Jan 05, 2010 12:00 am
by 4ubobby
input1
*****
************1111*********test
************2222*********pest
************3333*********guest


input2
*****
1111testdata
2222aasdfas
3333adsfsafa
1111adfasdfs


output
*****
1111testdatatest
2222aasdfaspest
3333adsfsafaguest
1111adfasdfstest

Posted: Tue Jan 05, 2010 12:14 am
by Frank Yaeger
Do you need the output records in the original order of the input2 records, or can the output records be sorted on the key?

Is the RECFM of the input files FB?

What is the expected RECFM and LRECL for the output file?

Do you have the Nov, 2009 DFSORT PTF installed? To determine this, see:

http://www.mainframegurukul.com/ibmmain ... php?t=3982
if matching record is found some part of the record from file 1
Which part? What is the starting position and length of this part?

example

Posted: Tue Jan 05, 2010 11:47 pm
by 4ubobby
Input file 1
*********
from input file 1 i want from 24 bytes starting from 17 and 9 bytes from 79 position.

input file 2
********
complete record which is 100 bytes.

outfile
*******
the length of the output file is 133 bytes 100 bytes from input file 2 and 33 bytes of input file 1.

files

Posted: Tue Jan 05, 2010 11:55 pm
by 4ubobby
all the files are in FB Format.

any order is fine. if match found it should be written.


ICE201I F RECORD TYPE ... July, 2008 DFSORT

Posted: Wed Jan 06, 2010 1:57 am
by Frank Yaeger
Just to be sure I understand (because your input example doesn't seem to match your description):

File1 has RECFM=FB and LRECL=215 - key is 1,7 - fields for output are at 17,24 and 79,9.

File2 has RECFM=FB and LRECL=100 - key is 87,7 - field for output is 1,100.

Is that correct?

yes you are correct

Posted: Wed Jan 06, 2010 2:00 am
by 4ubobby
correct

Posted: Wed Jan 06, 2010 2:52 am
by Frank Yaeger
Here's a DFSORT/ICETOOL job that will do what you asked for:

Code: Select all

//S1   EXEC  PGM=ICETOOL
//TOOLMSG   DD  SYSOUT=*
//DFSMSG    DD  SYSOUT=*
//IN1 DD DSN=... input file (FB/215)
//IN2 DD DSN=... input file (FB/100)
//T1 DD DSN=&&T1,UNIT=SYSDA,SPACE=(CYL,(5,5)),DISP=(MOD,PASS)
//OUT DD DSN=...  output file (FB/133)
//TOOLIN DD *
COPY FROM(IN1) TO(T1) USING(CTL1)
COPY FROM(IN2) TO(T1) USING(CTL2)
SPLICE FROM(T1) TO(OUT) ON(87,7,CH) WITHALL -
  WITH(1,100) WITH(134,1) USING(CTL3)
/*
//CTL1CNTL DD *
  INREC BUILD=(87:1,7,101:17,24,125:79,9,134:C'BB')
/*
//CTL2CNTL DD *
  INREC OVERLAY=(134:C'VV')
/*
//CTL3CNTL DD *
  OUTFIL FNAMES=OUT,INCLUDE=(134,2,CH,EQ,C'VB'),
    BUILD=(1,133)
/*

Topic deleted by Admin

Posted: Mon Jan 25, 2016 10:19 pm
by academyindia4
<< Content deleted By Admin >>