Arrays not working as I expected - help

Hi
I am new programmer to Ruby. Just 1 days old. I do have some
background in java.

I am having a problem that is troubling me since yesterday and having
spend several hours on it, I still dont have any idea.

CODE WORKING GREAT BELOW

require ‘rubygems’
require ‘hpricot’
require ‘open-uri’

page = Hpricot(open(“http://finance.google.com/finance/historical?
q=ORCL&histperiod=weekly&start=01&num=2”))

page.search(“#prices”).each do |timesection|

  values=timesection.search("td")
datePointValue = {
  "date"   => values[0].inner_html,
  "open"   => values[1].inner_html,
  "high"   => values[2].inner_html,
  "low"    => values[3].inner_html,
  "close"  => values[4].inner_html,
  "volume" => values[5].inner_html
}

datePointValue.each do |key, value|
  puts key + " - " + value
end
end

But when I add a loop and change the code as follows. It gives me
error message
UPDATED CODE - NOT WORKING -

page = Hpricot(open(“http://finance.google.com/finance/historical?
q=ORCL&histperiod=weekly&start=01&num=1”))

page.search(“#prices”).each do |timesection|

  timesection.search("tr").each do |datePointSets|
  values = datePointSets.search("td")

  datePointValue = {
    "date"   => values[0].inner_html,
    "open"   => values[1].inner_html,
    "high"   => values[2].inner_html,
    "low"    => values[3].inner_html,
    "close"  => values[4].inner_html,
    "volume" => values[5].inner_html
  }

  datePointValue.each do |key, value|
    puts key + " - " + value
  end
end
end

ERROR MESSAGE
htest.rb:14: undefined method inner_html' for nil:NilClass (NoMethodError) from htest.rb:10:in each’
from htest.rb:10
from htest.rb:8:in `each’
from htest.rb:8

Kindly suggest.

Hello,

On Nov 20, 2007 11:00 AM, [email protected] wrote:

require ‘hpricot’
“open” => values[1].inner_html,

    timesection.search("tr").each do |datePointSets|

    from htest.rb:10
    from htest.rb:8:in `each'
    from htest.rb:8

Kindly suggest.

At a knee-jerk guess, you’ve changed how ‘values’ is populated. I’d
wager that the values result from the Hpricot search isn’t properly
set. You should print values before you set the datePointValue hash
and see what it contains.

In addition, you might consider another sanity check if you explicitly
access 6 elements of an array. Like

raise “Parsing Error: values not set correctly” if (values.nil? or
values.size < 6)

Cheers.

Cameron

On Nov 20, 11:11 am, Cameron McBride [email protected]
wrote:

background in java.
page = Hpricot(open("http://finance.google.com/finance/historical?
“close” => values[4].inner_html,
UPDATED CODE - NOT WORKING -
“date” => values[0].inner_html,
end
Kindly suggest.
values.size < 6)

Cheers.

Cameron- Hide quoted text -

  • Show quoted text -

Thats is exactly what i thought so I printed the values as shown
below. this worked fine…

page = Hpricot(open(“http://finance.google.com/finance/historical?
q=ORCL&histperiod=weekly&start=01&num=1”))

page.search(“#prices”).each do |timesection|

  timesection.search("tr").each do |datePointSets|
  values = datePointSets.search("td")

  values.length.times  do |i|
    puts values[i].inner_html    # WORKS GREAT!!  Prints 5 values
  end
end
end

Interestingly the loop prints the values correctly but when access
these as shown below I get the same error.
page = Hpricot(open(“http://finance.google.com/finance/historical?
q=ORCL&histperiod=weekly&start=01&num=1”))

page.search(“#prices”).each do |timesection|

  timesection.search("tr").each do |datePointSets|
  values = datePointSets.search("td")

  puts values[0].inner_html   # ERRORS HERE
  puts values[1].inner_html   # ERRORS HERE

end
end