导入CSV的Rails由于格式错误而失败

当我尝试使用以下代码导入文件时,我收到CSV:MalFormedCSVError

  def import_csv(filename, model) CSV.foreach(filename, :headers => true) do |row| item = {} row.to_hash.each_pair do |k,v| item.merge!({k.downcase => v}) end model.create!(item) end end 

csv文件是巨大的,所以有没有办法我可以使用csv文件的其余部分记录格式错误的行和CONTINUE EXECUTION

您可以尝试自己处理文件,让CSV一次在一行上工作。 像这样的东西:

 File.foreach(filename) do |line| begin CSV.parse(line) do |row| # Do something with row... end rescue CSV::MalformedCSVError => e # complain about line end end 

当然,你必须自己对标题行做些什么。 此外,如果您在CSV中嵌入换行符,则无法使用此function。

使用File手动遍历File中的每一行的一个问题是CSV文件可以包含带有\n (换行符)的字段。 File将使用它来指示换行符,您将最终尝试解析部分行。

这是另一种可能适合您的方法:

 @csv = CSV.new('path/to/file.csv') loop do begin row = @csv.shift break unless row # do stuff rescue CSV::MalformedCSVError => error # handle the error next end end 

我在这种方法中看到的主要缺点是,在处理错误时,您无权访问CSV行字符串,只有CSV::MalformedCSVError本身。