From: Urban Hafner Date: 2001-03-28T02:15:19+09:00 Subject: [ruby-talk:13240] hash problem Hello everybody, I've written a class that should create a simple database (like dbdbd of David Alan Black, but I didn't quite understand it so I tried to write one on my own to learn a bit more about ruby). Here's a little script that uses this database: # test.rb require "UDB" array = %w{Name Age Size Lines} database = UDB.new(array) hash = { "Name" => "Urban", "Age" => 19, "Size" => 1.73, "Lines" => 35 } database.test database.write(hash) database.test database.typeout And here are the error is get: $ ruby test.rb key: Age value: 1 key: Size value: 2 key: Lines value: 3 key: Name value: 0 ./UDB.rb:31:in `fetch': key not found (IndexError) from ./UDB.rb:31:in `write' from ./UDB.rb:29:in `each' from ./UDB.rb:29:in `write' from test.rb:10 Well,... I think that the problem is somewhere, where I use the hashes @row and @index but I don't know what I did wrong. Thanks for your help Urban -- class UDB def initialize(columnames) @columnames = columnames # The Database of this object @database = Array.new count = 0 # Put all the columnames into the database @columnames.each do |name| @column = Array.new @column[0] = name @database[count] = @column count += 1 end @index = {} count = 0 # Register all the columns in a hash @database.each do |name| @index[name] = count count += 1 end end def test @index.each { |key,value| print "key: ", key ," value: ", value, "\n" } end # Write new entry into the database def write(row) @row = row @row.each do |key,value| # Get Number of the column columno = @index.fetch(key) columno = columno.to_i # Make new entry @database[columno].push(value) end end # Write the database to stdout def typeout # Get number of rows 0.upto(@database[0].length - 1) do |row| 0.upto(@index.length - 1) do |column| print " #{@database[column][row]} " end print "\n" end end end