Newbie qustion

I’m trying to parse a file that looks like this:

text…
text…
numbers…

IDS_SOMETHIGN_SOMETHING “giving you cookies in a sec”
IDX_SOMETHING_SOMETHIGN “hi again”
IDY_SMOTHIENG_SOMETHIGN_SOMTHIGN “HELO world”
ID_ONE_THING “hello how are you”
ID_ONETHINGTOO “give me a number”
ID_ONEMORE_THING_ANDMORE “this are strings”

I’m trying to create a hash table but i’m not sure what’s wrong with my
delimeters:

class Parser

table = { }
IO.foreach(‘resurcefiletest’) { |line|
if line =~ /^ID* (.?) = \s " (.?) "/x
#if line =~ /^ \s
" (.?) " \s = \s* " (.*?) "/x
table[ $1 ] = $2
end
}

#puts table[“StaplingTitle”]
p table

end

can somebody give me a hand?

thanks,
mike

On Aug 1, 2006, at 3:35 PM, Robert S. wrote:

ID_ONETHINGTOO “give me a number”
if line =~ /^ID* (.?) = \s " (.?) "/x
#if line =~ /^ \s
" (.?) " \s = \s* " (.*?) "/x
table[ $1 ] = $2
end
}

#puts table[“StaplingTitle”]
p table
end

//x just gets confusing. Make your regexp simple:

table = {}

File.foreach filename do |line|
next unless line =~ /^ID(\S+) “(.*?)”/
table[$1] = $2
end


Eric H. - [email protected] - http://blog.segment7.net
This implementation is HODEL-HASH-9600 compliant

http://trackmap.robotcoop.com

Eric H. wrote:

On Aug 1, 2006, at 3:35 PM, Robert S. wrote:

ID_ONETHINGTOO “give me a number”
if line =~ /^ID* (.?) = \s " (.?) "/x
#if line =~ /^ \s
" (.?) " \s = \s* " (.*?) "/x
table[ $1 ] = $2
end
}

#puts table[“StaplingTitle”]
p table
end

//x just gets confusing. Make your regexp simple:

table = {}

File.foreach filename do |line|
next unless line =~ /^ID(\S+) “(.*?)”/
table[$1] = $2
end

Thanks for your help eric,

I tried what you said but nothing gets stored in the table…and i’m
nothing seeing why. do you see it?

thanks

On Aug 1, 2006, at 4:54 PM, Robert S. wrote:

Eric H. wrote:

On Aug 1, 2006, at 3:35 PM, Robert S. wrote:

if line =~ /^ID* (.?) = \s " (.*?) "/x

next unless line =~ /^ID(\S+) “(.*?)”/

I tried what you said but nothing gets stored in the table…and i’m
nothing seeing why. do you see it?

change the space to \s+

your original regexp didn’t work because there is no =, but I agree
with eric that your use of /x makes it too complex.

Robert S. wrote:

ID_ONETHINGTOO “give me a number”
#if line =~ /^ \s* " (.?) " \s = \s* " (.*?) "/x
can somebody give me a hand?
---- code: ----
table = {}

DATA.each { |line|
if line =~ /^ID ( \S+ ) \s+ " (.*) "/x
table[ $1 ] = $2
end
}
puts table.to_a.map{|a| a.join " => " }

END
text…
text…
numbers…

IDS_SOMETHIGN_SOMETHING “giving you cookies in a sec”
IDX_SOMETHING_SOMETHIGN “hi again”
IDY_SMOTHIENG_SOMETHIGN_SOMTHIGN “HELO world”
ID_ONE_THING “hello how are you”
ID_ONETHINGTOO “give me a number”
ID_ONEMORE_THING_ANDMORE “this are strings”

---- output: ----
_ONE_THING => hello how are you
_ONETHINGTOO => give me a number
Y_SMOTHIENG_SOMETHIGN_SOMTHIGN => HELO world
S_SOMETHIGN_SOMETHING => giving you cookies in a sec
_ONEMORE_THING_ANDMORE => this are strings
X_SOMETHING_SOMETHIGN => hi again