Need your help ....compare 2 files using ICETOOL and SPLICE

In this Mainframe Forum - You can post your queries on JCL, OS/390 JCL, MVS JCL, z/OS JCL, JES2 & JES3

Moderators: Frank Yaeger, DikDude, Moderator Group

chanakya
Member
Posts: 21
Joined: Thu Aug 18, 2011 7:34 pm

Post by chanakya » Thu Aug 25, 2011 8:30 pm

Examples for segments:


1) kx010 – LRECL – 222 FB
Input File format

header-info key actual data
KX010 6460698 6460698 22110SDF

positions:
Header-info 1-18 KX010
key 19-30 6460698
actual data 31-222 6460698 22110SDF


2) kx020 – 627
Input File format

header-info key actual data
KX020 6234698 6460698 22110SDF

positions:
Header-info 1-18 KX020
key 19-30 6234698
actual data 31-627 6460698 22110SDF


3) kx030 – 363
Input File format

header-info key actual data
KX030 6456788 6456788 22110SDF

positions:
Header-info 1-18 KX030
key 19-30 6456788
actual data 31-363 6456788 22110SDF

4) kx040 – 956
Input File format

header-info key actual data
KX040 567890 567890 22110SDF

positions:
Header-info 1-18 KX040
key 19-30 567890
actual data 31-956 567890 22110SDF

5) kx050 – 229
Input File format

header-info key actual data
KX050 6123456 6123456 22110SDF

positions:
Header-info 1-18 KX050
key 19-30 6123456
actual data 31-229 6123456 22110SDF

User avatar
Frank Yaeger
Moderator
Posts: 812
Joined: Sat Feb 18, 2006 5:45 am
Location: San Jose, CA
Contact:

Post by Frank Yaeger » Thu Aug 25, 2011 10:22 pm

If there are 6 to 7 segments having different LRECL and Same format as FB then can we consolidate to one PROC with different jobs?
Well, theoretically it would be possible. You could convert the first record of the input file to VB, determine it's FB LRECL as RDW length-4 and then generate symbols for the positions you need based on that LRECL, and use those symbols in the JOINKEYS step. But it would be quite tricky and I don't have time to do it for you.
Frank Yaeger - DFSORT Development Team (IBM) - yaeger@us.ibm.com
Specialties: JOINKEYS, FINDREP, WHEN=GROUP, ICETOOL, Symbols, Migration
=> DFSORT/MVS is on the Web at http://www.ibm.com/storage/dfsort

chanakya
Member
Posts: 21
Joined: Thu Aug 18, 2011 7:34 pm

Post by chanakya » Fri Aug 26, 2011 12:57 pm

You could convert the first record of the input file to VB, determine it's FB LRECL as RDW length-4 and then generate symbols for the positions you need based on that LRECL, and use those symbols in the JOINKEYS step.
If you give me little bit idea or any hint, it would be greatly appericiated.

I will do rest of the things.

I know, it would be quite tricky so that I need your dirction. Please help me.

User avatar
Frank Yaeger
Moderator
Posts: 812
Joined: Sat Feb 18, 2006 5:45 am
Location: San Jose, CA
Contact:

Post by Frank Yaeger » Fri Aug 26, 2011 10:24 pm

Ok, this should get you started:

Code: Select all

//S1    EXEC  PGM=ICETOOL
//TOOLMSG DD SYSOUT=*
//DFSMSG DD SYSOUT=*
//IN DD DSN=...  input file1 (FB/n)
//T1 DD DSN=&&T1,UNIT=SYSDA,SPACE=(TRK,(1,1)),DISP=(,PASS)
//SYM DD DSN=&&S1,UNIT=SYSDA,SPACE=(TRK,(1,1)),DISP=(,PASS)
//TOOLIN DD *
COPY FROM(IN) TO(T1) USING(CTL1)
COPY FROM(T1) TO(SYM) USING(CTL2)
//CTL1CNTL DD *
  OPTION STOPAFT=1
  OUTFIL FTOV
//CTL2CNTL DD *
* SET UP LRECL AS 5,5,ZD
  INREC BUILD=(1,4,5:1,2,BI,SUB,+4,TO=ZD,LENGTH=5)
* USE LRECL IN 5,5,ZD TO CREATE NEEDED SYMBOLS
  OUTFIL FNAMES=SYM,VTOF,
    BUILD=(C'RFFLD,1,',
      5,5,80:X,/,
      C'INC1,',(5,5,ZD,MUL,+2),ADD,+1,TO=ZD,LENGTH=5,
      C',1,CH')
