已到达SmarterCSV文件结尾,但ruby的CSV库可以处理该文件

a8jjtwal  于 11个月前  发布在  Ruby
关注(0)|答案(1)|浏览(142)

我有两个基本相同的CSV文件,但是由于某种原因,SmarterCSV无法读取名为bad_fileHere is a Gist of both files的文件。Ruby的原生CSV库可以读取bad_file没有问题。
在处理每个文件之前,我使用以下代码剥离标题行上方的所有内容:

def self.clean(file)
    if (csv = File.read(file).gsub!(/\A.+?(?=^Date,)/m, ''))
      tempfile = Tempfile.new('file_name')
      tempfile.write(csv)
      tempfile
    else
      file
    end
  end

字符串
然后我将该文件传递到更智能的CSV中,如下所示:

File.open(file, encoding: 'bom|utf-8') do |f|
      chunk = SmarterCSV.process(f, {
                                   verbose: true,
                                   remove_empty_hashes: true,
                                   col_sep: :auto,
                                   force_utf8: true,
                                   force_simple_split: true,
                                   strip_chars_from_headers: /[\-"\xEF\xBB\xBF]/,
                                   duplicate_header_suffix: ''
                                 })
    end


我不知道CSV文件有什么不同,更不用说为什么SmarterCSV不能处理坏的文件了。此外,如果有人有更好的方法从电子表格的顶部剥离不需要的信息,这可以解决这个问题。

xoefb8l8

xoefb8l81#

CSV文件中的BOM标记存在问题,请参见:issue 219
自SmarterCSV版本1.8.0以来,此问题已得到修复

相关问题