Forum: Ruby How do you make a hash key using a wordy string?

Announcement (2017-05-07): www.ruby-forum.com is now read-only since I unfortunately do not have the time to support and maintain the forum any more. Please see rubyonrails.org/community and ruby-lang.org/en/community for other Rails- und Ruby-related community platforms.
Mmcolli00 M. (Guest)
on 2008-12-03 16:15
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
Dean W. (Guest)
on 2008-12-03 17:27
(Received via mailing list)
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
Mmcolli00 M. (Guest)
on 2008-12-03 23:40
Thanks Dean. Makes sense!
This topic is locked and can not be replied to.