2013-04-30 42 views
0

我想導入一個csv文件到我的數據庫,並在幾小時的樂趣後,我已經指出了什麼問題是:備註字段有時引號中,如果我用\""替換\"那麼該字段被導入沒有問題。gsub!沒有做任何事情rails耙任務

我寫過一個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試過沒有運氣。我知道這段代碼的工作原理,因爲我在另一個應用中使用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不是用\""代替\"

+0

我不知道,如果你逃避' 「'或它實際上是'\」'。文本究竟是什麼樣子? 'sometext「或'sometext \」'? – 2013-04-30 04:08:33

+0

見編輯。這個問題不是關於逃避引號,因爲我已經制定了它,它需要是「」,但問題是爲什麼不是gsub按照它的說法行事? – railsy 2013-04-30 05:19:19

+0

我不知道爲什麼它沒有保存。試試'gsub!('''',''「)'。 – 2013-04-30 05:40:52

回答

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