Divide a file in equals parts



IBM's flagship sort product DFSORT for sorting, merging, copying, data manipulation and reporting. Includes ICETOOL and ICEGENER

Divide a file in equals parts

Postby samb01 » Wed Jan 28, 2015 9:16 pm

Hello,

i have a dataset in input with many lines. We don't know haw many because it should change each time.

Sometimes 100 000 lines, or 700 000, or 500 000...

I would like to divide this file in (for example) ten file almost equals ?

For example, a file in INPUT with 100 000 lines will be divided in ten files with 10 000 lines each one.

Is-it possible ?


Thank's for your help .
samb01
 
Posts: 236
Joined: Mon Nov 16, 2009 7:24 pm
Has thanked: 0 time
Been thanked: 0 time

Re: Divide a file in equals parts

 

Re: Divide a file in equals parts

Postby BillyBoyo » Wed Jan 28, 2015 10:29 pm

Have a look at the documentation of OUTFIL SPLIT and its cousins. Let us know if any of those will suit.
BillyBoyo
Global moderator
 
Posts: 3804
Joined: Tue Jan 25, 2011 12:02 am
Has thanked: 22 times
Been thanked: 264 times

Re: Divide a file in equals parts

Postby samb01 » Fri Jan 30, 2015 7:56 pm

hello,

i tried this :

//EGDEXCPX JOB ,'SAUVEGARDE CFT',MSGCLASS=X,CLASS=I,NOTIFY=PB00302   
//S1    EXEC  PGM=ICETOOL                                             
//TOOLMSG   DD  SYSOUT=*                                             
//DFSMSG    DD  SYSOUT=*                                             
//IN DD DSN=PROBCF.EGDEXCP.DADSFOR,DISP=SHR                           
//T1 DD DSN=&&T1,UNIT=SYSDA,SPACE=(TRK,(1,1)),DISP=(,PASS)           
//C1 DD DSN=&&C1,UNIT=SYSDA,SPACE=(TRK,(1,1)),DISP=(,PASS)           
//CTL3CNTL DD *                                                       
  OUTFIL FNAMES=(OUT01,OUT02,OUT03,OUT04,OUT05)                       
//    DD DSN=*.C1,VOL=REF=*.C1,DISP=(OLD,PASS)                       
//OUT01 DD DSN=PROBCF.EGDEXCP.DADSFOR.PART1.BDAD1,DISP=SHR           
//*     DISP=(,CATLG,KEEP),SPACE=(CYL,(1,5)),RECFM=FB,LRECL=174       
//OUT02 DD DSN=PROBCF.EGDEXCP.DADSFOR.PART2.BDAD1,DISP=SHR           
//*     DISP=(,CATLG,KEEP),SPACE=(CYL,(1,5)),RECFM=FB,LRECL=174       
//OUT03 DD DSN=PROBCF.EGDEXCP.DADSFOR.PART3.BDAD1,DISP=SHR           
//*     DISP=(,CATLG,KEEP),SPACE=(CYL,(1,5)),RECFM=FB,LRECL=174       
//OUT04 DD DSN=PROBCF.EGDEXCP.DADSFOR.PART4.BDAD1,DISP=SHR           
//*     DISP=(,CATLG,KEEP),SPACE=(CYL,(1,5)),RECFM=FB,LRECL=174       
//OUT05 DD DSN=PROBCF.EGDEXCP.DADSFOR.PART5.BDAD1,DISP=SHR           
//*     DISP=(,CATLG,KEEP),SPACE=(CYL,(1,5)),RECFM=FB,LRECL=174       
//TOOLIN DD *                                                         
* GET THE RECORD COUNT.                                               
 COPY FROM(IN) USING(CTL1)                                           
* GENERATE:                                                           
* SPLIT1R=X WHERE X = COUNT/NN.                                       
* NN IS THE NUMBER OF OUTPUT FILES.                                   
 COPY FROM(T1) TO(C1) USING(CTL2)                                     
* USE SPLIT1R=X TO SPLIT RECORDS CONTIGUOUSLY AMONG                   
* THE NN OUTPUT FILES.                                               
 COPY FROM(IN) USING(CTL3)                                           
