代码之家  ›  专栏  ›  技术社区  ›  grifaton

Ruby:无法解析在OS X中导出为CSV的Excel文件

  •  11
  • grifaton  · 技术社区  · 16 年前

    CSV.open(filename, 'r') CSV::IllegalFormatError .

    我怀疑问题可能与行尾有关。我能够解析通过文本编辑器(Aquamacs)手动输入的数据。正是当我尝试从Excel(适用于OS X)导出数据时,才出现问题。当我在vim中打开导出的CSV时,所有文本都显示在一行上 ^M

    从文档来看,您似乎可以提供 open 带有行分隔符;然而,我不确定在这种情况下应该是什么。

    6 回复  |  直到 16 年前
        1
  •  35
  •   Community Mohan Dere    9 年前

    尝试: CSV.open('filename', 'r', ?,, ?\r)

    cantlin 注意,对于Ruby 2,它是:

    CSV.new('file.csv', 'r', :col_sep => ?,, :row_sep => ?\r)
    

    我很确定这些会为你带来DTRT。您还可以“修复”文件本身(在这种情况下,保留旧文件 open vim :%s/\r/\r/g

        2
  •  5
  •   Brian Armstrong    15 年前

    CSV.parse(File.read('filename').gsub(/\r/, '')) do |row|
      ...
    end
    
        3
  •  4
  •   Alex Kahn    16 年前

        4
  •  0
  •   John Machin Santi    16 年前

    """ 当我在vim中打开导出的CSV时,所有文本都显示在一行上,行之间显示^M。

    从文档来看,您似乎可以为open提供行分隔符;然而,我不确定在这种情况下应该是什么。 """

    读回一个句子。..^M表示键盘Ctrl-M,又名“\x0D”(M是ASCII字母表的第13个字母;0x0D==13),又名ASCII CR(回车),又名“\r”。..看看Mac在OS X之前用作行终止符的东西。

        5
  •  0
  •   chesterbr    12 年前

    CSV解析器的新版本和/或它使用的任何组件似乎都能毫无问题地读取DOS/Windows行尾。Mac OS X的原始版本(不确定版本)没有删除它,安装了Ruby 2.0.0,它很好地解析了文件,没有特殊参数。..

        6
  •  0
  •   wawka    12 年前

    "error_message"=>"Illegal quoting in line 1.", "error_class"=>"CSV::MalformedCSVError"
    

    问题是该文件有Windows行尾,当然不是Unix。帮助我的是定义row_sep:“\r\n”:

    CSV.open(path, 'w', headers: :first_row, col_sep: ';', quote_char: '"', row_sep: "\r\n")