Portal | IBM Manuals | Downloads | Products | Refer | Info | Programs | JCLs | Forum Rules*| Site Map | Mainframe CD 
IBMMAINFRAMES.com - IBM Mainframe Support Forums Index
 
Register
 
IBMMAINFRAMES.com - IBM Mainframe Support Forums Index FAQ Search Memberlist Usergroups Profile Log in to check your private messages Log in
 
[Solved]Convert three records to one record

 
Post new topic   Reply to topic    IBMMAINFRAMES.com Support Forums -> DFSORT/ICETOOL
Author Message
meenasomu

New User


Joined: 15 Sep 2005
Posts: 18

PostPosted: Thu Sep 15, 2005 6:25 pm    Post subject: Convert three records to one record
Reply with quote

Hi,

My requirement is to convert three records from input file to output file.

i.e

I/p file

Rec1 - ABC
Rec2 - DEF
Rec3 - GHI
Rec4 - JKL
Rec5 - MNO
Rec6 - PQR

O/p Should be like

Rec1 - ABCDEFGHI
Rec2 - JKLMNOPQR

Is there any possibility to do this with a JCL?

Thanks in Advance.

Regards,
Meena.
Back to top
View user's profile Send private message
References
Frank Yaeger

DFSORT Moderator


Joined: 15 Feb 2005
Posts: 4684
Location: San Jose, CA

PostPosted: Fri Sep 23, 2005 3:20 am    Post subject:
Reply with quote

Meena,

You can do this with DFSORT's ICETOOL, but you need to tell me the RECFM and LRECL of your input file before I can show you how.
Back to top
View user's profile Send private message
suganthyprabha

Active User


Joined: 28 Jul 2005
Posts: 58

PostPosted: Thu Sep 29, 2005 11:54 am    Post subject: Re: Convert three records to one record
Reply with quote

Hi Frank,

I am also having the same requirement.

Recfm: FB, Lercl:80

Can u please give me the sample code for this?

Thanks and Regards,
Suganthy.
Back to top
View user's profile Send private message
priyesh.agrawal

Global Moderator


Joined: 28 Mar 2005
Posts: 1509
Location: Chicago, IL

PostPosted: Thu Sep 29, 2005 1:26 pm    Post subject: Re: Convert three records to one record
Reply with quote

If I m not wrong.... Its a two step approach,
1> Firstly I/P file have to be divided into three files containing records according to their rec number.
In this case First File having Rec Number 1, 4, 7, 10...onwards.
Second File ...2, 5, 8, 11.....
Third File ....3, 6, 9, 12.......

DFSORT's SPLIT verb can be used for this to achieve.

2> Second step is to combine the records from three file into one file, i.e. O/P File, for that another field can be added in the files as rec number.
Then recs from the three files can be combined basis on rec number.

DFSORT's SPLICE should be used for that.

Frank.... Do we have any other direct step for this......

Regards,

Priyesh.
Back to top
View user's profile Send private message
priyesh.agrawal

Global Moderator


Joined: 28 Mar 2005
Posts: 1509
Location: Chicago, IL

PostPosted: Thu Sep 29, 2005 2:12 pm    Post subject: Re: Convert three records to one record
Reply with quote

Code below is for the I/P rec example given by the poster in original query.
LRCEL=80 & RECFM=FB assumed.

Code:
//STEP1 EXEC PGM=ICEMAN                                 
//SYSOUT DD SYSOUT=*                                   
//SORTIN DD DSN=USERID.RECORDS.INPUT,DISP=OLD         
//OUT1 DD DSN=USERID.RECORDS.SPLIT1,
//        DISP=(NEW,CATLG), 
//        SPACE=(TRKS,(100,100)),UNIT=SYSDA                 
//OUT2 DD DSN=USERID.RECORDS.SPLIT2,
//        DISP=(NEW,CATLG), 
//        SPACE=(TRKS,(100,100)),UNIT=SYSDA       
//OUT3 DD DSN=USERID.RECORDS.SPLIT3,
//        DISP=(NEW,CATLG), 
//        SPACE=(TRKS,(100,100)),UNIT=SYSDA           
//SYSIN DD *                                           
  SORT FIELDS=(1,3,FS,A)                               
  OUTFIL FNAMES=(OUT1,OUT2,OUT3),SPLIT                 
