FasterCSV: чтение удаленных файлов CSV - PullRequest
3 голосов
/ 12 января 2009

Я не могу заставить это работать. Я хочу получить файл 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).

Может кто-нибудь сказать мне, как сделать эту работу?

Ответы [ 5 ]

5 голосов
/ 13 января 2009
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 / ядро ​​/ классов / OpenURI.html http://fastercsv.rubyforge.org/

1 голос
/ 03 марта 2010

У вас только что была небольшая опечатка. Вы должны были использовать FasterCSV.parse вместо FasterCSV.read:

data = open('http://www.testing.com/test.csv')
records = FasterCSV.parse(data)
1 голос
/ 12 января 2009

Я бы, например, получил файл с 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
0 голосов
/ 10 октября 2010

Я загружаю файл 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
0 голосов
/ 11 августа 2009

Я бы скачал его с помощью rio - так же просто, как:

require 'rio'
require 'fastercsv'

array_of_arrays = FasterCSV.parse(rio('http://www.example.com/index.html').read)
...