Velocity Reviews - Computer Hardware Reviews

Velocity Reviews > Newsgroups > Programming > Ruby > Pulling values from strings

Reply
Thread Tools

Pulling values from strings

 
 
Michael Furmaniuk
Guest
Posts: n/a
 
      04-14-2009
I have a string of data that I am trying to pull values from and have
hit a roadblack since I am still getting the hang of Ruby, in Perl this
would be easier but it seems that Ruby may be able to do this much
simpler.

My data starts as -
send data StartTime: 20090413 13:41:53.000 ScriptName:changeTests
Pass:15 Fail:0 Total:15

Then I am able to regex it to something like -
ScriptName:changeTests Pass:15 Fail:0 Total:15

The code I have is:
if line =~ /data/
# Remove everything from the beginning up to ScriptName
line.sub!(/^send.*\d\d\d\s/,"")
# Split the line by space, then get pairs by :
arr = line.split(/\s/).map do |i|
t = i.sub(/[a-zA-Z]+\[a-zA-Z]+|\d{2,3})/)
end
end

After the arr = line.split I am not sure what to do, I was playing
around with various ways of pulling the data out but I am not totally
clear on Ruby data structures. What I would like to do is pull out all
the values to the right of the :'s and save them for a SQL insert
statement, this is data I would like to store in a database after
pulling out the values I need. Is it easier to use map to be able to
iterate through the values, or can I actually split the data line so
that I can end up with each combined value sort of acting like a hash
key? I'd appreciate some hints on what might be a good next step so
that after arr I should be able to have values like:
ScriptName = changeTests
Pass = 15
Fail = 0
Total = 15

Thanks
--
Posted via http://www.ruby-forum.com/.

 
Reply With Quote
 
 
 
 
Robert Dober
Guest
Posts: n/a
 
      04-14-2009
On Tue, Apr 14, 2009 at 8:59 PM, Michael Furmaniuk <> w=
rote:
> I have a string of data that I am trying to pull values from and have
> hit a roadblack since I am still getting the hang of Ruby, in Perl this
> would be easier but it seems that Ruby may be able to do this much
> simpler.
>
> My data starts as -
> =A0send data StartTime: 20090413 13:41:53.000 ScriptName:changeTests
> Pass:15 Fail:0 Total:15
>
> Then I am able to regex it to something like -
> =A0ScriptName:changeTests Pass:15 Fail:0 Total:15
>
> The code I have is:
> =A0 =A0 =A0 =A0if line =3D~ /data/
> =A0 =A0 =A0 =A0 =A0 =A0# Remove everything from the beginning up to Scrip=

tName
> =A0 =A0 =A0 =A0 =A0 =A0line.sub!(/^send.*\d\d\d\s/,"")
> =A0 =A0 =A0 =A0 =A0 =A0# Split the line by space, then get pairs by :
> =A0 =A0 =A0 =A0 =A0 =A0arr =3D line.split(/\s/).map do |i|
> =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0t =3D i.sub(/[a-zA-Z]+\[a-zA-Z]+|\d{2,3}=

)/)
> =A0 =A0 =A0 =A0 =A0 =A0end
> =A0 =A0 =A0 =A0end
>
> After the arr =3D line.split I am not sure what to do, I was playing
> around with various ways of pulling the data out but I am not totally
> clear on Ruby data structures. =A0What I would like to do is pull out all
> the values to the right of the :'s and save them for a SQL insert
> statement, this is data I would like to store in a database after
> pulling out the values I need. =A0Is it easier to use map to be able to
> iterate through the values, or can I actually split the data line so
> that I can end up with each combined value sort of acting like a hash
> key? =A0I'd appreciate some hints on what might be a good next step so
> that after arr I should be able to have values like:
> ScriptName =3D changeTests
> Pass =3D 15
> Fail =3D 0
> Total =3D 15

Not tested but maybe you can fix errors

x.split(/\s*(\w+):\s*/)[-8..-1].each_cons(2).map{ |k,v| "#{k} =3D #{v}" }

which gives you data like

["ScriptName =3D changeTests", "changeTests =3D Pass", "Pass =3D 15", "15 =
=3D
Fail", "Fail =3D 0", "0 =3D Total", "Total =3D 15"]

which if printed with puts gives you the output above.

Note also that instead of that you could create a Hash

Hash[ *x.split(/\s*(\w+):\s*/)[-8..-1]]

HTH
Robert
>
> Thanks
> --
> Posted via http://www.ruby-forum.com/.
>
>




--=20
Si tu veux construire un bateau ...
Ne rassemble pas des hommes pour aller chercher du bois, pr=E9parer des
outils, r=E9partir les t=E2ches, all=E9ger le travail=85 mais enseigne aux
gens la nostalgie de l=92infini de la mer.

If you want to build a ship, don=92t herd people together to collect
wood and don=92t assign them tasks and work, but rather teach them to
long for the endless immensity of the sea.

--
Antoine de Saint-Exup=E9ry

 
Reply With Quote
 
 
 
 
Joel VanderWerf
Guest
Posts: n/a
 
      04-14-2009
Robert Dober wrote:
> x.split(/\s*(\w+):\s*/)[-8..-1].each_cons(2).map{ |k,v| "#{k} = #{v}" }


Scan is also useful for this kind of thing...

s = "ScriptName:changeTests Pass:15 Fail:0 Total:15"
p s.scan(/(\w+)\S+)/)
# ==> [["ScriptName", "changeTests"], ["Pass", "15"], ["Fail", "0"],
["Total", "15"]]

To deal with the full string:

s = "send data StartTime: 20090413 13:41:53.000 ScriptName:changeTests
Pass:15 Fail:0 Total:15"
a = s.scan(/(\w+):\s*([\s\d:.]+|\S+)/)
p a
# ==> [["StartTime", "20090413 13:41:53.000 "], ["ScriptName",
"changeTests"], ["Pass", "15 "], ["Fail", "0 "], ["Total", "15"]]
a.shift
a.each {|key,val| puts "#{key} = #{val}"}

# ==>
# ScriptName = changeTests
# Pass = 15
# Fail = 0
# Total = 15

--
vjoel : Joel VanderWerf : path berkeley edu : 510 665 3407

 
Reply With Quote
 
Robert Dober
Guest
Posts: n/a
 
      04-15-2009
Seems I used only the second best tool for the job .
R.

 
Reply With Quote
 
Michael Furmaniuk
Guest
Posts: n/a
 
      04-15-2009
Hmm....didn't realize I had this many options for it all.

Thanks...of course now I have to study these so I can understand what is
going on...ahh the learning!

--
Posted via http://www.ruby-forum.com/.

 
Reply With Quote
 
 
 
Reply

Thread Tools

Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is On
Smilies are On
[IMG] code is On
HTML code is Off
Trackbacks are On
Pingbacks are On
Refbacks are Off


Similar Threads
Thread Thread Starter Forum Replies Last Post
Re: Pulling Strings With The 70-200 VR2!! tony cooper Digital Photography 57 08-10-2010 11:14 AM
Re: Pulling Strings With The 70-200 VR2!! Bruce Digital Photography 3 08-03-2010 12:27 AM
Strings, Strings and Damned Strings Ben C Programming 14 06-24-2006 05:09 AM
Pulling strings gangle Computer Support 2 09-16-2004 03:04 PM
pulling set of unique values from a list Ben Davies Python 3 01-14-2004 08:03 PM



Advertisments
 



1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57