/*                                                     
//*                                                     
//STEP2    EXEC  PGM=ICETOOL                                           
//TOOLMSG   DD  SYSOUT=*                                             
//DFSMSG    DD  SYSOUT=*                                             
//IN1    DD DSN=USERID.RECORDS.SPLIT1,DISP=SHR                       
//IN2    DD DSN=USERID.RECORDS.SPLIT2,DISP=SHR                       
//IN3    DD DSN=USERID.RECORDS.SPLIT3,DISP=SHR                       
//TMP1   DD DSN=&&TEMP1,DISP=(MOD,PASS),SPACE=(TRK,(5,5)),UNIT=SYSDA
//TMP2   DD DSN=&&TEMP2,DISP=(MOD,PASS),SPACE=(TRK,(5,5)),UNIT=SYSDA
//TMP3   DD DSN=&&TEMP3,DISP=(MOD,PASS),SPACE=(TRK,(5,5)),UNIT=SYSDA
//OUT    DD DSN=USERID.RECORDS.OUT,DISP=(NEW,CATLG),                 
//        SPACE=(CYL,(5,5)),UNIT=SYSDA                               
//TOOLIN DD *                                                       
 COPY FROM(IN1) TO(TMP1) USING(CTL1)                                 
 COPY FROM(IN2) TO(TMP1) USING(CTL2)                                 
 SPLICE FROM(TMP1) TO(TMP2) ON(7,8,PD) WITH(4,3) USING(CTL3)         
 COPY FROM(TMP2) TO(TMP3) USING(CTL4)                               
 COPY FROM(IN3) TO(TMP3) USING(CTL5)                                 
 SPLICE FROM(TMP3) TO(OUT) ON(10,8,PD) WITH(7,3) USING(CTL6)         
/*                                                                   
//CTL1CNTL DD *                                 
  OUTREC FIELDS=(1:1,3,7:SEQNUM,8,PD)           
/*                                               
//CTL2CNTL DD *                                 
  OUTREC FIELDS=(4:1,3,7:SEQNUM,8,PD)           
/*                                               
//CTL3CNTL DD *                                 
 OUTFIL FNAMES=TMP2,OUTREC=(1,6)                 
/*                                               
//CTL4CNTL DD *                                 
  OUTREC FIELDS=(1:1,6,10:SEQNUM,8,PD)           
/*                                               
//CTL5CNTL DD *                                 
  OUTREC FIELDS=(7:1,3,10:SEQNUM,8,PD)           
/*                                               
//CTL6CNTL DD *                                 
 OUTFIL FNAMES=OUT,OUTREC=(1,9)                 
/*                                               
//                                                                       


Input Rec:
Code:
ABC
DEF
GHI
JKL
MNO
PQR
STU
VWX
YZ1
234


Output:
Code:
ABCDEFGHI
JKLMNOPQR
STUVWXYZ1


Regards,

Priyesh.
Back to top
View user's profile Send private message
Frank Yaeger

DFSORT Moderator


Joined: 15 Feb 2005
Posts: 4684
Location: San Jose, CA

PostPosted: Thu Sep 29, 2005 9:14 pm    Post subject:
Reply with quote

Here's a much more efficient way to do this with DFSORT's ICETOOL:

Code:

//S1    EXEC  PGM=ICETOOL
//TOOLMSG DD SYSOUT=*
//DFSMSG DD SYSOUT=*
//IN DD DSN=...  input file (FB/80)
//T1 DD DSN=&&T1,UNIT=SYSDA,SPACE=(CYL,(5,5)),DISP=(,PASS)
//OUT DD DSN=...  output file (FB/80)
//TOOLIN DD *
* Reformat each set of three records to:
* xxx|bbb|bbb|...|seqnum
* bbb|yyy|bbb|...|seqnum
* bbb|bbb|zzz|...|seqnum
COPY FROM(IN) TO(T1) USING(CTL1)
* Splice the records on seqnum to get:
* xxx|yyy|zzz|...|seqnum
* Remove seqnum
SPLICE FROM(T1) TO(OUT) ON(81,5,ZD) -
  WITHEACH WITH(4,3) WITH(7,3) USING(CTL2)
/*
//CTL1CNTL DD *
* Add seqnum1 in 81-85
  INREC IFTHEN=(WHEN=INIT,OVERLAY=(81:SEQNUM,5,ZD,START=0)),
* Get x=seqnum1//3 in 81-85
     IFTHEN=(WHEN=INIT,OVERLAY=(81:81,5,ZD,MOD,+3,TO=ZD,LENGTH=5)),
* If x=0, reformat the input record to:
* xxx|bbb|bbb|...|seqnum2
     IFTHEN=(WHEN=(81,5,ZD,EQ,+0),BUILD=(1:1,3,81:SEQNUM,5,ZD)),
* If x=1, reformat the input record to:
* bbb|yyy|bbb|...|seqnum2
     IFTHEN=(WHEN=(81,5,ZD,EQ,+1),BUILD=(4:1,3,81:SEQNUM,5,ZD)),
* If x=2, reformat the input record to:
* bbb|bbb|zzz|...|seqnum2
     IFTHEN=(WHEN=(81,5,ZD,EQ,+2),BUILD=(7:1,3,81:SEQNUM,5,ZD))
/*
//CTL2CNTL DD *
  OUTFIL FNAMES=OUT,BUILD=(1,80)
/*


You'll need z/OS DFSORT V1R5 PTF UQ95214 or DFSORT R14 PTF UQ95213 (Dec, 2004) in order to use DFSORT's IFTHEN and OVERLAY functions. Only DFSORT has these functions, so if you don't have DFSORT, you won't be able to use them. If you do have DFSORT, but you don't have the Dec, 2004 PTF, ask your System Programmer to install it (it's free). For complete details on all of the new DFSORT and ICETOOL functions available with the Dec, 2004 PTF, see:

www.ibm.com/servers/storage/support/software/sort/mvs/pdug/
Back to top
View user's profile Send private message
priyesh.agrawal

Global Moderator


Joined: 28 Mar 2005
Posts: 1509
Location: Chicago, IL

PostPosted: Fri Sep 30, 2005 1:28 pm    Post subject: Re: Convert three records to one record
Reply with quote

Thanks Frank....Thats why I love watching DFSORTs Queries.....

Regards,

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

Active User


Joined: 28 Jul 2005
Posts: 58

PostPosted: Fri Sep 30, 2005 2:10 pm    Post subject: Re: Convert three records to one record
Reply with quote

Hi,

Thank so much Priyesh and Frank.

Dfsort is really good and interesting.

Thanks and Regards,
Suganthy.
Back to top
View user's profile Send private message
meenasomu

New User


Joined: 15 Sep 2005
Posts: 18

PostPosted: Fri Sep 30, 2005 9:30 pm    Post subject: Re: Convert three records to one record
Reply with quote

Thank You So much Frank and Priyesh.

ICETOOL is amazing with its options...Thanks a lot to you.
icon_biggrin.gif

Regards,
Meena.
Back to top
View user's profile Send private message
Frank Yaeger

DFSORT Moderator


Joined: 15 Feb 2005
Posts: 4684
Location: San Jose, CA

PostPosted: Fri Sep 30, 2005 9:37 pm    Post subject:
Reply with quote

Quote:
Dfsort is really good and interesting.


Quote:
ICETOOL is amazing with its options


Glad you like them! As the developer responsible for DFSORT's ICETOOL and many of the DFSORT functions, it's quite rewarding to hear comments like that. icon_biggrin.gif
Back to top
View user's profile Send private message
Display posts from previous:   
Post new topic   Reply to topic    IBMMAINFRAMES.com Support Forums -> DFSORT/ICETOOL All times are GMT + 6 Hours
Page 1 of 1