我正在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