Кажется, я не могу заставить это работать. Я хочу получить файл CSV с другого веб-сервера для чтения в моем приложении. Я бы хотел это назвать так:
url = 'http://www.testing.com/test.csv'
records = FasterCSV.read(url, :headers => true, :header_converters => :symbol)
Но это не работает. Я попробовал поискать в Google, и все, что я придумал, это отрывок: Практические рубиновые самоцветы
Итак, я попытался изменить его следующим образом:
require 'open-uri'
url = 'http://www.testing.com/test.csv'
csv_url = open(url)
records = FasterCSV.read(csv_url, :headers => true, :header_converters => :symbol)
... и я получаю ошибку can't convert Tempfile into String (исходящую от драгоценного камня FasterCSV).
Может кто подскажет, как заставить это работать?





Я бы получил файл с Net::HTTP, например, и скормил его на FasterCSV
Извлечено из ri Net::HTTP
require 'net/http'
require 'uri'
url = URI.parse('http://www.example.com/index.html')
res = Net::HTTP.start(url.host, url.port) {|http|
http.get('/index.html')
}
puts res.body
"res.body" будет строкой, которую вам, вероятно, следует разделить на массив на "\ n" и передать его в FasterCSV.read.
open-uri выше уровня Net :: HTTP, я думаю, что он лучше подходит для примера neezer.
require 'open-uri'
url = 'http://www.testing.com/test.csv'
open(url) do |f|
f.each_line do |line|
FasterCSV.parse(line) do |row|
# Your code here
end
end
end
http://www.ruby-doc.org/core/classes/OpenURI.htmlhttp://fastercsv.rubyforge.org/
Я бы загрузил его с помощью rio - так же просто, как:
require 'rio'
require 'fastercsv'
array_of_arrays = FasterCSV.parse(rio('http://www.example.com/index.html').read)
Вы допустили небольшую опечатку. Вы должны были использовать FasterCSV.parse вместо FasterCSV.read:
data = open('http://www.testing.com/test.csv')
records = FasterCSV.parse(data)
Я загружаю CSV-файл с помощью Paperclip и сохраняю его в Cloudfiles, а затем начинаю обработку файла с помощью Delayed_job.
Это сработало для меня:
require 'open-uri'
url = 'http://www.testing.com/test.csv'
open(url) do |file|
FasterCSV.parse(file.read) do |row|
# Your code here
end
end
Я пробовал это и теперь получаю сообщение об ошибке: слишком длинное имя файла. После этого он перечисляет все содержимое моего файла CSV. Я сейчас смотрю документацию; Какие-либо предложения?