我在解析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"; .....}
任何人都可以建议我在列中出现无效数据时如何跳过?
提前致谢。
答案 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