//S2 EXEC  PGM=SORT
//SYSOUT    DD  SYSOUT=*
//SYMNAMES DD DSN=&&S1,DISP=(OLD,PASS)
//SYMNOUT DD SYSOUT=*
//IN1  DD DSN=...  input file1 (FB/n)
//IN2  DD DSN=...  input file2 (FB/n)
//OUT1 DD DSN=...  output file1
//SYSIN    DD    *
* USE CREATED SYMBOLS IN DFSORT STATEMENTS
  JOINKEYS F1=IN1,FIELDS=(19,12,A)
  JOINKEYS F2=IN2,FIELDS=(19,12,A)
  REFORMAT FIELDS=(F1:RFFLD,F2:RFFLD,?)
  OUTFIL FNAMES=OUT1,INCLUDE=(INC1,EQ,C'2')
  OPTION COPY
/*
S1's CTL2CNTL generates two symbols based on the LRECL in 5,5,ZD:

RFFLD,1,00222
INC1,00445,1,CH

You would enhance it to generate all the symbols you need based on the LRECL and then use those symbols in S2. In the example, the DFSORT statements in S2 would be transformed to:

Code: Select all

  JOINKEYS F1=IN1,FIELDS=(19,12,A)                 
  JOINKEYS F2=IN2,FIELDS=(19,12,A)                 
  REFORMAT FIELDS=(F1:1,222,F2:1,222,?)            
  OUTFIL FNAMES=OUT1,INCLUDE=(445,1,CH,EQ,C'2')    
  OPTION COPY                                     
Frank Yaeger - DFSORT Development Team (IBM) - yaeger@us.ibm.com
Specialties: JOINKEYS, FINDREP, WHEN=GROUP, ICETOOL, Symbols, Migration
=> DFSORT/MVS is on the Web at http://www.ibm.com/storage/dfsort

chanakya
Member
Posts: 21
Joined: Thu Aug 18, 2011 7:34 pm

Post by chanakya » Mon Aug 29, 2011 2:52 pm

Thanks!! I checked for all segement and its working propely. Thank you very much!!

But I have one last question while buliding a new file.

BUILD=(1:223,11,16:C'INS',19:241,12,31:253,192)

which symbol can we use instead of '223'?

for your referal, The existing code was as below

JOINKEYS F1=IN1,FIELDS=(19,12,A),SORTED
JOINKEYS F2=IN2,FIELDS=(19,12,A),SORTED
JOIN UNPAIRED,F1,F2
JOIN UNPAIRED,F1,F2
REFORMAT FIELDS=(F1:RFFLD,F2:RFFLD,?)
OPTION COPY
OUTFIL FNAMES=OUT1,INCLUDE=(INC1,EQ,C'2')
BUILD=(1:223,11,16:C'INS',19:241,12,31:253,192)

User avatar
Frank Yaeger
Moderator
Posts: 812
Joined: Sat Feb 18, 2006 5:45 am
Location: San Jose, CA
Contact:

Post by Frank Yaeger » Mon Aug 29, 2011 10:44 pm

You have to generate symbols for each field (p,m) you need, e.g.

BLD1,223,11
BLD2,241,12
BLD3,253,192

(BLD1,16:C'INS',19:BLD2,31:BLD3)

You can also generate symbols for the columns if necessary, e.g.

COLA,16
COLB,19
COLC,31

(BLD1,COLA:C'INS',COLB:BLD2,COLC:BLD3)

You'll need to use DFSORT's arithmetic functions with the LRECL in various ways like I did for INC1 in my example.
Frank Yaeger - DFSORT Development Team (IBM) - yaeger@us.ibm.com
Specialties: JOINKEYS, FINDREP, WHEN=GROUP, ICETOOL, Symbols, Migration
=> DFSORT/MVS is on the Web at http://www.ibm.com/storage/dfsort

chanakya
Member
Posts: 21
Joined: Thu Aug 18, 2011 7:34 pm

Post by chanakya » Fri Sep 02, 2011 3:00 pm

Thanks a lot!! All symbols are working properly.

But I have one question about DATE
As per your direction, I tried to create symbol for below date
//SYMNAMES DD *
CRDATE,S'&LMON./&LDAY./&LYR4'

But I didn't get success.

So I created output file by using date function as shown below
OUTFIL FNAMES=OUT5,INCLUDE=(INC1,EQ,C'1'),
BUILD=(1:DATE,14:1,11,25:C'DEL',29:SEQNUM,6,ZD,69:BLD4)

DATE is displaying in below format
09/02/11

I want the date in below format
09/02/2011

What will be changes required?

Can we create symbol for below format?
CRDATE,S'&LMON./&LDAY./&LYR4'

User avatar
Frank Yaeger
Moderator
Posts: 812
Joined: Sat Feb 18, 2006 5:45 am
Location: San Jose, CA
Contact:

Post by Frank Yaeger » Fri Sep 02, 2011 10:09 pm

As per your direction, I tried to create symbol for below date
//SYMNAMES DD *
CRDATE,S'&LMON./&LDAY./&LYR4'

But I didn't get success.
I don't know what you did that wasn't successful, but you can certainly create the date that way. For example:

Code: Select all

//S1 EXEC PGM=SORT                     
//SYMNAMES DD *                        
CRDATE,S'&LMON./&LDAY./&LYR4'          
//SYSOUT DD SYSOUT=*                   
//SORTIN DD *                          
RECORD                                 
//SORTOUT DD SYSOUT=*                  
//SYSIN DD *                           
  OPTION COPY                          
  INREC BUILD=(CRDATE)                 
I just ran this job and SORTOUT has:

09/02/2011

You'd have to show me the job you ran and the output or error messages you got for me to tell you what you're doing wrong.

Alternatively, you can change DATE in your BUILD statement to DATE=(MD4/) to get what you want.
Frank Yaeger - DFSORT Development Team (IBM) - yaeger@us.ibm.com
Specialties: JOINKEYS, FINDREP, WHEN=GROUP, ICETOOL, Symbols, Migration
=> DFSORT/MVS is on the Web at http://www.ibm.com/storage/dfsort

chanakya
Member
Posts: 21
Joined: Thu Aug 18, 2011 7:34 pm

Post by chanakya » Mon Sep 05, 2011 10:13 am

Frank,

I am getting an error while identifying updated records. The process is working properly while identifying newly inserted records and existing deleted data.

//S1 EXEC PGM=ICETOOL
//TOOLMSG DD SYSOUT=*
//DFSMSG DD SYSOUT=*
//IN DD DSN=FLE2.IND.TEST.KX090SS.INPUT8,DISP=SHR
//T1 DD DSN=&&T1,UNIT=SYSDA,SPACE=(TRK,(1,1)),DISP=(,PASS)
//SYM DD DSN=&&S1,UNIT=SYSDA,SPACE=(TRK,(1,1)),DISP=(,PASS)
//TOOLIN DD *
COPY FROM(IN) TO(T1) USING(CTL1)
COPY FROM(T1) TO(SYM) USING(CTL2)
//CTL1CNTL DD *
OPTION STOPAFT=1
OUTFIL FTOV
//CTL2CNTL DD *
* SET UP LRECL AS 5,5,ZD
INREC BUILD=(1,4,5:1,2,BI,SUB,+4,TO=ZD,LENGTH=5)
* USE LRECL IN 5,5,ZD TO CREATE NEEDED SYMBOLS
OUTFIL FNAMES=SYM,VTOF,
BUILD=(C'LRECL,',5,5,80:X,/,
C'RFFLD,1,',5,5,80:X,/,
C'DATAL,',(5,5,ZD),SUB,+68,TO=ZD,LENGTH=5,/,
C'INC1,',(5,5,ZD,MUL,+2),ADD,+1,TO=ZD,LENGTH=5,C',1,CH',/,
C'BLD1,',(5,5,ZD),ADD,+1,TO=ZD,LENGTH=5,C',11',/,
C'BLD2,',(5,5,ZD),ADD,+19,TO=ZD,LENGTH=5,C',50',/,
C'BLD3,',(5,5,ZD),ADD,+69,TO=ZD,LENGTH=5,C',',
(5,5,ZD),SUB,+68,TO=ZD,LENGTH=5,/,
C'BLD4,69,',(5,5,ZD),SUB,+68,TO=ZD,LENGTH=5)
//S1 EXEC PGM=SORT
//SYSOUT DD SYSOUT=*
//SYMNAMES DD DSN=&&S1,DISP=(OLD,PASS)
//SYMNOUT DD SYSOUT=*
//IN1 DD DSN=INPUT8,DISP=SHR
//IN2 DD DSN=INPUT9,DISP=SHR
//OUT3 DD DSN=UPDATE9,
// DISP=(NEW,CATLG,DELETE),UNIT=SYSDA,
// LIKE=INPUT8
//OUT6 DD DSN=UPDCOUN9,
// DISP=(NEW,CATLG,DELETE),UNIT=SYSDA,
// LIKE=INPUT8
//OUT7 DD DSN=NOUPD9,
// DISP=(NEW,CATLG,DELETE),UNIT=SYSDA,
// LIKE=INPUT8
//SYSIN DD *
JOINKEYS F1=IN1,FIELDS=(19,50,A),SORTED
JOINKEYS F2=IN2,FIELDS=(19,50,A),SORTED
JOIN UNPAIRED,F1,F2
JOIN UNPAIRED,F1,F2
REFORMAT FIELDS=(F1:RFFLD,F2:RFFLD,?)
OPTION COPY
OUTFIL FNAMES=OUT3,INCLUDE=(INC1,EQ,C'B',AND,
(BLD4,BI,NE,BLD3,BI)),
BUILD=(1:BLD1,16:C'UPD',19:BLD2,69:BLD3)
OUTFIL FNAMES=OUT6,INCLUDE=(INC1,EQ,C'B',AND,
(BLD4,BI,NE,BLD3,BI)),
BUILD=(1:DATE,14:1,11,25:C'UPD',29:SEQNUM,6,ZD,69:BLD3)
OUTFIL FNAMES=OUT7,INCLUDE=(INC1,EQ,C'B',AND,
(BLD4,BI,EQ,BLD3,BI)),
BUILD=(1:DATE,14:1,11,29:SEQNUM,6,ZD,69:BLD4)
/*


SYMNOUT

------------------ SYMBOL TABLE -----------------
LRECL,665
RFFLD,1,665
DATAL,597
INC1,1331,1,CH
BLD1,666,11
BLD2,684,50
BLD3,734,597
BLD4,69,597



SYSOUT

1ICE270I 0 PROCESSING SYMNAMES STATEMENTS
ICE280I 1 ORIGINAL STATEMENTS FROM SYSIN FOLLOW
JOINKEYS F1=IN1,FIELDS=(19,50,A),SORTED
JOINKEYS F2=IN2,FIELDS=(19,50,A),SORTED
JOIN UNPAIRED,F1,F2
JOIN UNPAIRED,F1,F2
REFORMAT FIELDS=(F1:RFFLD,F2:RFFLD,?)
OPTION COPY
OUTFIL FNAMES=OUT3,INCLUDE=(INC1,EQ,C'B',AND,
(BLD4,BI,NE,BLD3,BI)),
BUILD=(1:BLD1,16:C'UPD',19:BLD2,69:BLD3)
OUTFIL FNAMES=OUT6,INCLUDE=(INC1,EQ,C'B',AND,
(BLD4,BI,NE,BLD3,BI)),
BUILD=(1:DATE,14:1,11,25:C'UPD',29:SEQNUM,6,ZD,69:BLD3)
OUTFIL FNAMES=OUT7,INCLUDE=(INC1,EQ,C'B',AND,
(BLD4,BI,EQ,BLD3,BI)),
BUILD=(1:DATE,14:1,11,29:SEQNUM,6,ZD,69:BLD4)
ICE282I 0 PERFORMING SYMBOL SUBSTITUTION AS NEEDED
ICE002I 0 DUPLICATE OR CONFLICTING JOIN STATEMENT
ICE411I 0 THIS IS THE JOINKEYS MAIN TASK FOR JOINING F1 AND F2
ICE416I 0 JOINKEYS IS USING THE F1 SUBTASK FOR IN1 - SEE JNF1JMSG
ICE416I 1 JOINKEYS IS USING THE F2 SUBTASK FOR IN2 - SEE JNF2JMSG
ICE419I 0 JOINED RECORDS: TYPE=F, LENGTH=1331
ICE201I H RECORD TYPE IS F - DATA STARTS IN POSITION 1
ICE805I 1 JOBNAME: TMPCMP7 , STEPNAME: S1
ICE802I 0 BLOCKSET TECHNIQUE IN CONTROL
ICE143I 0 BLOCKSET COPY TECHNIQUE SELECTED
ICE250I 0 VISIT http://www.ibm.com/storage/dfsort FOR DFSORT PAPERS, EX
ICE000I 1 - CONTROL STATEMENTS FOR 5694-A01, Z/OS DFSORT V1R12 - 23:27
JOINKEYS F1=IN1,FIELDS=(19,50,A),SORTED
JOINKEYS F2=IN2,FIELDS=(19,50,A),SORTED
JOIN UNPAIRED,F1,F2
JOIN UNPAIRED,F1,F2
ICE002I 0 DUPLICATE OR CONFLICTING JOIN STATEMENT
REFORMAT FIELDS=(F1:1,665,F2:1,665,?)
OPTION COPY
OUTFIL FNAMES=OUT3,INCLUDE=(1331,1,CH,EQ,C'B',AND,(69,597,BI,NE,734,59*
7,BI)),BUILD=(1:666,11,16:C'UPD',19:684,50,69:734,597)
OUTFIL FNAMES=OUT6,INCLUDE=(1331,1,CH,EQ,C'B',AND,(69,597,BI,NE,734,59*
7,BI)),BUILD=(1:DATE,14:1,11,25:C'UPD',29:SEQNUM,6,ZD,69*
:734,597)
OUTFIL FNAMES=OUT7,INCLUDE=(1331,1,CH,EQ,C'B',AND,(69,597,BI,EQ,734,59*
7,BI)),BUILD=(1:DATE,14:1,11,29:SEQNUM,6,ZD,69:69,597)
ICE411I 0 THIS IS THE JOINKEYS MAIN TASK FOR JOINING F1 AND F2
ICE416I 0 JOINKEYS IS USING THE F1 SUBTASK FOR IN1 - SEE JNF1JMSG
ICE416I 1 JOINKEYS IS USING THE F2 SUBTASK FOR IN2 - SEE JNF2JMSG
ICE419I 0 JOINED RECORDS: TYPE=F, LENGTH=1331
ICE201I H RECORD TYPE IS F - DATA STARTS IN POSITION 1
ICE221A 1 INVALID FIELD OR CONSTANT IN OUT3 IFTHEN 0 CONDITION 2
ICE751I 0 C5-K62149 C6-K90026 C7-K58148 C8-K90026 E9-K60824 E7-K90026
ICE052I 3 END OF DFSORT

Input File 8:

JD100-FILE 6460698 001 ª001ÿ001CTM-CD CTM 6460698 0002000120010010001
JD100-FILE 6460698 004 ª004ÿÿÿÿCTM-JKL CTM 6460698 0002000120010010002
JD100-FILE 6460698 005 ª005ÿÿÿÿCTM-NEP CTM 6460698 0002002120010010002
JD100-FILE 6460698 006 ª006ÿÿÿÿCTM-YWQ CTM 6460698 0002000120010010002
JD100-FILE 6460701 001 ª001ÿ001CTM-CD CTM 6460701 0002002220010010001
JD100-FILE 6460701 004 ª004ÿÿÿÿCTM-LMN CTM 6460701 0002002320010010002
JD100-FILE 6460701 005 ª005ÿÿÿÿCTM-YWQ CTM 6460701 0002002320010010002
JD100-FILE 6460701 006 ª006ÿÿÿÿCTM-XBM CTM 6460701 0002002320010010002
JD100-FILE 6460702 001 ª001ÿ001CTM-CD CTM 6460702 0002000120010010001
JD100-FILE 6460702 004 ª004ÿÿÿÿCTM-NEP CTM 6460702 0002002320010010002
JD100-FILE 6460702 005 ª005ÿÿÿÿCTM-YWQ CTM 6460702 0002000120010010002


Input File 9:

JD100-FILE 6460698 001 ª001ÿ001CTM-CD CTM 6460698 0002000120010010001
JD100-FILE 6460698 004 ª004ÿÿÿÿCTM-JKL CTM 6460698 0002000120010010002
JD100-FILE 6460698 005 ª005ÿÿÿÿCTM-NEP CTM 6460698 0002002120010010002
JD100-FILE 6460698 006 ª006ÿÿÿÿCTM-YWQ CTM 6460698 0002123450010010002
JD100-FILE 6460701 001 ª001ÿ001CTM-CD CTM 6460701 0002002220010010001
JD100-FILE 6460701 004 ª004ÿÿÿÿCTM-LMN CTM 6460701 0002002320010010002
JD100-FILE 6460701 005 ª005ÿÿÿÿCTM-YWQ CTM 6460701 0002002320010010002
JD100-FILE 6460701 006 ª006ÿÿÿÿCTM-XBM CTM 6460701 0002002320010010002
JD100-FILE 6460702 001 ª001ÿ001CTM-CD CTM 6460702 0002000120010010001
JD100-FILE 6460702 004 ª004ÿÿÿÿCTM-NEP CTM 6460702 0005662320010010002
JD100-FILE 6460702 005 ª005ÿÿÿÿCTM-YWQ CTM 6460702 0002000120010010002


I am not sure why it is showing an error.

chanakya
Member
Posts: 21
Joined: Thu Aug 18, 2011 7:34 pm

Post by chanakya » Mon Sep 05, 2011 10:22 am

It must show updated records as

JD100-FILE 6460698 006 ª006ÿÿÿÿCTM-YWQ CTM 6460698 0002123450010010002
JD100-FILE 6460702 004 ª004ÿÿÿÿCTM-NEP CTM 6460702 0005662320010010002

But it is showing an error saying that
ICE221A 1 INVALID FIELD OR CONSTANT IN OUT3 IFTHEN 0 CONDITION

Could you please tell me what is wrong with my job?

User avatar
Frank Yaeger
Moderator
Posts: 812
Joined: Sat Feb 18, 2006 5:45 am
Location: San Jose, CA
Contact:

Post by Frank Yaeger » Wed Sep 07, 2011 1:26 am

Code: Select all

OUTFIL FNAMES=OUT3,INCLUDE=(...(69,597,BI,NE,734,597,BI)),...
The problem is in the second INCLUDE condition for OUT3. The maximum length for a BI field for INCLUDE is 256, but you have 597 which is > 256.

See:

http://publibz.boulder.ibm.com/cgi-bin/ ... 0630155256
Frank Yaeger - DFSORT Development Team (IBM) - yaeger@us.ibm.com
Specialties: JOINKEYS, FINDREP, WHEN=GROUP, ICETOOL, Symbols, Migration
=> DFSORT/MVS is on the Web at http://www.ibm.com/storage/dfsort

chanakya
Member
Posts: 21
Joined: Thu Aug 18, 2011 7:34 pm

Post by chanakya » Wed Sep 07, 2011 4:25 pm

Then it is quite difficult to create symbols for all the segments having different record length. Actually I have created symbols as shown in above post. But now I am facing difficulty because each segment having different key length and data length.
For example

segment1 - key length-12 and data length -192
segment2 - key length-20 and data length -597

Could you please suggest any hint on this?

I refered one of the topic in your forum where you had suggested below logic


//S1 EXEC PGM=ICETOOL
//TOOLMSG DD SYSOUT=*
//DFSMSG DD SYSOUT=*
//IN1 DD DSN=... input file1 (VB/3100)
//IN2 DD DSN=... input file2 (VB/3100)
//T1 DD DSN=&&T1,UNIT=SYSDA,SPACE=(CYL,(5,5)),DISP=(,PASS)
//T2 DD DSN=&&T2,UNIT=SYSDA,SPACE=(CYL,(5,5)),DISP=(,PASS)
//T3 DD DSN=&&T3,UNIT=SYSDA,SPACE=(CYL,(5,5)),DISP=(,PASS)
//T4 DD DSN=&&T4,UNIT=SYSDA,SPACE=(CYL,(5,5)),DISP=(,PASS)
//T1C DD DSN=&&T1C,UNIT=SYSDA,SPACE=(TRK,(1,1)),DISP=(,PASS)
//T2C DD DSN=&&T2C,UNIT=SYSDA,SPACE=(TRK,(1,1)),DISP=(,PASS)
//T3C DD DSN=&&T3C,UNIT=SYSDA,SPACE=(TRK,(1,1)),DISP=(,PASS)
//CON DD DSN=*.T1C,VOL=REF=*.T1C,DISP=(OLD,PASS)
// DD DSN=*.T2C,VOL=REF=*.T2C,DISP=(OLD,PASS)
// DD DSN=*.T3C,VOL=REF=*.T3C,DISP=(OLD,PASS)
//OUT1 DD DSN=... output file1 (VB/3100)
//OUT2 DD DSN=... output file2 (VB/3100)
//OUT3 DD DSN=... output file3 (VB/3100)
//OUT4 DD DSN=... output file4 (VB/3100)
//TOOLIN DD *
COPY FROM(IN1) TO(T1) USING(CTL1)
COPY FROM(IN2) TO(T2) USING(CTL2)
COPY JKFROM USING(CTL3)
SPLICE FROM(T3) TO(T4) ON(7,9,BI) KEEPNODUPS VLENOVLY-
WITH(5,1) WITH(7,3096) USING(CTL4)
COPY FROM(CON) TO(OUT4)
//CTL1CNTL DD *
INREC BUILD=(1,4,5:C'BB',7:5)
//CTL2CNTL DD *
INREC BUILD=(1,4,5:C'VV',7:5)
//CTL3CNTL DD *
JOINKEYS F1=T1,FIELDS=(1,4,A,7,3096,A)
JOINKEYS F2=T2,FIELDS=(1,4,A,7,3096,A)
JOIN UNPAIRED,F1,F2,ONLY
SORT FIELDS=(7,9,BI,A,5,2,CH,A)
OUTFIL FNAMES=T3
//JNF1CNTL DD *
OPTION VLSHRT
//JNF2CNTL DD *
OPTION VLSHRT
//CTL4CNTL DD *
OUTFIL FNAMES=OUT1,INCLUDE=(5,2,CH,EQ,C'BB'),
BUILD=(1,4,7)
OUTFIL FNAMES=T1C,REMOVECC,NODETAIL,INCLUDE=(5,2,CH,EQ,C'BB'),
BUILD=(1,4,7),
TRAILER1=('Count of OUT1: ',COUNT=(M10,LENGTH=5))
OUTFIL FNAMES=OUT2,INCLUDE=(5,2,CH,EQ,C'VV'),
BUILD=(1,4,7)
OUTFIL FNAMES=T2C,REMOVECC,NODETAIL,INCLUDE=(5,2,CH,EQ,C'VV'),
BUILD=(1,4,7),
TRAILER1=('Count of OUT2: ',COUNT=(M10,LENGTH=5))
OUTFIL FNAMES=OUT3,INCLUDE=(5,2,CH,EQ,C'VB'),
BUILD=(1,4,7)
OUTFIL FNAMES=T3C,REMOVECC,NODETAIL,INCLUDE=(5,2,CH,EQ,C'VB'),
BUILD=(1,4,7),
TRAILER1=('Count of OUT3: ',COUNT=(M10,LENGTH=5))
/*


Will this code solve my difficulty?

chanakya
Member
Posts: 21
Joined: Thu Aug 18, 2011 7:34 pm

Post by chanakya » Wed Sep 07, 2011 4:35 pm

segment1 - key length-12 and data length -192


//S1 EXEC PGM=ICETOOL
//TOOLMSG DD SYSOUT=*
//DFSMSG DD SYSOUT=*
//IN DD DSN=INPUT1,DISP=SHR
//T1 DD DSN=&&T1,UNIT=SYSDA,SPACE=(TRK,(1,1)),DISP=(,PASS)
//SYM DD DSN=&&S1,UNIT=SYSDA,SPACE=(TRK,(1,1)),DISP=(,PASS)
//TOOLIN DD *
COPY FROM(IN) TO(T1) USING(CTL1)
COPY FROM(T1) TO(SYM) USING(CTL2)
//CTL1CNTL DD *
OPTION STOPAFT=1
OUTFIL FTOV
//CTL2CNTL DD *
* SET UP LRECL AS 5,5,ZD
INREC BUILD=(1,4,5:1,2,BI,SUB,+4,TO=ZD,LENGTH=5)
* USE LRECL IN 5,5,ZD TO CREATE NEEDED SYMBOLS
OUTFIL FNAMES=SYM,VTOF,
BUILD=(C'LRECL,',5,5,80:X,/,
C'RFFLD,1,',5,5,80:X,/,
C'DATAL,',(5,5,ZD),SUB,+68,TO=ZD,LENGTH=5,/,
C'INC1,',(5,5,ZD,MUL,+2),ADD,+1,TO=ZD,LENGTH=5,C',1,CH',/,
C'BLD1,',(5,5,ZD),ADD,+1,TO=ZD,LENGTH=5,C',11',/,
C'BLD2,',(5,5,ZD),ADD,+19,TO=ZD,LENGTH=5,C',50',/,
C'BLD3,',(5,5,ZD),ADD,+69,TO=ZD,LENGTH=5,C',',
(5,5,ZD),SUB,+68,TO=ZD,LENGTH=5,/,
C'BLD4,69,',(5,5,ZD),SUB,+68,TO=ZD,LENGTH=5)
//S2 EXEC PGM=SORT
//SYSOUT DD SYSOUT=*
//SYMNAMES DD DSN=&&S1,DISP=(OLD,PASS)
//SYMNOUT DD SYSOUT=*
//IN1 DD DSN=INPUT1,DISP=SHR
//IN2 DD DSN=INPUT2,DISP=SHR
//OUT1 DD DSN=INSERT1,
// DISP=(NEW,CATLG,DELETE),UNIT=SYSDA,
// LIKE=INPUT2
//OUT2 DD DSN=DELETE1,
// DISP=(NEW,CATLG,DELETE),UNIT=SYSDA,
// LIKE=INPUT2
//OUT3 DD DSN=UPDATE1,
// DISP=(NEW,CATLG,DELETE),UNIT=SYSDA,
// LIKE=INPUT2
//OUT4 DD DSN=INSCOUN1,
// DISP=(NEW,CATLG,DELETE),UNIT=SYSDA,
// LIKE=INPUT2
//OUT5 DD DSN=DELCOUN1,
// DISP=(NEW,CATLG,DELETE),UNIT=SYSDA,
// LIKE=INPUT2
//OUT6 DD DSN=UPDCOUN1,
// DISP=(NEW,CATLG,DELETE),UNIT=SYSDA,
// LIKE=INPUT2
//OUT7 DD DSN=NOUPD1,
// DISP=(NEW,CATLG,DELETE),UNIT=SYSDA,
// LIKE=INPUT2
//SYSIN DD *
JOINKEYS F1=IN1,FIELDS=(19,12,A),SORTED
JOINKEYS F2=IN2,FIELDS=(19,12,A),SORTED
JOIN UNPAIRED,F1,F2
JOIN UNPAIRED,F1,F2
REFORMAT FIELDS=(F1:RFFLD,F2:RFFLD,?)
OPTION COPY
OUTFIL FNAMES=OUT1,INCLUDE=(INC1,EQ,C'2'),
BUILD=(1:BLD1,16:C'INS',19:BLD2,69:BLD3)
OUTFIL FNAMES=OUT2,INCLUDE=(INC1,EQ,C'1'),
BUILD=(1:1,11,16:C'DEL',19:19,50,69:BLD4)
OUTFIL FNAMES=OUT3,INCLUDE=(INC1,EQ,C'B',AND,
(BLD4,BI,NE,BLD3,BI)),
BUILD=(1:BLD1,16:C'UPD',19:BLD2,69:BLD3)
OUTFIL FNAMES=OUT4,INCLUDE=(INC1,EQ,C'2'),
BUILD=(1:DATE,14:BLD1,25:C'INS',29:SEQNUM,6,ZD,69:BLD3)
OUTFIL FNAMES=OUT5,INCLUDE=(INC1,EQ,C'1'),
BUILD=(1:DATE,14:1,11,25:C'DEL',29:SEQNUM,6,ZD,69:BLD4)
OUTFIL FNAMES=OUT6,INCLUDE=(INC1,EQ,C'B',AND,
(BLD4,BI,NE,BLD3,BI)),
BUILD=(1:DATE,14:1,11,25:C'UPD',29:SEQNUM,6,ZD,69:BLD3)
OUTFIL FNAMES=OUT7,INCLUDE=(INC1,EQ,C'B',AND,
(BLD4,BI,EQ,BLD3,BI)),
BUILD=(1:DATE,14:1,11,29:SEQNUM,6,ZD,69:BLD4)
/*



segment2 - key length-20 and data length -597

The changed statement is

JOINKEYS F1=IN1,FIELDS=(19,20,A),SORTED
JOINKEYS F2=IN2,FIELDS=(19,20,A),SORTED



I want to consolidate these 2 jobs in one. Please suggest any hint. Because I am facing difficulty while creating symbols when logical record length is greter than 256

User avatar
Frank Yaeger
Moderator
Posts: 812
Joined: Sat Feb 18, 2006 5:45 am
Location: San Jose, CA
Contact:

Post by Frank Yaeger » Wed Sep 07, 2011 10:06 pm

As I said earlier:
Well, theoretically it would be possible. You could convert the first record of the input file to VB, determine it's FB LRECL as RDW length-4 and then generate symbols for the positions you need based on that LRECL, and use those symbols in the JOINKEYS step. But it would be quite tricky and I don't have time to do it for you.
I also don't have time to figure out what you're trying to do, let alone fix it for you
Sorry.

Maybe you'd be better off writing a program in your favorite programming language.
Frank Yaeger - DFSORT Development Team (IBM) - yaeger@us.ibm.com
Specialties: JOINKEYS, FINDREP, WHEN=GROUP, ICETOOL, Symbols, Migration
=> DFSORT/MVS is on the Web at http://www.ibm.com/storage/dfsort

chanakya
Member
Posts: 21
Joined: Thu Aug 18, 2011 7:34 pm

Post by chanakya » Thu Sep 15, 2011 5:49 pm

Hi Frank,

Dont say sorry. You helped me a lot!! Your guidance worked for me. I do have one last question on this forum.
Last edited by chanakya on Thu Sep 15, 2011 5:55 pm, edited 1 time in total.

Post Reply

FREE TUTORIALS

Tutorials
Free tutorials from mainframegurukul
  • JCL Tutorial
    Covers all important JCL concepts.
  • Cobol Tutorial
    This tutorials covers all Cobol Topics from STRING to COMP-3.
  • DB2 Tutorial
    DB2 Tutorial focuses on DB2 COBOL Programming.
  • SORT Tutorial
    This Tutorial covers all important aspects of DFSORT with examples
  • CICS Tutorial
    This CICS tutorial covers CICS concepts and CICS Basics, CICS COBOL Programming.
Interview
Mainframe Interview questions



Other References
Mainframe Tools and others