使用ruby 1.8.7中的FasterCSV在线非法引用

时间:2011-06-21 11:59:37

标签: ruby-on-rails ruby fastercsv

我在解析SQL转储中的内容时遇到“非法引用”错误,转储文件的格式为TXT,带有tab(\ t)分隔符。

  require 'rubygems'
  require 'faster_csv'
  begin
  FasterCSV.foreach(excel_file, :quote_char => '"',:col_sep =>'\t', :row_sep =>:auto, :headers => :first_row) do |row|

  col= row.to_s.split(/\t/)

  if col[3]!="" or !col[3].empty?
    color_value=col[3].to_s.capitalize
    #Inser Color
    color=Color.find_or_create_by_name(:name=>color_value)
  elsif col[3].empty?
    color_id= nil
  end

  end
  rescue Exception => e
  puts e
  end

程序已成功执行并运行,但存在无效数据 下面(@ font-face ...)表示执行因第3行“非法引用”错误而终止。

    ID Name code comments
     1 white 234 good
     2 Black 222 
     3 red   343 @font-face { font-family: "Verdana"; .....}

任何人都可以建议我在列中出现无效数据时如何跳过?

提前致谢。

3 个答案:

答案 0 :(得分:0)

我不确定这是否能解决您所看到的错误,但您需要在转义字符周围使用双引号,例如:

:col_sep => "\t"

答案 1 :(得分:0)

FasterCSV对格式错误的数据不太友好。 我不知道有解决方案。

但是 - 如果您的示例文件实际上不包含任何引用“ 然后可能只是使用不同的quot_char(例如')

答案 2 :(得分:0)

您可以使用ASCII字符的NULL代码 - \0x00 - 这样:

FasterCSV.foreach(excel_file, :quote_char => '\0x00',:col_sep =>'\t', :row_sep =>:auto, :headers => :first_row) do |row|
 ...
end

您可以在此处找到一些ASCII字符的图表:http://www.bluesock.org/~willg/dev/ascii.html