导入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
本身。