Asp Forum
Home
|
Login
|
Register
|
Search
Forums
>
comp.lang.ruby
Arrays not working as I expected - help
rrajeshh
11/20/2007 3:57:00 PM
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/h...
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/h...
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.
2 Answers
Cameron McBride
11/20/2007 4:11:00 PM
0
Hello,
On Nov 20, 2007 11:00 AM, <rrajeshh@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/h...
> 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/h...
> 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
rrajeshh
11/20/2007 4:41:00 PM
0
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/h...
> > 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/h...
> > 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 -
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/h...
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/h...
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
Servizio di avviso nuovi messaggi
Ricevi direttamente nella tua mail i nuovi messaggi per
Arrays not working as I expected - help
Inserendo la tua e-mail nella casella sotto, riceverai un avviso tramite posta elettronica ogni volta che il motore di ricerca troverà un nuovo messaggio per te
Il servizio è completamente GRATUITO!
x
Login to ForumsZone
Login with Google
Login with E-Mail & Password