我正在尝试将csv文件导入到我的数据库中,经过几个小时的乐趣,我确定了问题所在:备注字段有时会在其中引用,如果我将\"
替换为{{1然后导入的字段没问题。
我编写了一个rake任务来导入csv文件并使用gsub将\""
替换为\"
,但gsub没有做任何事情。这是完整代码的rake任务:
csvproperty.rake
\""
备注字段是第23列(从0开始计数),但我已经尝试了22和24而没有运气。我知道这段代码有效,因为我在另一个使用gsub的应用程序上使用完全相同的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
替换\"
? / p>
编辑:
例如,csv文件第8行的此属性的备注是:
\""
csv尝试通过执行"THIS HOME EPITOMIZES THE VERY ESSENCE OF A PERFECT \"10\"."
来逃避引号但是这还不够,它需要\"
,因为如果我运行此命令:
\""
然后我收到以下错误:
rake csv_to_properties
但如果我手动将其更改为rake aborted!
Missing or stray quote in line 8
,则错误会转到下一行的引号:
\""
但是,如果我不手动更改并依赖gsub进行更改,则错误消息仍保留在第8行。为什么gsub不会将rake aborted!
Missing or stray quote in line 24
替换为\"
?
答案 0 :(得分:0)
尝试:
> s = "THIS HOME EPITOMIZES THE VERY ESSENCE OF A PERFECT \"10\"."
> puts s
=> THIS HOME EPITOMIZES THE VERY ESSENCE OF A PERFECT "10".
> s.gsub!(/(\")/, '\""')
=> "THIS HOME EPITOMIZES THE VERY ESSENCE OF A PERFECT \\\"\"10\\\"\"."
> puts s
=> THIS HOME EPITOMIZES THE VERY ESSENCE OF A PERFECT \""10\"".