/*                                                                   
//CTL1CNTL DD *                                                       
  OUTFIL FNAMES=T1,REMOVECC,NODETAIL,                                 
    TRAILER1=(COUNT=(M11,LENGTH=8))                                   
/*                                                                   
//CTL2CNTL DD *                                                       
  OUTREC BUILD=(2X,C'SPLIT1R=',                                       
    1,8,ZD,DIV,+5,                                                     
      TO=ZD,LENGTH=8,80:X)                                             
//* OUTREC BUILD=(2X,C'SPLIT1R=',                                     
//*    1,8,ZD,DIV,+NN,               <--- SET TO NN                   
//*     TO=ZD,LENGTH=8,80:X)                                           
/*                                                                     




but i have this message :

ECFSOVDX.S1      .        , INPUT LRECL = 174, BLKSIZE = 27840, TYPE
MAIN STORAGE = (MAX,8388608,8388608)                               
MAIN STORAGE ABOVE 16MB = (8593392,8331248)                         
OPTIONS: OVFLO=RC0 ,PAD=RC0 ,TRUNC=RC0 ,SPANINC=RC16,VLSCMP=N,SZERO=
OPTIONS: SIZE=8388608,MAXLIM=1048576,MINLIM=450560,EQUALS=N,LIST=Y,E
OPTIONS: VIO=Y,RESDNT=ALL ,SMF=NO   ,WRKSEC=Y,OUTSEC=Y,VERIFY=N,CHAL
OPTIONS: RESALL=131072,RESINV=0,SVC=109 ,CHECK=Y,WRKREL=Y,OUTREL=Y,C
OPTIONS: TMAXLIM=8388608,ARESALL=131072,ARESINV=131072,OVERRGN=16384
OPTIONS: VLSHRT=N,ZDPRINT=Y,IEXIT=N,TEXIT=N,LISTX=N,EFS=NONE    ,EXI
OPTIONS: HIPRMAX=OPTIMAL,DSPSIZE=MAX ,ODMAXBF=0,SOLRF=Y,VLLONG=N,VSA
OPTIONS: NULLOUT=RC0                                               
OPTIONS: DYNAPCT=10 ,MOWRK=Y,TUNE=OLD ,EXPMAX=MAX    ,EXPOLD=MAX   
EXCP ACCESS METHOD USED FOR C1                                     
EXCP ACCESS METHOD USED FOR T1                                     
EF-BASE   F0-BASE   E8-I12417                                       
OUTPUT LRECL = 80, BLKSIZE = 27920, TYPE = FB   (SDB)               
SORTOUT LRECL OF 80 IS DIFFERENT FROM SORTIN(NN) LRECL OF 174 - RC=0
INSERT 0, DELETE 0                                                 
RECORDS - IN: 1, OUT: 1                                             
END OF DFSORT                                                       
IDENTIFIER FROM CALLING PROGRAM IS 0003                             
JOBNAME: ECFSOVDX , STEPNAME: S1                                     
BLOCKSET     TECHNIQUE IN CONTROL                                   
BLOCKSET     COPY  TECHNIQUE SELECTED                               
VISIT http://www.ibm.com/storage/dfsort FOR DFSORT PAPERS, EXAMPLES A
- CONTROL STATEMENTS FOR 5650-ZOS, Z/OS DFSORT V2R1  - 15:20 ON FRI J
  OUTFIL FNAMES=(OUT01,OUT02,OUT03,OUT04,OUT05)                     
   SPLIT1R=00455574                                                 
   $                                                                 
BLANK NEEDED IN COLUMN 1 OR OPERATION NOT DEFINED CORRECTLY         
END OF STATEMENTS FROM CTL3CNTL - PARAMETER LIST STATEMENTS FOLLOW   
DEBUG NOABEND,ESTAE                                                 
OPTION MSGDDN=DFSMSG,LIST,MSGPRT=ALL,RESINV=0,SORTDD=CTL3,SORTIN=IN,D
               ALLOC                                                 
SORT FIELDS=COPY                                                     
C5-I20731 C6-BASE   C7-K96411 C8-I15445 E7-I12417                   
END OF DFSORT                                                       

samb01
 
Posts: 236
Joined: Mon Nov 16, 2009 7:24 pm
Has thanked: 0 time
Been thanked: 0 time

Re: Divide a file in equals parts

Postby BillyBoyo » Fri Jan 30, 2015 9:03 pm

Please don't cut off the message numbers.

The message is referring to CTL3, and I can see a USING for CTL3, but you have not shown its definition in the JCL and its content.
BillyBoyo
Global moderator
 
Posts: 3804
Joined: Tue Jan 25, 2011 12:02 am
Has thanked: 22 times
Been thanked: 264 times

Re: Divide a file in equals parts

Postby samb01 » Fri Jan 30, 2015 9:09 pm

hello,

this is the content of ou1 for example :

B.DAD1.A0006VFK                                                                 
B.DAD1.A000739M                                                                 
B.DAD1.A0006AJW                                                                 
B.DAD1.A0006338                                                                 
B.DAD1.A0008EHG                                                                 
B.DAD1.A0006NMK                                                                 
B.DAD1.A0006ZHS                                                                 
B.DAD1.A0003WD1                                                                 
B.DAD1.A0006TUH                                                                 
B.DAD1.A0003WNM                                                                 
B.DAD1.A0005IZ7                                                                 
B.DAD1.D0722014                                                                 
B.DAD1.A2805131                                                                 
B.DAD1.A2915555                                                                 
B.DAD1.B0911122                                                                 



What is CTL3 for you ?

I think the problem is about the blank in column 1

 COMMAND INPUT ===>                                            SCROLL ===> CSR 
OUTPUT LRECL = 174, BLKSIZE = 27840, TYPE = FB   (SDB)                         
INSERT 0, DELETE 0                                                             
RECORDS - IN: 1, OUT: 1                                                         
END OF DFSORT                                                                   
IDENTIFIER FROM CALLING PROGRAM IS 0003                                         
JOBNAME: ECFSOVDX , STEPNAME: S1                                               
BLOCKSET     TECHNIQUE IN CONTROL                                               
BLOCKSET     COPY  TECHNIQUE SELECTED                                           
VISIT http://www.ibm.com/storage/dfsort FOR DFSORT PAPERS, EXAMPLES AND MORE   
- CONTROL STATEMENTS FOR 5650-ZOS, Z/OS DFSORT V2R1  - 15:28 ON FRI JAN 30, 2015
  OUTFIL FNAMES=(OUT01,OUT02,OUT03,OUT04,OUT05)                                 
  SPLIT1R=00045557                                                             
  $                                                                             
BLANK NEEDED IN COLUMN 1 OR OPERATION NOT DEFINED CORRECTLY                     
END OF STATEMENTS FROM CTL3CNTL - PARAMETER LIST STATEMENTS FOLLOW             
DEBUG NOABEND,ESTAE                                                             
OPTION MSGDDN=DFSMSG,LIST,MSGPRT=ALL,RESINV=0,SORTDD=CTL3,SORTIN=IN,DYN*       
               ALLOC                                                           

samb01
 
Posts: 236
Joined: Mon Nov 16, 2009 7:24 pm
Has thanked: 0 time
Been thanked: 0 time

Re: Divide a file in equals parts

Postby BillyBoyo » Fri Jan 30, 2015 9:12 pm

You're missing a comma after the closing bracket for the FNAMES, so SPLIT1R isn't being treated as a parameter of OUTFIL but as an operator, which it isn't. So it is the "Operation not defined correctly" part of the message.
BillyBoyo
Global moderator
 
Posts: 3804
Joined: Tue Jan 25, 2011 12:02 am
Has thanked: 22 times
Been thanked: 264 times

Re: Divide a file in equals parts

Postby samb01 » Sat Jan 31, 2015 12:20 am

thank's BillyBoyo.
I am not at work anymore.

I will try it on monday.
samb01
 
Posts: 236
Joined: Mon Nov 16, 2009 7:24 pm
Has thanked: 0 time
Been thanked: 0 time


Return to DFSORT/ICETOOL/ICEGENER

 


  • Related topics
    Replies
    Views
    Last post