Разбор удаленного файла с FasterCSV

Я пытаюсь разобрать первые 5 строк удаленного файла CSV. Однако, когда я делаю, это поднимает Errno::ENOENT исключение и говорит:

No such file or directory - [file contents] (при этом [содержимое файла] является дампом содержимого CSV

Вот мой код:

  def preview
    @csv = []
    open('http://example.com/spreadsheet.csv') do |file|
      CSV.foreach(file.read, :headers => true) do |row|
        n += 1
        @csv << row
        if n == 5
          return @csv
        end
      end
    end
  end

Приведенный выше код построен на основе того, что, как я видел, используют другие при переполнении стека, но я не могу заставить его работать.

Если я удалю read метод из файла, это вызывает TypeError исключение, сказав:

can't convert StringIO into String

Я что-то упускаю?

2 ответа

Вы можете вручную передать каждую строку в CSV для анализа:

require 'open-uri'
require 'csv'

def preview(file_url)
    @csv = []
    open(file_url).each_with_index do |line, i|
        next if i == 0 #Ignore headers
        @csv << CSV.parse(line)
        if i == 5
            return @csv
        end
    end
end

puts preview('http://www.ferc.gov/docs-filing/eqr/soft-tools/sample-csv/contract.txt')

Foreach ожидает имя файла. Попробуй parse.each

Другие вопросы по тегам