How do you make a hash key using a wordy string?


#1

Hello everyone.

How do you make a hash key using a string? For instance,

txt file…
1 This is a string 22234343
2 This is another string 434355455
3 This is a different string 34324545

file = File.open(“mytext4hash.txt”)
file.each_line do |line|
rows = {}
key, val = line.chomp.split("""",4)
rows[key] = val

#this is where I am having issue.
puts rows[“1 This is a string”] #need this to point to only “22234343”

end

Thanks in advance. MC


#2

Try this:

file = File.open(“mytext4hash.txt”)
rows = {}
file.each_line do |line|
/(.+)\s+(\d+)$/ =~ line.chomp
key = Regexp.last_match(1)
val = Regexp.last_match(2)
rows[key] = val
end
puts rows[“1 This is a string”] #need this to point to only “22234343”

First, you were initializing “rows” inside the loop, which meant you
only kept the last line parsed! The regular expression does this:

(.+) matches at least one character (defaults to starting at the
beginning) and save it in the first “capture group”. The parentheses
do that for you. I then refer to it on the next line; the “1” passed
to last_match.
\s+ matches at least one space.
(\d+)$ matches at least one digit at the end of the line ($) and
saves it as the second capture group.

Make sense?

dean


#3

Thanks Dean. Makes sense!