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



Nice. I might have spun through the list differently, though, as in http://code.midrange.com/16f590809c.html (which builds an array), and (again) uses atof to convert to numeric.
++
Dennis
++
"Windows is now tuning your applications so they run faster. This might take several minutes."




Bravely sent from my Galaxy tablet phone.
++


Scott Klement <rpg400-l@xxxxxxxxxxxxxxxx> wrote:

Hi Jeff,

On 9/11/2012 11:56 AM, Jeff Crosby wrote:
L=19.3000A=19.43M=21.7700LS=19.93AS=19.93CB=19.1600

How would I extract the numeric data behind one of these character
interludes into a decimal field?

Personally, I'd write a routine that can loop through this string and
extract each variable and it's value. Since this is an unusual format
(proprietary to your company??) it's not likely that there's any
built-in tool for it -- you have to write the logic to meet your needs.

But, I'd do something like this:

*+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
* getVar(): Parse a variable from a string
*+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
P getVar B
D PI 1n
D pos 10i 0
D peVar 15a varying
D peVal 15a varying
D string 32767a varying const
D options(*varsize)

D myVar s 15a varying inz('')
D myVal s 15a varying inz('')
D ch s 1n
D state s 10i 0 inz(0)
D len s 10i 0

/free

len = %len(%trimr(string));
if (pos<0 or pos>len);
return *off;
endif;

for x = pos to len;

ch = %subst(string:x:1);

select;
when state = 0;
if ch = '=';
state = 1;
else;
myVar += ch;
endif;
when state = 1;
if %check('01234567890.-,': ch) = 0;
myVal += ch;
else;
pos = x;
leave;
endif;
endsl;

endfor;

if %len(myVar) > 0;
peVar = myVar;
peVal = myVal;
return *on;
else;
return *off;
endif;

/end-free
P E


The basic idea is that it makes it easy to spin through the string and
get the data out of it. Then you can easily hunt through the string
for
what you want.

For example, if you only wanted the 'LS' variable, you could do:

D x s 10i 0
D str s 60a
D var s 15a varying
D val s 15a varying
D result s 9p 4

str = 'L=19.3000A=19.43M=21.7700LS=19.93AS=19.93CB=19.1600';
x = 1;
dow getVar(x: var: val: str);
if var = 'LS';
result = %dec( val: 9: 4 );
endif;
enddo;

You could even wrap this last bit up into a subprocedure where you
could
pass the variable name and string in, and get a 9p4 return value (or
whatever size is appropriate) and get back your result.

Or, if you wanted to extract all of the variables from the string, for
example, into a data structure, you could do something like this:


D result ds qualified
D L 9p 4
D A 9p 4
D M 9p 4
D LS 9p 4
D AS 9p 4
D CB 9p 4

str = 'L=19.3000A=19.43M=21.7700LS=19.93AS=19.93CB=19.1600';

x = 1;
dow getVar(x: var: val: str);
select;
when var = 'L';
result.L = %dec(val: 9: 4);
when var = 'A';
result.A = %dec(val: 9: 4);
when var = 'M';
result.M = %dec(val: 9: 4);
when var = 'LS';
result.LS = %dec(val: 9: 4);
when var = 'AS';
result.AS = %dec(val: 9: 4);
when var = 'CB';
result.CB = %dec(val: 9: 4);
endsl;
enddo;

It just seems like an easy approach to the problem. And assuming
there's no "built-in" way to do parse this string format (which I can't

imagine) so you'll have to write a routine anyway, this seems like a
pretty elegant way to do it.

Just my 2 cents.
--
This is the RPG programming on the IBM i / System i (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 ...

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.