Sean O'Dell wrote: > On Monday 21 June 2004 11:08, Graham Nicholls wrote: >> I've got a file which I've read in and split to make a hash like this: >> >> >> def initialize(fname) >> @data=Hash.new >> begin >> IO.foreach(fname) do |line| >> key,value=line.chomp.split(":") >> @data[key]=value >> end >> end >> >> This gives a hash keyed on the first field of the file, where : is the >> separator. (NB How do I handle : in the data - prompt to >> self!) >> >> But when I try to get the value associated with that key by a fetch, I >> get and IndexError: >> >> def get_datum(datid) # Typical datid is $01 - I've stripped off the >> colon. >> if $debug >> print("Getting data for id [#{datid}]\n") # Prints $01 >> end >> >> begin >> #@data.fetch("$01") - this works OK, >> @data.fetch(datid) # This causes an IndexError >> rescue IndexError => err >> print("No data for key [#{datid}] : #{err}\n") >> @data.each do |key,val| >> printf("Key [%s] => [%s]\n",key,val) # Shows $01 => avalue >> (amongst others) >> end >> exit(NO_DATA) >> end >> end >> >> I'm racking my brains, but to no avail. If I put the key in as a >> literal, it returns, but using the datid variable, I get an IndexError. > > How are you calling get_datum? Show us the line where you call it that > gives you that error. > > Sean O'Dell printf("%s",datid.class) told me it was an array - what a nitwit! Now sorted. Thanks, both. Graham -- #include wit