【发布时间】:2011-12-25 19:30:00
【问题描述】:
我一直在尝试在 ruby-1.9.2 中导入 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>'
它说有未关闭的引用字段,但我可以看到引号打开和关闭。
转义引号没有任何作用。我得到同样的错误(...@""seal"" r...)。
将它们更改为单引号使其工作 (...@'seal' r...)。
问题是我需要将它们放在双引号中。
有什么想法吗?
【问题讨论】:
-
Ruby 的 CSV 库确实看起来设计得很糟糕