0

解析 SQL 转储中的内容并且转储文件的格式为带有制表符 (\t) 分隔符的 TXT 格式时,我面临“非法引用”错误。

  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"; .....}

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

提前致谢。

4

3 回答 3

0

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

但是 - 如果您的示例文件实际上不包含任何使用 " 的引用,那么也许只需使用不同的 quot_char (例如 ')

于 2011-06-21T14:39:46.700 回答
0

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

:col_sep => "\t"
于 2011-06-21T13:49:16.603 回答
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

于 2013-08-13T15:23:48.763 回答