0

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

4

1 回答 1

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\"".
于 2013-04-30T05:49:59.070 回答