如何使用制表符分隔符解析TXT文件中的数据?

时间:2011-07-01 04:35:25

标签: ruby-on-rails ruby csv fastercsv

我使用的是ruby 1.8.7,rails 2.3.8。我想解析由tab分隔的TXT转储文件中的数据。

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

enter image description here

使用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行的非法引用”。任何人都可以建议我如何跳过包含无效数据的行并继续进行剩余行的数据加载过程?

3 个答案:

答案 0 :(得分: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

答案 1 :(得分:1)

只需将文件作为常规文件阅读(不是使用FasterCSV),按照\t知道的方式将其拆分,它应该可以正常工作

答案 2 :(得分:1)

所以问题是TSV文件没有引号字符。规范只是指定您不允许在数据中添加选项卡。

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

CSV.parse(txt_file, :quote_char => '☎', :col_sep => "\t" do |row|
   puts row[15] 
end