GSUB!在rails rake任务中没有做任何事情

时间:2013-04-30 03:39:21

标签: ruby-on-rails activerecord

我正在尝试将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 替换为\"

1 个答案:

答案 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\"".