我使用一个 iPhone 应用程序,它会定期通过电子邮件向我发送 CSV 格式的日志。我有一个 ruby 脚本,可以将该日志中的数据与旧日志相加。最近,应用程序开发人员发布了一个更新,由于某种未知原因,在每行末尾添加了一个回车,导致我的脚本失败。根据文档,:row_end
默认情况下应该是:auto
,它应该接受\r\n
或\n
(在 1.9.2 中)。我尝试使用 Ruby 1.8.7、1.9.2 和 FasterCSV 和 1.8.7。我通过这些不同的尝试收到各种错误消息,包括
CSV::IllegalFormatError
- 未加引号的字段不允许
\r
或\n
(第 1 行)(FasterCSV::MalformedCSVError
) - 不能复制
NilClass
(TypeError)
在 1.9.2 中。(\r
不在字段中,它是行尾!)数据以前看起来像这样:
03-12-2012 07:59,120.0,
03-11-2012 08:27,120.0,
03-10-2012 07:57,120.0,
现在看起来像这样:
03-12-2012 07:59,120.0,^M
03-11-2012 08:27,120.0,^M
03-10-2012 07:57,120.0,^M
考虑到 CSV 可能认为^M
是在最后一个字段中,我尝试添加另一个逗号:
03-12-2012 07:59,120.0,,^M
无济于事。
我唯一能想象的是 CSV 要求所有字段都用双引号引起来?我可以想到各种解决方法,例如先读取文件,然后用 CSV 处理数组,但首先我想找出我做错了什么。似乎它应该工作。
顺便说一句,我的代码很简单:
CSV.foreach(File.join($import_dir, file)) do |record|
我试过设置:row_end => "\r\n"
无济于事。
我在 Mac OS X 10.6.8 上。