Here is a function I wrote many years ago to translate a character string containing a packed decimal into a string that can be passed into the %DEC bif.
https://code.midrange.com/3f624ce206.html
Dcl-Pr Utl_FmtNumForDec Varchar(128) Opdesc;
String Varchar(128) Const;
Precision Int(5) Options( *NOPASS ) Const;
Decimalplaces Int(5) Options( *NOPASS ) Const;
Assumedecimal Ind Options( *NOPASS ) Const;
Ignorenegative Ind Options( *NOPASS ) Const;
Digitsonly Ind Options( *NOPASS ) Const;
Perrords Char(512) Options(*VARSIZE:*OMIT:*NOPASS);
Validstrict Ind Options( *NOPASS ) Const;
End-Pr;
usage:
DCL-S FLD2 VARCHAR(128);
DCL-S fld1 CHAR(7);
DCL-S FLD3 PACKED(7:2);
fld1 = '002632J';
FLD2 = UTL_FMTNUMFORDEC(fld1:7:2:*ON:*OFF);
FLD3 = %DEC( FLD2 : 7:2);
I use this in lots of places where I want to cleanup user input and then convert it to a numeric field.
Originally I wrote it because I wanted something I could code in FREE that would replace the MOVE opp code for packed decimal conversions.
I have this in a service program with other functions.
The snippet also includes another function that was needed to format an error data-structure, which I included so people can compile.
Chris Hiebert
Senior Programmer/Analyst
Disclaimer: Any views or opinions presented are solely those of the author and do not necessarily represent those of the company.
-----Original Message-----
From: MIDRANGE-L <midrange-l-bounces@xxxxxxxxxxxxxxxxxx> On Behalf Of Jay Vaughn
Sent: Friday, February 28, 2020 10:22 AM
To: Midrange Systems Technical Discussion <midrange-l@xxxxxxxxxxxxxxxxxx>
Subject: Re: parse a negative number out of a before image string
I hate to beat a dead horse with this topic but never really found a solution using only RPG... my solution was derived from using SQL, but now I need an RPG solution only.
So running with Barbara's suggestion...
challenge - extract for a number of bytes, the length of a packed decimal value (may contain decimals) objective - convert that clear text value
Jay
As an Amazon Associate we earn from qualifying purchases.