On Tue, Apr 14, 2009 at 8:59 PM, Michael Furmaniuk <mfurmaniuk / yahoo.com> 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