MVSFORUMS.com Forum Index MVSFORUMS.com
A Community of and for MVS Professionals
 
 FAQFAQ   SearchSearch   Quick Manuals   RegisterRegister 
 ProfileProfile   Log in to check your private messagesLog in to check your private messages   Log inLog in 

Split a file to multiple files

 
Post new topic   Reply to topic   printer-friendly view    MVSFORUMS.com Forum Index -> Utilities
View previous topic :: View next topic  
Author Message
fidelity
Beginner


Joined: 26 Feb 2007
Posts: 5
Topics: 1

PostPosted: Mon Feb 26, 2007 1:14 pm    Post subject: Split a file to multiple files Reply with quote

I need to split a FB file to 600 files. We have a file with data for all the 600 distribution locations. I have to seperate the data for each location and write to 600 different files. The input file is already sorted by Location.

Once the files are created I need to FTP them to a central repositry.


Can you please suggest which is the best way to accomplish the task.

Thanks
Back to top
View user's profile Send private message
kolusu
Site Admin
Site Admin


Joined: 26 Nov 2002
Posts: 12378
Topics: 75
Location: San Jose

PostPosted: Mon Feb 26, 2007 2:05 pm    Post subject: Reply with quote

There are many ways to do it. You need to provide more details. Do you know all the distribution locations right away or is it dynamically changing ? If the distribution list is fixed then it is very easy to split.

ex:

Code:

//STEP0100 EXEC PGM=SORT
//SYSOUT   DD SYSOUT=* 
//SORTIN   DD *         
111                     
222                     
333                     
444                     
555                     
666                     
//FILE001  DD SYSOUT=* 
//FILE002  DD SYSOUT=* 
//FILE003  DD SYSOUT=* 
//FILE004  DD SYSOUT=* 
//FILE005  DD SYSOUT=* 
//FILE006  DD SYSOUT=* 
//SYSIN    DD *   
  SORT FIELDS=COPY
  OUTFIL FNAMES=FILE001,INCLUDE=(1,3,CH,EQ,C'111')
  OUTFIL FNAMES=FILE002,INCLUDE=(1,3,CH,EQ,C'222')
  OUTFIL FNAMES=FILE003,INCLUDE=(1,3,CH,EQ,C'333')
  OUTFIL FNAMES=FILE004,INCLUDE=(1,3,CH,EQ,C'444')
  OUTFIL FNAMES=FILE005,INCLUDE=(1,3,CH,EQ,C'555')
  OUTFIL FNAMES=FILE006,INCLUDE=(1,3,CH,EQ,C'666')
