Splitting a file into multiple files.
Select messages from
# through # FAQ
[/[Print]\]

MVSFORUMS.com -> Utilities

#1: Splitting a file into multiple files. Author: nagasadhu PostPosted: Wed Oct 25, 2006 5:55 am
    —
Hello all,

I have a requirement of splitting a single file into multiple files:

My input file has the layout:

Header1
Record1
Record2
Record3
Record4
Trailer1

Header2
Record5
Record6
Record7
Trailer2

Header3
Record8
Record9
Record10
Trailer3
-
-
-
Header-n
Record-n
Trailer-n

I want my o/p files as:

File 1:

Header1
Record1
Record2
Record3
Record4
Trailer1

File 2:

Header2
Record5
Record6
Record7
Trailer2

File 3:

Header3
Record8
Record9
Record10
Trailer3
-
-
-
File n:

Header-n
Record-n
Trailer-n

Please let me know if it can be done using a JCL utility or should I go for an application program itself.

Thanks,
Binoy.

#2:  Author: THRIVIKRAM PostPosted: Wed Oct 25, 2006 7:29 am
    —
nagasadhu,

1)Is n finite in this case?
2) Does the records between Header-1 and Trailer-1 have some commen characters in any field?

Thanks,
Thrivikram.

#3:  Author: shekar123Location: Bangalore India PostPosted: Wed Oct 25, 2006 7:38 am
    —
Some more to add is there any identification for your Headers and Trailers and the records how u identify them through any key .

#4:  Author: kolusuLocation: San Jose PostPosted: Wed Oct 25, 2006 8:18 am
    —
Try this DFSORT JCL. The first step0100 will create dynamic control cards for allocation and also for splitting. The Second step0200 will create the entire JCL to be execueted. Check the output from step0200, if you see everything is correct then change this statement in step0200

Code:

//SORTOUT  DD SYSOUT=*                       


to
Code:

//SORTOUT  DD SYSOUT=(*,INTRDR)


Code:

//STEP0100 EXEC PGM=SORT                                 
//SYSOUT   DD SYSOUT=*                                   
//SORTIN   DD *                                           
HEADER1                                                   
RECORD1                                                   
RECORD2                                                   
RECORD3                                                   
RECORD4                                                   
TRAILER1                                                 
HEADER2                                                   
RECORD5                                                   
RECORD6                                                   
RECORD7                                                   
TRAILER2                                                 
HEADER3                                                   
RECORD8                                                   
RECORD9                                                   
RECORD10                                                 
TRAILER3                                                 
//ALLOCDSN DD DSN=&A,DISP=(,PASS),SPACE=(CYL,(5,5),RLSE)
//CARDS    DD DSN=&C,DISP=(,PASS),SPACE=(CYL,(5,5),RLSE)
//FULLDSN  DD DSN=your seqnum numbered dsn,
//            DISP=(NEW,CATLG,DELETE),
//            UNIT=SYSDA,
//            SPACE=(CYL,(X,Y),RLSE)
//SYSIN    DD *                                               
  SORT FIELDS=COPY                                           
  INREC IFTHEN=(WHEN=INIT,OVERLAY=(81:SEQNUM,8,ZD)),         
        IFTHEN=(WHEN=(1,6,CH,EQ,C'HEADER'),                   
                OVERLAY=(81:SEQNUM,8,ZD,START=1,INCR=2)),     
        IFTHEN=(WHEN=(1,7,CH,EQ,C'TRAILER'),                 
                OVERLAY=(81:SEQNUM,8,ZD,START=1,INCR=2)),     
        IFTHEN=(WHEN=NONE,                                   
                OVERLAY=(89:SEQNUM,8,ZD,                     
                         81:81,8,ZD,SUB,89,8,ZD,M11,LENGTH=8))
                                                             
  OUTFIL FNAMES=FULLDSN,                                     
  OUTREC=(01,88)                                             
                                                             
  OUTFIL FNAMES=ALLOCDSN,                                     
  INCLUDE=(01,06,CH,EQ,C'HEADER'),                           
  OUTREC=(C'//OUT',SEQNUM,5,ZD,X,                             
          C'DD DSN=OUT',SEQNUM,5,ZD,                         
          C'.FILE',/,                                         
          C'//',12X,                                         
          C'DISP=(NEW,CATLG,DELETE),',/,                     
          C'//',12X,                                         
          C'UNIT=SYSDA,',/,                                   
          C'//',12X,                                         
          C'SPACE=(CYL,(1,1,),RLSE)',/,                       
          C'/*',80:X)                                         
                                                             
  OUTFIL FNAMES=CARDS,REMOVECC,NODETAIL,                     
  OUTREC=(1,80),                                             
  HEADER1=(C'//SYSIN    DD *',/,                             
           C'  SORT FIELDS=COPY',80:X),                       
  SECTIONS=(81,8,                                             
  TRAILER3=(C'  OUTFIL FNAMES=OUT',84,5,                     
            C',INCLUDE=(81,8,ZD,EQ,',81,8,                   
            C'),OUTREC=(1,80)',80:X)),                       
  TRAILER1=(C'/*',80:X)                                       
/*               
//STEP0200 EXEC  PGM=SORT                     
//SYSOUT   DD SYSOUT=*                       
//SYSIN    DD *                               
  SORT FIELDS=COPY                           
//SORTOUT  DD SYSOUT=*                       
//SORTIN   DD DATA,DLM=$$                     
//USERIDA  JOB 'SPLIT COPY',                 
//             CLASS=A,                       
//             MSGCLASS=Y,                   
//             MSGLEVEL=(1,1),               
//             NOTIFY=&SYSUID                 
//*                                           
//COPYSTEP EXEC  PGM=SORT                     
//SYSOUT   DD SYSOUT=*                       
//SORTIN   DD DSN=your seqnum numbered dsn,
//            DISP=SHR                       
//*                                           
$$                                           
//         DD DSN=&A,DISP=(OLD,PASS)         
//         DD DSN=&C,DISP=(OLD,PASS)       
/*


Hope this helps...

Cheers

Kolusu

#5:  Author: shekar123Location: Bangalore India PostPosted: Wed Oct 25, 2006 8:35 am
    —
Kolusu,

Once again great answer and the logic used is excellent.

#6:  Author: nagasadhu PostPosted: Mon Oct 30, 2006 12:46 pm
    —
A million thanks
Regards Very Happy



MVSFORUMS.com -> Utilities


output generated using printer-friendly topic mod. All times are GMT - 5 Hours

Page 1 of 1

Powered by phpBB © 2001, 2005 phpBB Group