Portal | Manuals | References | Downloads | Info | Programs | JCLs | Mainframe wiki | Quick Ref

Author Message
Rohit Umarjikar

Senior Member

Joined: 21 Sep 2010
Posts: 2088
Location: NY,USA

Posted: Fri Oct 23, 2015 1:47 am    Post subject: Add Trailing Zeroes depending upon the the decimal size

I have a requirement as below.

Input file FB LREC=50
 Code: A1A1,VOL,123.67,,,, A1A1,VOL,1723.673,JJ,,, A1A1,,14523.6734,hh,,,

Expected Output:
 Code: A1A1,VOL,123.6700,,, A1A1,VOL,1723.6730,JJ,,, A1A1,,14523.6734,hh,,,

So basically, the format is DECIMAL(14,4)/PIC s9(10)V9(4) comp-3. I am trying to reformat this decimal field ( ONLY right portion of it after decimal ('.')to its max limit by adding zeroes as needed).
And later on I will rewrite this field as PD or if you can do it in the same step then thats is good.

I have tried something but that has more hardcoding stuff, so the approach was to take left portion of it (before '.') and multiply by 10000 and add right portion ( after'.') to it.

e.g.
123.67 ---> 123 multiply by 10000
1236700--- rewrite as PD

So when I read into PIC s9(10)V9(4) comp-3 then I get the right value back.

Rohit Umarjikar

Senior Member

Joined: 21 Sep 2010
Posts: 2088
Location: NY,USA

Posted: Fri Oct 23, 2015 3:23 am    Post subject:

I tried to do something like this which does add trailing zeroes and then convert that to PD which can be done in Build.
input
 Code: 55.2 343.112 23222.11 23.7786

Sort card
 Code: SORT FIELDS=COPY                                          INREC IFTHEN=(WHEN=INIT,                                        PARSE=(%01=(ABSPOS=1,ENDBEFR=C'.',FIXLEN=10),                   %02=(ENDBEFR=C',',FIXLEN=04)),                    BUILD=(%01,UFF,EDIT=(TTTTTTTTTT),%02)),                  IFTHEN=(WHEN=INIT,                                        FINDREP=(INOUT=(C' ',C'0'),STARTPOS=11,ENDPOS=15))

Output:
 Code: 00000000552000 00000003431120 00000232221100 00000000237786
Bill Woodger

DFSORT Moderator

Joined: 09 Mar 2011
Posts: 7314

Posted: Fri Oct 23, 2015 6:02 am    Post subject: Reply to: Add Trailing Zeroes depending upon the the decimal size

I think you are basically there.

A couple of things. You don't need the ABSPOS=1. That is the default value for the initial PARSEd field. You need ABSPOS when you want to start the next PARSEd field at a position other than it would naturally be (you want to skip some bytes, or include in the PARSE something you've already PARSEd).

There's also a little thing with ALTSEQ, which removes the need for the FINDREP.

 Code: SORT FIELDS=COPY  ALTSEQ   CODE=(40F0)  INREC IFTHEN=(WHEN=INIT,       PARSE=(%01=(ENDBEFR=C'.',FIXLEN=10),              %02=(ENDBEFR=C',',FIXLEN=04)),       BUILD=(%01,UFF,EDIT=(TTTTTTTTTT),%02,TRAN=ALTSEQ))

That will, for the %02 field, change spaces to zero.
Rohit Umarjikar

Senior Member

Joined: 21 Sep 2010
Posts: 2088
Location: NY,USA

 Posted: Fri Oct 23, 2015 8:17 pm    Post subject: Thanks Bill for ABSPOS=1. and ALTSEQ. I just coded ABSPOS=1 because I have this type of decimals appeared couple of times at different postions.
 All times are GMT + 6 Hours
 Page 1 of 1

Search our Forum:

 Topic Author Forum Replies Posted Similar Topics Comparing Signed Packed decimal and p... Virendra Shambharkar SYNCSORT 2 Wed Nov 14, 2018 9:37 am RPG II Problem with unsigned Packed d... Andi1982 All Other Mainframe Topics 6 Tue Sep 11, 2018 6:11 pm TSO Region Size Martin Wickenden TSO/ISPF 7 Wed Aug 15, 2018 11:26 pm Issue in suppressing leading zeros &a... Vijay_Sirisha COBOL Programming 21 Thu Jun 07, 2018 8:01 pm How can I convert charactor to fixed ... liying DFSORT/ICETOOL 7 Tue May 22, 2018 3:35 pm

 © 2003-2017 IBM MAINFRAME Software Support Division
 Job Vacancies | Forum Rules | Bookmarks | Subscriptions | FAQ | Polls | Contact Us