2013-04-02 5 views
1

У меня есть приложение, которое использует Mechanize для получения страницы. Обратите внимание, что HTTP-сайт, который я пытаюсь проанализировать, является файлом * .TXT.Heroku + Mechanize превращает OBJ в строку

В IRB я бегу простой программы, как:

require 'rubygems' 
require 'mechanize' 
require 'nokogiri' 

@agent = Mechanize.new{|agent| agent.user_agent = 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10.6; rv:9.0a2) Gecko/20111101 Firefox/9.0a2'} 

@agent.get(http://some_sort_of_text_file.txt) 

for line in @agent.page.content 
puts line 
end 

Это прекрасно работает, и я получаю каждую строку в текстовом файле в качестве выходного сигнала.

Но когда я нажимаю его Heroku .. Я получаю сообщение об ошибке, как это:

NoMethodError (undefined method `each' for #<String:0x00000003ebf200>): 

Ну ... Я узнал, что по какой-то причине, что страница стала одна гигантская строка файла, который я нужно сделать еще один шаг, чтобы сделать некоторые программы, как:

@doc = @agent.page.content 
     @items =[] 
     start =0 
     @doc.gsub(/|/, " ") 
     @doc.gsub(/\\n/,"|") 
     counter=0 
     while counter <= @doc.length 
     if(@doc[counter]== "|") 
      @items << @doc[start..counter] 
      start=counter+1 
     end 
     counter = counter+1 
     end 

Любая идея, почему это происходит на сайте в виде строки на Heroku и почему мне нужно сделать дополнительный шаг просто сломать каждую строку в массив?

Любая помощь приветствуется.

ответ

1

Когда я запускаю код на своем локальном компьютере в irb, @agent.page.content является строкой.

Если то, что вы хотите, чтобы принять результат и превратить его в массив, это будет работать:

# (put this after @agent.get(http://some_sort_of_text_file.txt) 
lines = @agent.page.content.split("\n") 

# Now you can do something like this if you want 
lines.each do |line| 
    puts line 
end 
+0

Это был такой старый проектируемый, я положил его на задний план. Besdies каждая страница была сделана другим человеком, поэтому форматирование было дурацким, поэтому я просто сдался. –