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



Hans,
I do remember Dick Bains complaining when they implemented XLATE in RPGIII
as to how poorly it performed. So %SCAN over and over again would be faster?
Hmmm, maybe going further and using memchr() would even be better?
-Bob


-----Original Message-----
From: rpg400-l-bounces@xxxxxxxxxxxx [mailto:rpg400-l-bounces@xxxxxxxxxxxx]
On Behalf Of Hans Boldt
Sent: Tuesday, June 01, 2004 10:04 AM
To: rpg400-l@xxxxxxxxxxxx
Subject: Re: trimming non-numerics

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

--
This is the RPG programming on the AS400 / iSeries (RPG400-L) mailing list
To post a message email: RPG400-L@xxxxxxxxxxxx
To subscribe, unsubscribe, or change list options,
visit: http://lists.midrange.com/mailman/listinfo/rpg400-l
or email: RPG400-L-request@xxxxxxxxxxxx
Before posting, please take a moment to review the archives
at http://archive.midrange.com/rpg400-l.




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.