problem with .each do

  • Thread starter Lady Michelle Bhaal
  • Start date
L

Lady Michelle Bhaal

Hiya. The book does things this way, so why doesn't it work for me?
What's going on?

def fromWeb(site, url)
# get data from website
h = Net::HTTP.new(site, 80)
resp, data=h.get(url, nil)

# process data
data.each do <- point of second error
|line|
if /DGM_navigation/ =~ line do
# decode page lineage
step=Array.new
astep, line = getNextWord(line)
while astep != nil
step.push(astep)
astep, line = getNextWord(line)
end
puts "Page Lineage"
step.each do
|astep|
step.each do
put " "
end
puts astep
end
end # end DGM_naviation
end # end data.each <- gets "undefined method 'line'", from the second
error point above
end # end def fromWeb

def getNextWord(line)
i1 = />\w+</ =~ line

string_wanted=$&[1..$&.length-1]
string_remaining=$'
return string_wanted, string_remaining
end
 
L

Lloyd Zusman

Lady Michelle Bhaal said:
Hiya. The book does things this way, so why doesn't it work for me?
What's going on?

def fromWeb(site, url)
# get data from website
h = Net::HTTP.new(site, 80)
resp, data=h.get(url, nil)

# process data
data.each do <- point of second error
|line|
[ ... etc. ... ]
end # end data.each <- gets "undefined method 'line'", from the second

It turns out that Net::Http#get no longer returns a pair of values. It
has changed between ruby version 1.6 (from the edition of the book that
you probably have) and 1.8. This is explained in the method's latest
documentation (from
http://www.ruby-doc.org/stdlib/libdoc/net/http/rdoc/index.html):

get(path, initheader = nil, dest = nil) {|+body_segment+| ...}

Gets data from path on the connected-to host. header must be a Hash
like { 'Accept' => '*/*', ... }.

In version 1.1 (ruby 1.6), this method returns a pair of objects, a
Net::HTTPResponse object and the entity body string. In version 1.2
(ruby 1.8), this method returns a Net::HTTPResponse object.

If called with a block, yields each fragment of the entity body in
turn as a string as it is read from the socket. Note that in this
case, the returned response object will not contain a (meaningful)
body.

dest argument is obsolete. It still works but you must not use it.

In version 1.1, this method might raise an exception for 3xx
(redirect). In this case you can get a HTTPResponse object by
"anException.response".

In version 1.2, this method never raises exception.

# version 1.1 (bundled with Ruby 1.6)
response, body = http.get('/index.html')

# version 1.2 (bundled with Ruby 1.8 or later)
response = http.get('/index.html')

# using block
File.open('result.txt', 'w') {|f|
http.get('/~foo/') do |str|
f.write str
end
}

See also Net::HTTPResponse within that same documentation.
 
D

Daniel Schierbeck

Lady said:
Hiya. The book does things this way, so why doesn't it work for me?
What's going on?

def fromWeb(site, url)
# get data from website
h = Net::HTTP.new(site, 80)
resp, data=h.get(url, nil)

# process data
data.each do <- point of second error
|line|

Try `data.each do |line|'. It may be the line break that's causing trouble.
if /DGM_navigation/ =~ line do
# decode page lineage
step=Array.new
astep, line = getNextWord(line)
while astep != nil
step.push(astep)
astep, line = getNextWord(line)
end
puts "Page Lineage"
step.each do
|astep|

Same here.
step.each do
put " "
end
puts astep
end
end # end DGM_naviation
end # end data.each <- gets "undefined method 'line'", from the
second error point above
end # end def fromWeb

def getNextWord(line)
i1 = />\w+</ =~ line

string_wanted=$&[1..$&.length-1]
string_remaining=$'
return string_wanted, string_remaining
end


Cheers,
Daniel
 
D

Daniel Schierbeck

Sorry, it actually seems to work even with the line break. My bad.


Cheers,
Daniel
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Members online

No members online now.

Forum statistics

Threads
473,997
Messages
2,570,240
Members
46,830
Latest member
HeleneMull

Latest Threads

Top