【问题标题】:Illegal quoting on line using FasterCSV in ruby 1.8.7在 ruby​​ 1.8.7 中使用 FasterCSV 进行非法在线引用
【发布时间】:2011-09-19 11:20:35
【问题描述】:

我在解析 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"; .....}

当列中出现无效数据时,谁能建议我如何跳过?

提前致谢。

【问题讨论】:

    标签: ruby-on-rails ruby fastercsv


    【解决方案1】:

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

    :col_sep => "\t"
    

    【讨论】:

    • 等待谢谢!我仍然面临同样的问题“非法引用第 3 行”。请问,如何跳过包含相同无效数据的行?
    【解决方案2】:

    FasterCSV 对格式错误的数据不太友好。 不知道有没有办法解决这个问题。

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

    【讨论】:

    • 谢谢!我试过用单引号(')。但我的问题是如何处理包含一些无效数据的数据表,我有 CSS 代码。我可以知道如何跳过这个并继续执行程序。
    【解决方案3】:

    您可以将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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-04-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多