Re: A function that expands value() and more

new topic     » goto parent     » topic index » view thread      » older message » newer message
petelomax said...
euphoric said...
Senator said...

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.

new topic     » goto parent     » topic index » view thread      » older message » newer message

Search



Quick Links

User menu

Not signed in.

Misc Menu