1

我正在使用 ruby​​ 1.8.7,rails 2.3.8。我想解析由制表符分隔的 TXT 转储文件中的数据。

在这个 TXT 转储中包含一些 CSS 属性,看起来有一些无效数据。

在此处输入图像描述

使用 FasterCSV gem 运行我的代码时

  FasterCSV.foreach(txt_file, :quote_char => '"',:col_sep =>'\t', :row_sep =>:auto, :headers => :first_row) do |row|
  col= row.to_s.split(/\t/)
  puts col[15]
  end

控制台中写为“第 38 行非法引用”的错误。谁能建议我如何跳过具有无效数据的行并继续剩余行的数据加载过程?

4

3 回答 3

3

这是一种方法。我们进入较低级别,shift用于解析每一行,然后静默MalformedCSVError异常,继续下一次迭代。这个问题是循环看起来不太好。如果有人可以改进这一点,欢迎您编辑代码。

FasterCSV.open(filename, :quote_char => '"', :col_sep => "\t", :headers => true) do |csv|
  row = true
  while row
    begin
      row = csv.shift
      break unless row

      # Do things with the row here...
    rescue FasterCSV::MalformedCSVError
      next
    end
  end
end
于 2011-07-01T06:35:41.740 回答
1

只需像普通文件一样读取文件(不是使用 FasterCSV),像你知道的那样拆分它\t,它应该可以工作

于 2011-07-01T04:40:34.930 回答
1

所以问题是 TSV 文件没有引号字符。该规范只是指定您不允许在数据中使用制表符。

CSV 库并不真正支持此用例。我通过指定一个我知道不会出现在我的数据中的引号字符来解决它。例如

CSV.parse(txt_file, :quote_char => '☎', :col_sep => "\t" do |row|
   puts row[15] 
end
于 2012-03-12T04:00:47.607 回答