error in "each" method in following code.

require 'rubygems' require 'nokogiri' require 'sqlite3'

FIELD_NAMES = [['selectcity', 'VARCHAR'],['match', 'VARCHAR'], ['phone_no', 'NUMERIC'], ['name', 'VARCHAR'],['address', 'VARCHAR'] ]

TABLE_DIV_ID = "#dgrSearch" OFILE = File.open('data-hold/tel-directory.txt', 'w') OFILE.puts( FIELD_NAMES.map{|f| f[0]}.join("\t") )

DBNAME = "data-hold/tel-directory.sqlite" File.delete(DBNAME) if File.exists?DBNAME DB = SQLite3::Database.new( DBNAME )

TABLE_NAME = "telephone_records" DB_INSERT_STATEMENT = "INSERT into #{TABLE_NAME} values   (#{FIELD_NAMES.map{'?'}.join(',')})"

DB.execute "CREATE TABLE #{TABLE_NAME}(#{FIELD_NAMES.map{|f| "`#{f[0]}` #{f[1]}"}.join(', ')});" FIELD_NAMES.each do |fn|   DB.execute "CREATE INDEX #{fn[2]} ON #{TABLE_NAME}(#{fn[0]})" unless fn[2].nil? end

Dir.glob("data-hold/pages/*.html").reject{|f| f =~ /All match/}.each do

fname>

   meta_info = File.basename(fname, '.html').split('--')    page = Nokogiri::HTML(open(fname))

page.css("#{TABLE_DIV_ID} tr")[1..-2].each do |tr|       data_tds = tr.css('td').map{ |td|          td.text.gsub(/[$,](?=\d)/, '').gsub(/\302\240|\s/, ' ').strip       }

data_row = meta_info + data_tds       OFILE.puts( data_row.join("\t"))       DB.execute(DB_INSERT_STATEMENT, data_row)

end end

OFILE.close

It might be easier to help if you told us what the error is, and which line is causing the problem.

Colin

Cut it down to the minimun necessary to show the problem. There are several each calls here.

Jeffrey

Quoting Prajwal B. <lists@ruby-forum.com>:

no method error "each" for nil class

page.css("#{TABLE_DIV_ID} tr")[1..-2].each do |tr|       data_tds = tr.css('td').map{ |td|          td.text.gsub(/[$,](?=\d)/, '').gsub(/\302\240|\s/, ' ').strip       }

page.css("#{TABLE_DIV_ID} tr")[1..-2].each do |tr|       data_tds = tr.css('td').map{ |td|          td.text.gsub(/[$,](?=\d)/, '').gsub(/\302\240|\s/, ' ').strip       }

first line is saying no method error 'each' do for nil class

Then page.css("#{TABLE_DIV_ID} tr")[1..-2] is nil

Colin

Dir.glob("data-hold/pages/*.html").each do |fname|    meta_info = File.basename(fname, '.html').split('--')    page = Nokogiri::HTML(open(fname))

page.css("#{TABLE_DIV_ID} tr")[1..-2].each do |tr|       data_tds = tr.css(td).map{ |td|          td.text.gsub(/[$,](?=\d)/, '').gsub(/\302\240|\s/, '').strip       }

error in each do method in first line of both blocks

block irb binding in second block first line

Dir.glob("data-hold/pages/*.html").each do |fname| meta_info = File.basename(fname, '.html').split('--') page = Nokogiri::HTML(open(fname))

page.css("#{TABLE_DIV_ID} tr")[1..-2].each do |tr| data_tds = tr.css(td).map{ |td| td.text.gsub(/[$,](?=\d)/, '').gsub(/\302\240|\s/, '').strip }

error in each do method in first line of both blocks

Why have you posted this again rather than continuing with previous thread? As I said previously the object you are calling .each on must be nil. Have a look at the Rails Guide on Debugging for suggestions as to how to debug the code to find out why.

Colin