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

 Why do you say the using %Xlate / %Replace is overkill?  Is it performance
you're concerned with?  It would be fewer statements (either one or two)
and doesn't reduce legibility, IMHO.

 Obviously, if there are other, unexpected, characters to strip out of the
source string, then that's a different story.  But that did not seem to be
the case here.


 As an aside, the statement:

        if '0' <= %subst(source:i:1) and %subst(source:i:1) <= '9';
 should read:
        if '0' >= %subst(source:i:1) and %subst(source:i:1) <= '9';

 -mark

Original Message:
-----------------
From: Hans Boldt boldt@xxxxxxxxxx
Date: Tue, 01 Jun 2004 09:18:07 -0400
To: rpg400-l@xxxxxxxxxxxx
Subject: Re: trimming non-numerics


Jeffrey Lee wrote:
> I was wondering how I could strip any non numberic characters from a set
of numbers submitted via a html form. For example (504) 555-5555 would be
5045555555 or 504-555-5555 would be 5045555555   Like %trim does with
spaces is there something to deal with non-numberics?
> --

If you were programming in Python, you could do this with the simple 
expression (''.join([c for c in source if c.isdigit()])). ;-)

But since this is an RPG list, you probably want an RPG answer, right?

Others have suggested using some combination of the built-in functions 
%XLATE and %REPLACE. Personally, I thinks that's overkill. I'd recommend 
the obvious approach of simply looping over the source string selecting 
the digits out of the string (just like what the above Python expression 
does):

------------------------------------------------------------------
D i               s             10i 0
D source          s             50a   varying
D target          s             50a   varying
  /free
     source = 'jafgjh934hdfg94k3ghsd0jdfg0345jdfg';
     target = '';

     // Extract digits out of source string
     for i = 1 to %len(source);
        if '0' <= %subst(source:i:1) and %subst(source:i:1) <= '9';
           target += %subst(source:i:1);
        endif;
     endfor;

     // Display results
     dsply source;
     dsply target;
     *inlr = *on;
  /end-free
------------------------------------------------------------------

Oh yeah, if you're not on V5R2, replace the middle statement of the loop 
with:

           target = target + %subst(source:i:1);

Cheers! Hans


--------------------------------------------------------------------
mail2web - Check your email from the web at
http://mail2web.com/ .




As an Amazon Associate we earn from qualifying purchases.

This thread ...

Follow-Ups:

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.