Page 1 of 1

Parse fields of different lengths defined under single array

Posted: Fri Jan 29, 2016 5:10 pm
by Srikrishna116
Hi,

Can someone please help me regarding my below query?

I got stuck with the parsing of below copybook layout.

01 EX-Field OCCURS 2 times.
10 Field3 PIC X(04).
10 Field4 PIC X(10).

My input file has data like below:

HeaderYYYYMMDD
NField1~Field2~Field3(1)~Field4(1)~Field3(2)~Field4(2)
VField1Datatype~Field2Datatype~Field3(1)Datatype~Field4(1)Datatype~Field3(2)Datatype~Field4(2)Datatype
D111~abcd~G12~~~H773
D2222~abc~G443~H553~G663~H774
Trailer0002

I used REPEAT in the case if Field3 alone occurs 2 times and so I used below card

%3=(ENDBEFR=C'~',FIXLEN=4,REPEAT=2)

But Field3 & Field 4 of two different field lengths are defined under one array in copybook.

Posted: Fri Jan 29, 2016 5:49 pm
by William Collins
Well, you could PARSE both as FIXLEN=10 and then shorten to your four-byte field afterwards. Probably not worth it for an OCCURS 2.

Posted: Fri Jan 29, 2016 6:17 pm
by Srikrishna116
Thank you William Collins for your response.

I had given OCCURS 2 for an example. But in my original copybook layout, there are 3 to 4 arrays defined with more number of occurrences(like 50 to 75) & fields(10 to 20) of different lengths.

Posted: Fri Jan 29, 2016 9:57 pm
by William Collins
I think where there are multiple data-items in an OCCURS, I'd make them all the same FIXEDLEN (the longest, of course).

When BUILDing with the PARSEd parameters, i'd leave some blanks for all the PARSEd fields which needed to be shortened, and then place those long fields in a temporary extension to your record. Then use OVERLAY to put the first n bytes of each of those fields into the correct place. Finally ensure the record is cut down to the desired size.

Topic deleted by Admin

Posted: Sat Jan 30, 2016 10:07 pm
by academyindia4
<< Content deleted By Admin >>

Topic deleted by Admin

Posted: Sat Jan 30, 2016 10:09 pm
by academyindia4
<< Content deleted By Admin >>