我正在ruby on rails应用程序上使用fastercsv,如果文件无效,它将抛出一个异常。
我看过FasterCSV doc,如果我对一个块使用FasterCSV::parse,它将一次读取一行文件,而不会分配太多内存。如果文件上有任何类型的错误,它将抛出FasterCSV::MalformedCSV异常。
我已经实现了一个定制的解决方案,但我不确定它是否是最好的解决方案(见下面的回答)。我很想知道其他的选择

最佳答案

这是我目前的解决办法。我对了解改进/替代品很感兴趣。

# /lib/fastercsv_is_valid.rb

class FasterCSV

  def self.is_valid?(file, options = {})
    begin
      FasterCSV.parse(file, options) { |row| }
      true
    rescue FasterCSV::MalformedCSV
      false
    end
  end

end

我用这种方法:
# /models/csv_importer.rb

class CsvImporter
  include ActiveRecord::Validations

  validates_presence_of :file
  validate check_file_format

...

  private

  def check_file_format
    errors.add :file, "Malformed CSV! Please check syntax" unless FasterCSV::is_valid? file
  end
end

10-08 09:31