|
Hans, Actually I like a combination of yours and mine best. Mine allows you to specify a list of extra characters that you want to save (such as the decimal notation, minus sign, whatever). But yours, I think, would compress out the garbage more efficiently since I do use the %SCAN/%REPLACE method in mine. Here's the hybrid version of that routine from the article:
P CleanNum B Export
D CleanNum PI 256A Varying D szInValue 256A Const Varying
D szKeepMe 10A Const Varying OPTIONS(*NOPASS)
D Garbage S Like(szInValue) Inz
D CleanVal S Like(szInValue) Inz
D CleanDigits S Like(szInValue) Inz
D SaveMe S Like(szInValue) Inz
D Blanks S Like(szInValue) Inz
D SAVEVal C Const('0123456789') D SAVEEx S 10A Inz('.-') Varying
D i S 10I 0
** If the caller passed in different symbols,
** use those instead of the default minus and period.
C if %Parms >= 2
C eval SaveEx = szKeepMe
C endif
C eval SaveMe = SaveVal + SaveEx
C eval %len(Blanks) = %len(SaveMe)
** Isolate the digits and anything else the caller specified.
C SaveMe:Blanks XLATE szInValue Garbage
C eval %len(Blanks) = %len(Garbage)
** Translate all of the garbage characters to blanks. C Garbage:BlanksXLate szInValue CleanVal
** Now compress out the blanks from the value.
C for i = 1 to %Len(CleanVal)
C if %subst(CleanVal:I:1) <> ' '
C eval CleanDigits = CleanDigits + C %subst(CleanVal:I:1) C endif C endfor ** Return the clean number to the caller, as text.
C return CleanDigits
P CleanNum E
-------------------------------------------------- ... SaveMe = SaveVal + SaveEx;
// Keep only the specified characters for i = 1 to %len(CleanVal); ch = %subst(CleanVal:i:1); if %scan(ch:SaveMe) > 0: CleanDigits += ch; endif; endfor;
return CleanDigits; ... --------------------------------------------------
As an Amazon Associate we earn from qualifying purchases.
This mailing list archive is Copyright 1997-2024 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.