我正在尝试将一个 csv 文件导入到我的数据库中,经过数小时的乐趣后,我已经确定了问题所在:备注字段有时包含引号,如果我替换\"
为,\""
则该字段导入没有问题。
我编写了一个 rake 任务来导入 csv 文件并使用 gsub 替换\"
,\""
但 gsub 没有做任何事情。这是带有完整代码的 rake 任务:
csvproperty.rake
require 'csv'
task :csv_to_properties => [:environment] do
CSV.foreach("lib/assets/wp_realty_listingsdb.csv", :headers => true) do |row|
row[remarks=23].gsub!(/\"/, '\""')
Property.create!(row.to_hash)
end
end
备注字段是第 23 列(从 0 开始计数),但我用 22 和 24 尝试过,但没有运气。我知道这段代码有效,因为我在另一个应用程序上使用了完全相同的 rake 任务,使用 gsub 从价格字段中删除逗号,并且效果很好,为什么不替换\"
为\""
?
编辑:
例如,csv 文件第 8 行对这个属性的注释是:
"THIS HOME EPITOMIZES THE VERY ESSENCE OF A PERFECT \"10\"."
csv试图通过做来逃避引号\"
但这还不够,\""
因为如果我运行这个命令:
rake csv_to_properties
然后我收到以下错误:
rake aborted!
Missing or stray quote in line 8
但是,如果我手动将其更改为,\""
则错误将移至包含引号的下一行:
rake aborted!
Missing or stray quote in line 24
但是,如果我不手动更改它并依靠 gsub 进行更改,错误消息将保留在第 8 行。为什么 gsub 不替换\"
为\""
?