我知道有很多类似的问题,但我还没有找到解决方案。我正在尝试将 CSV 解析库与 Ruby 1.9.1 一起使用,但我不断得到:
/usr/lib/ruby/1.9.1/csv.rb:1925:in `block (2 levels) in shift': Illegal quoting in line 1. (CSV::MalformedCSVError)
我的 CSV 文件是在 Windows 7 中创建的,但我使用的是 Ubuntu 12.04 来运行 Ruby 脚本,如下所示:
require 'csv'
CSV.foreach('out.csv', :col_sep => ';') do |row|
puts row
end
没什么复杂的,只是一个测试,所以我认为它一定是 Windows 控制字符引起了问题。Vim 显示如下:
"第 1 部分";;;;^M
;;;;^M
;;;;^M
未能提交所得税申报表;;;;^M
姓名;地址;职业;“收费”;"罚款/罚款 £"^M
一些名字;"一些,地址";簿记员;3;1,250.00^M
一些名字;"一些,地址";Haulier;1;600.00^M
一些名字;"一些,地址";脚手架租用;1;250.00^M
一些名字;"some,address";Farmer;2;500.00^M
一些名字;"some,address";Builder;2;3000.00
我已经尝试删除 Windows 添加的回车 (^M) 的那些控制字符,但 %s/^V^M//g
没有%s/^M//g
找到任何模式。如果我运行%s/\r//g
,则删除 ^M 字符,但是当我运行 Ruby 脚本时,同样的错误仍然存在。我也试过跑步set ffs=unix,dos
,但没有效果。谢谢。
更新:
如果我删除第一行周围的双引号Part 1
,那么脚本会打印出它应该打印的内容,然后抛出一个新错误:Unquoted fields do not allow \r or \n (line 10)
. 如果我然后删除\r
字符,脚本运行良好。
我知道我必须删除这些\r
字符,但为什么只有在我取消引用第一个值时它才会起作用?