### Re: A function that expands value() and more

- Posted by jpartridge in May
- 574 views

Just an observation. The function does not "Gets any numerical value at any position on a string", but rather gets or extracts the first numerical value found in the string and appends any subsequent numerical symbols to the initial numerical value.

print(1, val("This string includes the numbers 42 18 36.")) -- outputs -- 421816 instead of -- 42 18 16

So, the function should output a sequence of found values. In the case above, it would return {42,18,36}.

You can do this in Phix:

string s = "This string includes the numbers 42 18 36." sequence res = scanf(" "&s,"%s %d%s") pp(res,{pp_StrFmt,-2}) ?vslice(res,2)

Output:

{{" This string includes the numbers", 42, " 18 36."}, {" This string includes the numbers 42", 18, " 36."}, {" This string includes the numbers 42 18", 36, "."}} {42,18,36}

Your code sure seems nice, euphoric. But you didn't use Euphoria, you used another language...

You literally "Phixed" it, right? :)

I wrote a script that gets the output mentioned by Senator.

include get.e include std/sequence.e function val(object parm) -- Gets any numerical value at any position on a string sequence num_val = {} sequence numbers = "0123456789" if sequence(parm) then for i = 1 to length(parm) do if find(parm[i], numbers) then num_val = append(num_val, {i, parm[i]}) end if end for sequence fnum_val = {} fnum_val = flatten(num_val) sequence values = {} atom j = 3 while j <= length(fnum_val) do atom dif = fnum_val[j] - fnum_val[j-2] if dif != 1 then values = append(values, fnum_val[j-1]) values = append(values, 44) else values = append(values, fnum_val[j-1]) end if j = j + 2 end while atom k = length(fnum_val) values = append(values, fnum_val[k]) return values else return 0 end if end function puts(1, val("This string includes numbers 42 52 and 33."))

outputs 42,52,33

However, I doubt that has been evaluated to numerical... Has it? Can they be used as numerical values? I don't know, I've been testing Euphoria only for 10 days or so. Please, be patient with me and keep answering my (eventually dumb) questions. Okay? Thanks.