String parse

Hello,

I want to be able to parse a string and put them into variables.

for example, I have this string:

“Menu: steak_and_egg | date: 0814 | who: Anita”

I want to parse this string to assign variables like so:

menu = “steak_and_egg”
date = “0814”
who = “Anita”

What would be the fastest way of doing this.

Thanks

On Aug 14, 2007, at 6:00 PM, anitawa wrote:

menu = “steak_and_egg”
date = “0814”
who = “Anita”

What would be the fastest way of doing this.

This might work if your data isn’t too complicated:

str = “Menu: steak_and_egg | date: 0814 | who: Anita”
=> “Menu: steak_and_egg | date: 0814 | who: Anita”

Hash[str.scan(/(\w+):\s(\w+)/).flatten]
=> {“date”=>“0814”, “who”=>“Anita”, “Menu”=>“steak_and_egg”}

James Edward G. II

James Edward G. II wrote:

I want to parse this string to assign variables like so:
=> “Menu: steak_and_egg | date: 0814 | who: Anita”

Hash[str.scan(/(\w+):\s(\w+)/).flatten]
=> {“date”=>“0814”, “who”=>“Anita”, “Menu”=>“steak_and_egg”}

Might be more general than is needed. If you know in advance that the
“fields” are menu, date, and who, then this will do:

str = “Menu: steak_and_egg | date: 0814 | who: Anita”
pat = /Menu: (\S+) | date: (\S+) | who: (\S+)/

menu, date, who = str.scan(pat)[0]

On Aug 14, 8:12 pm, Joel VanderWerf [email protected] wrote:

for example, I have this string:

str = “Menu: steak_and_egg | date: 0814 | who: Anita”
pat = /Menu: (\S+) | date: (\S+) | who: (\S+)/

menu, date, who = str.scan(pat)[0]


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

Thanks, just what i was looking for

Le mercredi 15 août 2007 01:00, anitawa a écrit :

menu = “steak_and_egg”
date = “0814”
who = “Anita”

What would be the fastest way of doing this.

Thanks

This is a CSV format, You can use the csv lib from the stdlib :

parse with : and | as delimiters

str = “Menu: steak_and_egg | date: 0814 | who: Anita”
parsed = CSV.parse(str, “:”, “|”)
=> [[“Menu”, " steak_and_egg “], [” date", " 0814 “], [” who", "
Anita"]]

then, put the results in a hash

res = {}
parsed.each do |k, v|
res[k.strip] = v.strip
end
=> {“date”=>“0814”, “who”=>“Anita”, “Menu”=>“steak_and_egg”}

You can also use Enumerable#inject for putting in the Hash (or Hash::[]
with
some adaptations)