/*


If the distribution locations are unknown then you need to generate dynamic control cards and then process them.

Please provide us with LRECL and RECFM and position/format of the distributon center and may be we can suggest something.

Is easytrieve an option?

Kolusu
_________________
Kolusu
www.linkedin.com/in/kolusu
Back to top
View user's profile Send private message Send e-mail Visit poster's website
fidelity
Beginner


Joined: 26 Feb 2007
Posts: 5
Topics: 1

PostPosted: Mon Feb 26, 2007 2:29 pm    Post subject: Reply with quote

Thank you for the reply.


The Master file has two type of records for each Location which has done business for that day.

First bytes :

1 - Location details record
2 - Data for that Location

Next four Bytes:
Location number

Data is sorted by Distribution Location.

For example :


17777XXXXXXXXXXXXXXXXXXXXXXXXX
27777AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
27777BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB
27777CCCCCCCCCCCCCCCCCCCCCCCCCCCCCC
27777DDDDDDDDDDDDDDDDDDDDDDDDDDDDDD
18888XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
28888AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
28888BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB
28888CCCCCCCCCCCCCCCCCCCCCCCCCCCCCC


LRECL = 180
RECFM = FB


It is not mandatory that we will have data for every location. The Location details are available on a DB2 table also.


Easytrieve is NOT an option.


Thanks
Back to top
View user's profile Send private message
kolusu
Site Admin
Site Admin


Joined: 26 Nov 2002
Posts: 12378
Topics: 75
Location: San Jose

PostPosted: Mon Feb 26, 2007 2:59 pm    Post subject: Reply with quote

Fidelity,

try this JCL. The first step generates the file allocation depending on the distribution location. The second step then submits the job via INTRDR.

Code:

//STEP0100 EXEC PGM=SORT                                 
//SYSOUT   DD SYSOUT=*                                   
//SORTIN   DD *                                         
17777XXXXXXXXXXXXXXXXXXXXXXXXX                           
27777AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA                 
27777BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB                 
27777CCCCCCCCCCCCCCCCCCCCCCCCCCCCCC                     
27777DDDDDDDDDDDDDDDDDDDDDDDDDDDDDD                     
18888XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX                     
28888AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA                 
28888BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB                 
28888CCCCCCCCCCCCCCCCCCCCCCCCCCCCCC                     
//CARD     DD DSN=&C1,DISP=(,PASS),SPACE=(CYL,(2,2),RLSE)
//DDLS     DD DSN=&D1,DISP=(,PASS),SPACE=(CYL,(4,4),RLSE)
//SYSIN    DD *                                         
 SORT FIELDS=COPY                                     
 OUTFIL FNAMES=CARD,REMOVECC,NODETAIL,               
 SECTIONS=(2,4,                                       
 TRAILER3=(2X,C'OUTFIL FNAMES=FILE',2,4,             
              C',INCLUDE=(2,4,CH,EQ,C''',             
              2,4,                                   
              C'''',                                 
              C')',80:X)),                           
 TRAILER1=(C'/*',80:X)                               
                                                     
 OUTFIL FNAMES=DDLS,REMOVECC,NODETAIL,               
 SECTIONS=(2,4,                                       
 TRAILER3=(C'//FILE',2,4,2X,                         
              C'DD DSN=USERID.FILE',2,4,C',',/,       
              C'//',11X,C'DISP=(NEW,CATLG,DELETE),',/,
              C'//',11X,C'UNIT=SYSDA,',/,             
              C'//',11X,C'SPACE=(CYL,(X,Y),RLSE)',/, 
              C'/*',80:X))                           
/*
//STEP0200 EXEC  PGM=SORT                   
//SYSOUT   DD SYSOUT=*                     
//SYSIN    DD *                             
  SORT FIELDS=COPY                         
//SORTOUT  DD SYSOUT=*                     
//SORTIN   DD DATA,DLM=$$                   
//USERIDA JOB 'COPY',                       
//             CLASS=A,                     
//             MSGCLASS=Y,                 
//             MSGLEVEL=(1,1),             
//             NOTIFY=USERID               
//*                                         
//STEP0100 EXEC  PGM=SORT                   
//SYSOUT   DD SYSOUT=*                     
//SORTIN   DD DSN=YOUR INPUT FILE,         
//            DISP=SHR                     
//SYSIN    DD *                             
  SORT FIELDS=COPY                         
$$                                         
//         DD DSN=&C1,DISP=(OLD,PASS)       
//         DD DSN=&D1,DISP=(OLD,PASS)       
/*                                         


Run the sample as is and check the output from step0200 and once you verify that the created JCL is correct change the the following statement in step0200 to the following

Code:

//SORTOUT  DD SYSOUT=*   


to

Code:

//SORTOUT  DD SYSOUT=(*,INTRDR)


Hope this helps...

Cheers

Kolusu
_________________
Kolusu
www.linkedin.com/in/kolusu
Back to top
View user's profile Send private message Send e-mail Visit poster's website
fidelity
Beginner


Joined: 26 Feb 2007
Posts: 5
Topics: 1

PostPosted: Wed Feb 28, 2007 3:29 pm    Post subject: Reply with quote

Hi Kolusu,

Thanks for the solution.

What does STEP0100 do?

When I tried to execute the JCL as is, I am getting RC - 16 for STEP0100.
Dataset were created with following Names.
SYS07059.T150634.RA000.JUAMACHA.C1.H01 for DDNAME=CARD
SYS07059.T150634.RA000.JUAMACHA.D1.H01 for DDNAME=DDLS

Can you please direct me the manual which explains STEP0100.


One last question does thsi JCL submit 500 Jobs if we have data for 500 location.



Thanks Again.
Back to top
View user's profile Send private message
kolusu
Site Admin
Site Admin


Joined: 26 Nov 2002
Posts: 12378
Topics: 75
Location: San Jose

PostPosted: Wed Feb 28, 2007 3:53 pm    Post subject: Reply with quote

fidelity,

Are you getting an error on the submitted job via INTRDR or the first step in the above posted jcl? If you are getting a RC of 16 , that means there is something with the control cards. You need to check the SYSOUT of Step0100. If you cannot figure out the error post it here and we will try to help.

Quote:

One last question does thsi JCL submit 500 Jobs if we have data for 500 location.


It just submits one job.

Kolusu
_________________
Kolusu
www.linkedin.com/in/kolusu
Back to top
View user's profile Send private message Send e-mail Visit poster's website
fidelity
Beginner


Joined: 26 Feb 2007
Posts: 5
Topics: 1

PostPosted: Thu Mar 01, 2007 9:08 am    Post subject: Reply with quote

I executed this JCL.
Code:

-------------------------------------------------------------------------------------
//JUAXXXXX JOB B55244DP00701,'XXXXXXXX',REGION=0K,
//      CLASS=P,MSGCLASS=T,NOTIFY=XXXXXXX
//STEP0100 EXEC PGM=SORT
//SYSOUT   DD SYSOUT=*
//SORTIN   DD DSN=JUAMACH.PUBACCS.COMPLNT.EXTRACT2,DISP=SHR
//CARD     DD DSN=&C1,DISP=(,PASS),SPACE=(CYL,(2,2),RLSE)
//DDLS     DD DSN=&D1,DISP=(,PASS),SPACE=(CYL,(4,4),RLSE)
//SYSIN    DD *
 SORT FIELDS=COPY
 OUTFIL FNAMES=CARD,REMOVECC,NODETAIL,
 SECTIONS=(2,4,
 TRAILER3=(2X,C'OUTFIL FNAMES=FILE',2,4,
               C',INCLUDE=(2,4,CH,EQ,C''',
               2,4,
               C'''',
               C')',80:X)),
 TRAILER1=(C'/*',80:X)
 OUTFIL FNAMES=DDLS,REMOVECC,NODETAIL,
 SECTIONS=(2,4,
 TRAILER3=(C'//FILE',2,4,2X,
              C'DD DSN=USERID.FILE',2,4,C',',/,
              C'//',11X,C'DISP=(NEW,CATLG,DELETE),',/,
              C'//',11X,C'UNIT=SYSDA,',/,
              C'//',11X,C'SPACE=(CYL,(X,Y),RLSE)',/,
              C'/*',80:X))
/*
//STEP0200 EXEC  PGM=SORT
//SYSOUT   DD SYSOUT=*
//SYSIN    DD *
  SORT FIELDS=COPY
//SORTOUT  DD SYSOUT=*
//SORTIN   DD DATA,DLM=$$
//USERIDA JOB 'COPY',
//             CLASS=A,
//             MSGCLASS=Y,
//             MSGLEVEL=(1,1),
//             MSGLEVEL=(1,1),
//             NOTIFY=XXXXXXXX
//*
//STEP0300 EXEC  PGM=SORT
//SYSOUT   DD SYSOUT=*
//SORTIN   DD DSN=JUAMACH.PUBACCS.COMPLNT.EXTRACT2,
//            DISP=SHR
//SYSIN    DD *
 SORT FIELDS=COPY
$$
//         DD DSN=&C1,DISP=(OLD,PASS)
//         DD DSN=&D1,DISP=(OLD,PASS)
/*
---------------------------------------------------------------------------------

It fails in STEP0200 with Cond code = 16. here is the SYSOUT
Code:

SYNCSORT FOR Z/OS  1.2.0.0R    U.S. PATENTS: 4210961, 5117495   (C) 2005 SYNCSO
                                                      z/OS   1.5.0
PRODUCT LICENSED FOR CPU SERIAL NUMBER 11570, MODEL 2094 503              LICEN
SYSIN :
  SORT FIELDS=COPY
WER276B  SYSDIAG= 3389525, 4689142, 4689142, 1058396
WER164B  13,996K BYTES OF VIRTUAL STORAGE AVAILABLE, MAX REQUESTED,
WER164B     0 BYTES RESERVE REQUESTED, 6,124K BYTES USED
WER146B  20K BYTES OF EMERGENCY SPACE ALLOCATED
WER108I  SORTIN   : RECFM=FB   ; LRECL=    80; BLKSIZE=    80
WER171A  CONCAT DS, LRECLS NE OR RECFMS DIFF



And here is SYSOUT from STEP0100 if it helps
Code:

WER276B  SYSDIAG= 3389751, 4689214, 4689214, 1058396
WER164B  13,996K BYTES OF VIRTUAL STORAGE AVAILABLE, MAX REQUESTED,
WER164B     0 BYTES RESERVE REQUESTED, 6,231,104 BYTES USED
WER146B  20K BYTES OF EMERGENCY SPACE ALLOCATED
WER108I  SORTIN   : RECFM=FB   ; LRECL=  1900; BLKSIZE= 26600
WER110I  CARD     : RECFM=FB   ; LRECL=  1900; BLKSIZE= 26600
WER110I  DDLS     : RECFM=FB   ; LRECL=  1900; BLKSIZE= 26600
WER405I  CARD     :  DATA RECORDS OUT          0; TOTAL RECORDS OUT          4
WER405I  DDLS     :  DATA RECORDS OUT          0; TOTAL RECORDS OUT         15
WER416B  SORTIN   : EXCP'S=1,UNIT=3390,DEV=8A40,CHP=E4E6E8EA,VOL=WORK83
WER416B  OUTFIL WAS USED FOR SORTOUT
WER054I  RCD IN         10, OUT         10
WER169I  RELEASE 1.2 BATCH 0427 TPF LEVEL 0.0
WER052I  END SYNCSORT - JUAMACHA,STEP0100,,DIAG=AC00,FB80,8082,004C,E46E,488A,0




Thanks







[/b]
Back to top
View user's profile Send private message
kolusu
Site Admin
Site Admin


Joined: 26 Nov 2002
Posts: 12378
Topics: 75
Location: San Jose

PostPosted: Thu Mar 01, 2007 10:28 am    Post subject: Reply with quote

fidelity,

Change your step0100 sysin cards to the following

Code:

//SYSIN    DD *
 SORT FIELDS=COPY
 OUTREC FIELDS=(01,80)
 OUTFIL FNAMES=CARD,REMOVECC,NODETAIL,
 SECTIONS=(2,4,
 TRAILER3=(2X,C'OUTFIL FNAMES=FILE',2,4,
               C',INCLUDE=(2,4,CH,EQ,C''',
               2,4,
               C'''',
               C')',80:X)),
 TRAILER1=(C'/*',80:X)
 OUTFIL FNAMES=DDLS,REMOVECC,NODETAIL,
 SECTIONS=(2,4,
 TRAILER3=(C'//FILE',2,4,2X,
              C'DD DSN=USERID.FILE',2,4,C',',/,
              C'//',11X,C'DISP=(NEW,CATLG,DELETE),',/,
              C'//',11X,C'UNIT=SYSDA,',/,
              C'//',11X,C'SPACE=(CYL,(X,Y),RLSE)',/,
              C'/*',80:X))
/*

_________________
Kolusu
www.linkedin.com/in/kolusu
Back to top
View user's profile Send private message Send e-mail Visit poster's website
fidelity
Beginner


Joined: 26 Feb 2007
Posts: 5
Topics: 1

PostPosted: Thu Mar 01, 2007 12:12 pm    Post subject: Reply with quote

Thanks

Here is the JCL that was created by STEP0300

Code:

//JUAXXXX JOB 'COPY',
//             CLASS=P,
//             MSGCLASS=T,
//             NOTIFY=JUAXXXXX
//*
//STEP0300 EXEC  PGM=SORT
//*SYSOUT   DD SYSOUT=*
//SYSOUT   DD SYSOUT=(A,INTRDR)
//SORTIN   DD DSN=JUAXXXXX.PUBACCS.COMPLNT.EXTRACT,
//            DISP=SHR
//SYSIN    DD *
 SORT FIELDS=COPY
  OUTFIL FNAMES=FILE0102,INCLUDE=(2,4,CH,EQ,C'0102')
  OUTFIL FNAMES=FILE0105,INCLUDE=(2,4,CH,EQ,C'0105')
  OUTFIL FNAMES=FILE0108,INCLUDE=(2,4,CH,EQ,C'0108')
//FILE0102  DD DSN=JUATS.CM.PUBACCS.CRT0102,
//           DISP=(NEW,CATLG,DELETE),
//           DCB=(RECFM=FB,LRECL=1900,BLKSIZE=0),
//           UNIT=SYSDA,
//           SPACE=(CYL,(10,10),RLSE)
/*
//FILE0105  DD DSN=JUATS.CM.PUBACCS.CRT0105,
//           DISP=(NEW,CATLG,DELETE),
//           DCB=(RECFM=FB,LRECL=1900,BLKSIZE=0),
//           UNIT=SYSDA,
//           SPACE=(CYL,(10,10),RLSE)
/*
//FILE0108  DD DSN=JUATS.CM.PUBACCS.CRT0108,
//           DISP=(NEW,CATLG,DELETE),
//           DCB=(RECFM=FB,LRECL=1900,BLKSIZE=0),
//           UNIT=SYSDA,
//           SPACE=(CYL,(10,10),RLSE)
/*



But the Job is not getting submitted. I tried
//SYSOUT DD SYSOUT=(*,INTRDR) and
//SYSOUT DD SYSOUT=(A,INTRDR)


Can we write the JCL to a PDS instead of submitting the Job.


Thanks
Back to top
View user's profile Send private message
kolusu
Site Admin
Site Admin


Joined: 26 Nov 2002
Posts: 12378
Topics: 75
Location: San Jose

PostPosted: Thu Mar 01, 2007 12:31 pm    Post subject: Reply with quote

fidelity,

yes you can write it to PDS member.

Change the following in step0200

Code:

//SORTOUT  DD SYSOUT=*


to

Code:

//SORTOUT  DD DSN=your pds name(member name),DISP=SHR


Also with SORT you don't have mention the DCB parms . They are automatically copied from the input file

Kolusu
_________________
Kolusu
www.linkedin.com/in/kolusu
Back to top
View user's profile Send private message Send e-mail Visit poster's website
Display posts from previous:   
Post new topic   Reply to topic   printer-friendly view    MVSFORUMS.com Forum Index -> Utilities All times are GMT - 5 Hours
Page 1 of 1

 
Jump to:  
You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum
You cannot vote in polls in this forum


MVSFORUMS
Powered by phpBB © 2001, 2005 phpBB Group