我使用的是ruby 1.8.7,rails 2.3.8。我想解析由tab分隔的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行的非法引用”。任何人都可以建议我如何跳过包含无效数据的行并继续进行剩余行的数据加载过程?
答案 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