Portal | Manuals | References | Downloads | Info | Programs | JCLs | Master the Mainframes
IBM Mainframe Computers Forums Index
 
Register
 
IBM Mainframe Computers Forums Index Mainframe: Search IBM Mainframe Forum: FAQ Memberlist Usergroups Profile Log in to check your private messages Log in
 

 

Is there a means to simplify the things ?

 
Post new topic   Reply to topic    IBMMAINFRAMES.com Support Forums -> DFSORT/ICETOOL
View previous topic :: :: View next topic  
Author Message
frenaud

New User


Joined: 15 Feb 2010
Posts: 5
Location: PARIS

PostPosted: Mon Feb 15, 2010 4:59 pm    Post subject: Is there a means to simplify the things ?
Reply with quote

Hi guys,

Below are the statements I've used to produce my output.
It works well, but I'm sure it could be more effective.
So, could you help me in this way ?

Code:
//S1   EXEC  PGM=ICETOOL                                             
//TOOLMSG  DD  SYSOUT=*                                               
//DFSMSG   DD  SYSOUT=*                                               
//IN1      DD  DISP=SHR,DSN=ADCD.SIN1VB       VB 20 (4+16)           
//IN2      DD  DISP=SHR,DSN=ADCD.SIN2FB       FB 8                   
//T1       DD DSN=&&TEMP1,                   VB 20+4+12 (4+16 + 4+12)
//  UNIT=SYSDA,SPACE=(TRK,(5,0)),DISP=(MOD,PASS)                     
//T2       DD DSN=&&TEMP2,                   VB 20+4+12 (4+16 + 4+12)
//  UNIT=SYSDA,SPACE=(TRK,(5,0)),DISP=(MOD,PASS)                     
//OUT      DD  DISP=SHR,DSN=ADCD.SOUTVB       VB 20 (4+16)           
//TOOLIN   DD *                                                       
 COPY FROM(IN1) TO(T1) USING(CTL1)                                   
 COPY FROM(IN2) TO(T1) USING(CTL2)                                   
 SPLICE FROM(T1) TO(T2) ON(25,12,PD) KEEPNODUPS WITHEACH -           
 WITH(10,8) USING(CTL3)                                               
 COPY FROM(T2) TO(OUT) USING(CTL4)                                   
