Page 1 of 1

Parsing a CSV file with variable number of fields

PostPosted: Tue Apr 19, 2011 2:29 am
by Maddynari
Hi
I'm new to this forum and I have a requirement where I need to Create a sysin from CSV file dynamically.The requirement is We have a file with every FTp transfer characteristics of a report stored in a CSV file and we would parse the file dynamically in a job to creat the file transfer sysins on the fly based on the key value passed in the job(the key name is the name of a sysin its unique and 8 characters at the begining).The input may be something as .there can be a maximum of 10fields per line and the number of fields in per line is variable that means one line can have 3 transfer parametrs defined next can have five and the length of each field is variable and c',' is the only delimiter and ech string would end with -delsrc
key1,-lqm abcd,-dqm fghf,-spath filnm1,-Dpath1 d:\dfg\,-delsrc,
key2,-lqm abcd,-spath filnm2,-dqm fghy,-dpath2 d:\dfg\ghf\,-delsrc,

My requirement is to parse every line with unique key and then the output would be dynamically parsing every line into the following format.Say the parameter passed in the program is sysin name key2,the dynamic sysin created would be
&&temp with
-lqm abc
-dqm fghy
-spath filnm2
-dpath2 d:\dfg\ghf\[filnm2]
-delsrc

I know it can be done through Parse but I'm confused as the no of fileds in one line are not fixed they can have mutiple trasnfer parameters missing or added .any help would be very much appreciated

Thanks much in Advance
Maddy
I

Re: Parsing a CSV file with variable number of fields

PostPosted: Tue Apr 19, 2011 4:51 am
by skolusu
Maddynari,

Your output does NOT match the input. if your intention is to split the records delimited by , into individual records then it is very easy to do with DFSORT/ICETOOL's RESIZE operator

//STEP0100 EXEC PGM=ICETOOL                                         
//TOOLMSG  DD SYSOUT=*                                               
//DFSMSG   DD SYSOUT=*                                               
//IN       DD *                                                     
KEY1,-LQM ABCD,-DQM FGHF,-SPATH FILNM1,-DPATH1 D:\DFG\,-DELSRC,     
KEY2,-LQM ABCD,-SPATH FILNM2,-DQM FGHY,-DPATH2 D:\DFG\GHF\,-DELSRC, 
//OUT      DD SYSOUT=*                                               
//TOOLIN   DD *                                                     
  RESIZE FROM(IN) TO(OUT) TOLEN(80) USING(CTL1)                     
//CTL1CNTL DD *                                                     
  SORT FIELDS=COPY                                                   
  INREC PARSE=(%=(ENDBEFR=C','),                                     
               %01=(ENDBEFR=C',',FIXLEN=80),                         
               %02=(ENDBEFR=C',',FIXLEN=80),                         
               %03=(ENDBEFR=C',',FIXLEN=80),                         
               %04=(ENDBEFR=C',',FIXLEN=80),                         
               %05=(ENDBEFR=C',',FIXLEN=80),                         
               %06=(ENDBEFR=C',',FIXLEN=80),                         
               %07=(ENDBEFR=C',',FIXLEN=80),                         
               %08=(ENDBEFR=C',',FIXLEN=80),                         
               %09=(ENDBEFR=C',',FIXLEN=80),                         
               %10=(ENDBEFR=C',',FIXLEN=80)),                       
        BUILD=(%01,%02,%03,%04,%05,%06,%07,%08,%09,%10)             
                                                                     
  OUTFIL OMIT=(1,1,CH,EQ,C' ')                                       
//*


The output from this job is
-LQM ABCD               
-DQM FGHF               
-SPATH FILNM1           
-DPATH1 D:\DFG\         
-DELSRC         
       
-LQM ABCD               
-SPATH FILNM2           
-DQM FGHY               
-DPATH2 D:\DFG\GHF\     
-DELSRC