# Arrays not working as I expected - help

**URL:** <https://rubytalk.org/t/arrays-not-working-as-i-expected-help/42370>\
**Category:** ruby-talk\
**Created:** [20 November 2007 16:00 UTC](https://rubytalk.org/t/arrays-not-working-as-i-expected-help/42370 "2007-11-20T16:00:10Z")\
**Posts on this page:** 3\
**Page:** 1

<div class="post-metadata">

**Author:** ![Rrajeshh](https://avatars.discourse-cdn.com/v4/letter/r/cab0a1/32.png) [@Rrajeshh](https://rubytalk.org/u/Rrajeshh)\
**Post date:** [20 November 2007 16:00 UTC](https://rubytalk.org/t/arrays-not-working-as-i-expected-help/42370/1 "2007-11-20T16:00:10Z")

</div>

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'

&nbsp;&nbsp;page = Hpricot(open("[http://finance.google.com/finance/historical](http://finance.google.com/finance/historical)?  
q=ORCL&histperiod=weekly&start=01&num=2"))

&nbsp;&nbsp;&nbsp;page.search("#prices").each do |timesection|

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

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

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

&nbsp;&nbsp;page = Hpricot(open("[http://finance.google.com/finance/historical](http://finance.google.com/finance/historical)?  
q=ORCL&histperiod=weekly&start=01&num=1"))

&nbsp;&nbsp;&nbsp;page.search("#prices").each do |timesection|

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

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;datePointValue = {  
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;"date" =\> values[0].inner\_html,  
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;"open" =\> values[1].inner\_html,  
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;"high" =\> values[2].inner\_html,  
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;"low" =\> values[3].inner\_html,  
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;"close" =\> values[4].inner\_html,  
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;"volume" =\> values[5].inner\_html  
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}

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

ERROR MESSAGE  
htest.rb:14: undefined method `inner\_html' for nil:NilClass  
(NoMethodError)  
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;from htest.rb:10:in `each'  
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;from htest.rb:10  
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;from htest.rb:8:in `each'  
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;from htest.rb:8

Kindly suggest.

---

<div class="post-metadata">

**Author:** ![Cameron\_McBride](https://avatars.discourse-cdn.com/v4/letter/c/a87d85/32.png) [@Cameron\_McBride](https://rubytalk.org/u/Cameron_McBride)\
**Post date:** [20 November 2007 16:11 UTC](https://rubytalk.org/t/arrays-not-working-as-i-expected-help/42370/2 "2007-11-20T16:11:16Z")

</div>

Hello,

> 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'
> 
> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;page = Hpricot(open("[http://finance.google.com/finance/historical](http://finance.google.com/finance/historical)?  
> q=ORCL&histperiod=weekly&start=01&num=2"))
> 
> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;page.search("#prices").each do |timesection|
> 
> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;values=timesection.search("td")  
> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;datePointValue = {  
> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;"date" =\> values[0].inner\_html,  
> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;"open" =\> values[1].inner\_html,  
> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;"high" =\> values[2].inner\_html,  
> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;"low" =\> values[3].inner\_html,  
> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;"close" =\> values[4].inner\_html,  
> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;"volume" =\> values[5].inner\_html  
> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}
> 
> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;datePointValue.each do |key, value|  
> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;puts key + " - " + value  
> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;end  
> &nbsp;&nbsp;&nbsp;&nbsp;end
> 
> But when I add a loop and change the code as follows. It gives me  
> error message  
> UPDATED CODE - NOT WORKING -
> 
> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;page = Hpricot(open("[http://finance.google.com/finance/historical](http://finance.google.com/finance/historical)?  
> q=ORCL&histperiod=weekly&start=01&num=1"))
> 
> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;page.search("#prices").each do |timesection|
> 
> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;timesection.search("tr").each do |datePointSets|  
> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;values = datePointSets.search("td")
> 
> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;datePointValue = {  
> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;"date" =\> values[0].inner\_html,  
> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;"open" =\> values[1].inner\_html,  
> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;"high" =\> values[2].inner\_html,  
> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;"low" =\> values[3].inner\_html,  
> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;"close" =\> values[4].inner\_html,  
> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;"volume" =\> values[5].inner\_html  
> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}
> 
> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;datePointValue.each do |key, value|  
> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;puts key + " - " + value  
> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;end  
> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;end  
> &nbsp;&nbsp;&nbsp;&nbsp;end
> 
> ERROR MESSAGE  
> htest.rb:14: undefined method `inner\_html' for nil:NilClass  
> (NoMethodError)  
> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;from htest.rb:10:in `each'  
> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;from htest.rb:10  
> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;from htest.rb:8:in `each'  
> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;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, 2007 11:00 AM, \<rrajeshh@gmail.com\> wrote:

---

<div class="post-metadata">

**Author:** ![Rrajeshh](https://avatars.discourse-cdn.com/v4/letter/r/cab0a1/32.png) [@Rrajeshh](https://rubytalk.org/u/Rrajeshh)\
**Post date:** [20 November 2007 16:45 UTC](https://rubytalk.org/t/arrays-not-working-as-i-expected-help/42370/3 "2007-11-20T16:45:05Z")

</div>

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

&nbsp;&nbsp;page = Hpricot(open("[http://finance.google.com/finance/historical](http://finance.google.com/finance/historical)?  
q=ORCL&histperiod=weekly&start=01&num=1"))

&nbsp;&nbsp;&nbsp;page.search("#prices").each do |timesection|

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

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;values.length.times do |i|  
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;puts values[i].inner\_html # WORKS GREAT!! Prints 5 values  
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;end  
&nbsp;&nbsp;&nbsp;&nbsp;end  
&nbsp;&nbsp;&nbsp;&nbsp;end

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

&nbsp;&nbsp;&nbsp;page.search("#prices").each do |timesection|

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

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;puts values[0].inner\_html # ERRORS HERE  
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;puts values[1].inner\_html # ERRORS HERE

&nbsp;&nbsp;&nbsp;&nbsp;end  
&nbsp;&nbsp;&nbsp;&nbsp;end

> **···**
>
> On Nov 20, 11:11 am, Cameron McBride \<cameron.mcbr...@gmail.com\> wrote:
> 
> > Hello,
> > 
> > On Nov 20, 2007 11:00 AM, \<rraje...@gmail.com\> wrote:
> > 
> > \> 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](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](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.
> > 
> > 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- Hide quoted text -
> > 
> > - Show quoted text -
