无法解析CSV文件 - “CSV :: MalformedCSVError:未加引号的字段不允许\ r或\ n”

时间:2014-06-17 17:03:54

标签: ruby-on-rails ruby csv smartercsv

我正在尝试解析上传的CSV文件。这是完整的错误消息:

[Worker(host:PC.local pid:69594)] Job ImportJob (id=4) FAILED (3 prior attempts) with CSV::MalformedCSVError: Unquoted fields do not allow \r or \n (line 1).

CSV文件如下所示:

A1;A2;A3;A4;A5
B1;B2;B3;B4;B5
C1;C2;C3;C4;C5

这就是我循环CSV文件中数据的方式:

data = SmarterCSV.process(
  file,
  {
    :col_sep => ';',
    :chunk_size => 100,
    :remove_empty_values => false,
    :remove_empty_hashes => false
  }
) do |d|

这里有什么问题?我试图把标题放到文件中,甚至试图删除它(上面发布的版本),但在这两种情况下我都得到了相同的错误。我该如何摆脱它?

2 个答案:

答案 0 :(得分:3)

假设CSV文件是在Windows上创建的,那么行结尾是" \ r \ n"就不足为奇了。尝试明确地将其设为行分隔符:

:row_sep => "\r"

全部放在一起:

data = SmarterCSV.process(file, 
  :col_sep => ';', 
  :row_sep => "\r", 
  :chunk_size => 100, 
  :remove_empty_values => false, 
  :remove_empty_hashes => false) do |d|

答案 1 :(得分:1)

我遇到了这个确切的问题,但内置了CSV模块。

我通过将IO读取模式用作文本来解决它:' rt',而不是' r':

require 'csv'

CSV.open(file_name, 'rt').each do |row|
  # blah, blah
end