21
我一直有一段难以置信的时间,试图在ruby-1.9.2中导入CSV文件。导入CSV引用错误令我疯狂
我试图解析的文件有:塔中
- 逗号列内
- 报价
- 使用一个 '@' 为:col_sep
csv.txt(代表性输入,实际为101k线):
㔾@㔾@jié@"seal" radical in Chinese characters, (Kangxi radical 26)
我的代码:
require 'csv'
CSV.foreach("/Users/adam/Desktop/csvtest.txt", {:col_sep => "@"}) do |row|
puts row.to_s
end
我想要的输出:
["㔾", "㔾", "jié", "\"seal\" radical in Chinese characters, (Kangxi radical 26)"]
我得到的输出:
CSV::MalformedCSVError: Unclosed quoted field on line 1.
from /Users/adam/.rvm/rubies/ruby-1.9.2-p290/lib/ruby/1.9.1/CSV.rb:1910:in `block in shift'
from /Users/adam/.rvm/rubies/ruby-1.9.2-p290/lib/ruby/1.9.1/CSV.rb:1825:in `loop'
from /Users/adam/.rvm/rubies/ruby-1.9.2-p290/lib/ruby/1.9.1/CSV.rb:1825:in `shift'
from /Users/adam/.rvm/rubies/ruby-1.9.2-p290/lib/ruby/1.9.1/CSV.rb:1767:in `each'
from /Users/adam/.rvm/rubies/ruby-1.9.2-p290/lib/ruby/1.9.1/CSV.rb:1202:in `block in foreach'
from /Users/adam/.rvm/rubies/ruby-1.9.2-p290/lib/ruby/1.9.1/CSV.rb:1340:in `open'
from /Users/adam/.rvm/rubies/ruby-1.9.2-p290/lib/ruby/1.9.1/CSV.rb:1201:in `foreach'
from (irb):31
from /Users/adam/.rvm/rubies/ruby-1.9.2-p290/bin/irb:16:in `<main>'
它说有未关闭的报价精密组件,但我可以看到的是,报价打开和关闭。
转义引号没有任何作用。我得到相同的错误([email protected]""seal"" r...
)。 将它们更改为单引号可使其起作用([email protected]'seal' r...
)。 问题是我需要他们在双引号。
任何想法?
+1 CSV规格。被完全滥用和忽略,与HTML类似。对于这两种情况,有时我会在将数据交给解析器之前解决数据问题。我认为这也是解决这个问题的方法,但我喜欢用'quote_char =>“\ x00”'来欺骗解析器。不错的工作。 –
我有一个实际上具有nul字符的'bcp' MSSQL转储来的UTF-16。为了好玩,我选择了雪人角色(☃)作为替补。 :) –
这个''\ x00“'窍门很漂亮:-) – Avishai