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