×

Good News Everybody!

The new search engine is LIVE!

Please report any problems to david (at) midrange.com.




Jim,
Sorry, as far as I know there are no such functions available to VARPG.
There maybe a WIN32 API you could use, but I don't know what it would be.
Below is the code I have always used to convert a character field to a
numeric. It is early RPG IV, so it should work with VARPG.

-- Scott P. Johnson


 *  Convert Character to Number
D $CvtChrNbr      PR            30  9
D StrIn                         32    CONST

 *===============================================================*
 * Convert Character to Number Sub-Procedure                     *
 *---------------------------------------------------------------*
P $CvtChrNbr      B

D $CvtChrNbr      PI            30  9
D StrIn                         32    CONST

D CurChar         s              1
D DecOut          s             30  9
D Left            s             21
D Right           s              9
D Side            s              5
D Sign            s              1  0
D X               s              3  0

 * Set inital values
C                   Eval      left = *all'0'
C                   Eval      right = *blanks
C                   Eval      Side = 'left'
C                   Eval      Sign = 1

 * Extract parts of number to left & right of decimal point
C     1             Do        32            x
C                   Eval      CurChar = %subst(StrIn:x:1)
C                   Select
C                   When      CurChar >= '0' and CurChar <= '9'
C                   If        Side = 'left'
C                   Eval      Left = %subst(Left:2:20) + CurChar
C                   Else
C                   Eval      Right = %trimr(Right) + CurChar
C                   EndIf
C                   When      CurChar = '.'
C                   Eval      Side = 'right'
C                   When      CurChar = '-' or CurChar = '<'
C                   Eval      Sign = -1
C                   EndSl
C                   EndDo

 * Combine the left & right strings to get the entire number
C                   MoveL     Left          DecOut
C                   Eval      Right = %trimr(Right) + '000000000'
C                   Move      Right         DecOut

 * If a hyphen or less-than was found, negate the number
C                   If        Sign = -1
C                   Eval      DecOut = (- DecOut)
C                   EndIf
C
C                   Return    DecOut

P $CvtChrNbr      E



I have a, seemingly, fairly simple problem, convert an alpha field to
numeric.

My Alpha Field comes out like '89        '
I need to convert this to numeric, atoi or even atof would be the way to do
it, and would be the solution on the AS/400.

Do we have QCTOLE in VARPG?  It looks like I'm going to have to write some
complex numeric parser to do this since it's left justified and I don't
seem
to have atoi in VA-RPG.

When in the heck is IBM going to write a simple %Val or %Value BIF so we
don't have this problem?

Regards,

Jim Langston





This thread ...


Follow On AppleNews
Return to Archive home page | Return to MIDRANGE.COM home page

This mailing list archive is Copyright 1997-2026 by midrange.com and David Gibbs as a compilation work. Use of the archive is restricted to research of a business or technical nature. Any other uses are prohibited. Full details are available on our policy page. If you have questions about this, please contact [javascript protected email address].

Operating expenses for this site are earned using the Amazon Associate program and Google Adsense.