/*                                                                   
//CTL1CNTL DD *                                                       
  OUTFIL FNAMES=T1,BUILD=(1,4,5,16,25:SEQNUM,12,PD),VLFILL=C' '       
/*                                                   
//CTL2CNTL DD *                                     
  OUTFIL FNAMES=T1,FTOV,BUILD=(6:1,8,21:SEQNUM,12,PD)
/*                                                   
//CTL3CNTL DD *                                     
  OUTFIL FNAMES=T2,                                 
      OVERLAY=(6:6,8)                               
/*                                                   
//CTL4CNTL DD *                                     
  OUTFIL FNAMES=OUT,                                 
    IFTHEN=(WHEN=NONE,BUILD=(1,4,5,16))             
/*                                                   




here are :
- the first input (recfm=VB lrecl=20) :
----+----1----+-
aaaaabbbbbbbbccc
dddddeeeeeee fff
gggg hhhhhhhh ii
jjjjjkkkkkkkklll
dddddeeeeeee fff
mmm   nnnnn   o

- the second input (recfm=FB lrecl=8) :
----+---
11111111
22222   
 3333333
  4444 
22222   
  555   

- the output is like this (recfm=VB lrecl=20):
----+----1----+-
aaaaa11111111ccc
ddddd22222   fff
gggg  3333333 ii
jjjjj  4444  lll
ddddd22222   fff
mmm    555    o


In fact, the field (1,8) in the second input file replaces the field in the first input file at offset 6.

Thanks.
Back to top
View user's profile Send private message

Skolusu

Senior Member


Joined: 07 Dec 2007
Posts: 2205
Location: San Jose

PostPosted: Mon Feb 15, 2010 11:30 pm    Post subject:
Reply with quote

frenaud,

With z/OS DFSORT V1R5 PTF UK51706 or z/OS DFSORT V1R10 PTF UK51707 (Nov, 2009), DFSORT now supports the JOINKEYS function which can create the seqnum and use that as a match key as shown below to give you the desired results

Code:

//STEP0100 EXEC PGM=SORT                           
//SYSOUT   DD SYSOUT=*                             
//SORTJNF1 DD DSN=Your input FB 8 byte file,DISP=SHR
//SORTJNF2 DD DSN=your input VB 20 byte file,DISP=SHR
//SORTOUT  DD SYSOUT=*                             
//SYSIN    DD *                                   
  OPTION COPY                                     
  JOINKEYS FILES=F1,FIELDS=(09,12,A)               
  JOINKEYS FILES=F2,FIELDS=(05,12,A)               
  REFORMAT FIELDS=(F2:1,4,17,5,F1:1,8,F2:30)       
//JNF1CNTL DD *                                   
  INREC BUILD=(1,8,SEQNUM,12,ZD)                   
//JNF2CNTL DD *                                   
  INREC BUILD=(1,4,SEQNUM,12,ZD,5)                 
//*


For complete details on JOINKEYS and the other new functions available with the Nov, 2009 DFSORT PTF, see:

http://www.ibm.com/support/docview.wss?rs=114&uid=isg3T7000174

If your shop doesn't have the PTF installed , here is an alternative version which will give you the desired results

Code:

//STEP0100 EXEC PGM=SORT                                           
//SYSOUT   DD SYSOUT=*                                             
//SORTIN   DD DSN=Your 8 byte FB file,DISP=SHR
//SORTOUT  DD DSN=&&T1,DISP=(,PASS),SPACE=(CYL,(X,Y),RLSE)         
//HDR      DD DSN=&&HD,DISP=(,PASS),SPACE=(TRK,(1,0),RLSE)         
//SYSIN    DD *                                                   
  SORT FIELDS=COPY                                                 
  INREC BUILD=(1,8,16:X)                                           
  OUTFIL FTOV                                                     
  OUTFIL FNAMES=HDR,ENDREC=1,FTOV,BUILD=(16C'$')                   
//*                                                                 
//STEP0200 EXEC PGM=SORT                                           
//SYSOUT   DD SYSOUT=*                                             
//SORTIN   DD DSN=&&HD,DISP=SHR,VOL=REF=*.STEP0100.HDR             
//         DD DSN=&&T1,DISP=SHR                                   
//         DD DSN=&&HD,DISP=SHR,VOL=REF=*.STEP0100.HDR             
//         DD DSN=Your VB 20 byte file,DISP=SHR
//SORTOUT  DD SYSOUT=*
//SYSIN    DD *                                                   
  INREC IFTHEN=(WHEN=INIT,BUILD=(1,4,13X,5)),                     
  IFTHEN=(WHEN=GROUP,BEGIN=(18,16,CH,EQ,C'$$$$$$$$$$$$$$$$'),     
  PUSH=(5:ID=1,SEQ=12))                                           
  SORT FIELDS=(6,12,CH,A),EQUALS                                   
  OUTREC IFTHEN=(WHEN=GROUP,BEGIN=(5,1,ZD,EQ,1,AND,6,12,ZD,GT,1), 
  PUSH=(23:18,8),RECORDS=2)                                       
  OUTFIL INCLUDE=(5,1,ZD,EQ,2,AND,6,12,ZD,GT,1),BUILD=(1,4,18)     
//*
Back to top
View user's profile Send private message
frenaud

New User


Joined: 15 Feb 2010
Posts: 5
Location: PARIS

PostPosted: Tue Feb 16, 2010 4:44 pm    Post subject:
Reply with quote

Thanks Kolusu.

But my April, 2006 DFSORT V1R5 level won't permit any of the 2 solutions.

So, can't we bring together CTL3CNTL and CTL4CNTL ?

Thanks.
Back to top
View user's profile Send private message
Skolusu

Senior Member


Joined: 07 Dec 2007
Posts: 2205
Location: San Jose

PostPosted: Tue Feb 16, 2010 11:56 pm    Post subject: Reply to: Is there a means to simplify the things ?
Reply with quote

frenaud,

Here is a DFSORT/ICETOOL JCl which will give you the desired results.

Code:

//STEP0100 EXEC PGM=ICETOOL                                         
//TOOLMSG  DD SYSOUT=*                                               
//DFSMSG   DD SYSOUT=*                                               
//FB       DD DSN=Your FB file,DISP=SHR
//VB       DD DSN=your VB file,DISP=SHR
//TEMP     DD DSN=&&TEMP,DISP=(MOD,PASS),SPACE=(CYL,(X,Y),RLSE)     
//OUT      DD SYSOUT=*
//TOOLIN   DD *                                                     
  COPY FROM(VB) USING(CTL1)                                         
  COPY FROM(FB) USING(CTL2)                                         
  SPLICE FROM(TEMP) TO(OUT) ON(5,12,ZD) KEEPNODUPS WITHEACH -       
  WITH(23,8) USING(CTL3)                                           
//CTL1CNTL DD *                                                     
  INREC BUILD=(1,4,SEQNUM,12,ZD,C'V',5)                             
  OUTFIL FNAMES=TEMP                                                 
//CTL2CNTL DD *                                                     
  INREC BUILD=(SEQNUM,12,ZD,C'F',5X,1,8,3X)                         
  OUTFIL FNAMES=TEMP,FTOV                                           
//CTL3CNTL DD *                                                     
  OUTFIL FNAMES=OUT,INCLUDE=(17,1,CH,EQ,C'V'),BUILD=(1,4,18)         
//* 
Back to top
View user's profile Send private message
frenaud

New User


Joined: 15 Feb 2010
Posts: 5
Location: PARIS

PostPosted: Wed Feb 17, 2010 3:58 pm    Post subject:
Reply with quote

It works. Thanks Kolusu.
Back to top
View user's profile Send private message
View previous topic :: :: View next topic  
Post new topic   Reply to topic    IBMMAINFRAMES.com Support Forums -> DFSORT/ICETOOL All times are GMT + 6 Hours
Page 1 of 1

 

Search our Forum:

Similar Topics
Topic Author Forum Replies Posted
No new posts Null Indicator value -2 means in Embe... deepak_shrivastava DB2 2 Wed Jan 06, 2016 10:27 pm
No new posts What's the +1 means in CLC FOUR,SIX+1 ? jackzhang75 PL/I & Assembler 2 Tue May 19, 2015 2:02 am
No new posts Securely storing ftp password in acf2... harisukumaran CA Products 1 Fri Sep 26, 2014 5:15 am
No new posts Things to Avoid while writing cobol p... cmsmoon COBOL Programming 3 Thu Apr 04, 2013 6:22 pm
No new posts What Does "OC" Instruction ... enrico-sorichetti PL/I & Assembler 7 Tue Apr 17, 2012 12:52 pm


Facebook
Back to Top
 
Mainframe Wiki | Forum Rules | Bookmarks | Subscriptions | FAQ | Tutorials | Contact Us