× The internal search function is temporarily non-functional. The current search engine is no longer viable and we are researching alternatives.
As a stop gap measure, we are using Google's custom search engine service.
If you know of an easy to use, open source, search engine ... please contact support@midrange.com.



Bob Cozzi wrote:
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




Hmmm, you're rather fond of XLATE, eh?


With the extra functionality of specifying additional characters to filter out, considering the overhead involved with XLATE, I think I'd still go with something a bit simpler:

--------------------------------------------------
    ...
    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;
    ...
--------------------------------------------------

Cheers! Hans


As an Amazon Associate we earn from qualifying purchases.

This thread ...

Follow-Ups:
Replies:

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

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.