2013-04-30 2 views
0

Я пытаюсь импортировать файл csv в свою базу данных и после нескольких часов удовольствия я определил, в чем проблема: поле примечаний иногда имеет в нем кавычки, и если я заменю \" на \"" то поле не импортируется без проблем.gsub! не делаю ничего в rails rake task

Я написал задачу рейка, чтобы импортировать файл csv и использовать gsub для замены \" с помощью \"", но gsub ничего не делает. Вот реки задача с полным кодом:

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, чтобы удалить запятую из поля цены, и она отлично работала, почему он не заменяет \"\""?

EDIT:

Например, замечания этого свойства на 8-ой строке файла CSV являются:

"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 \" '? –

+0

см. Редактирование. Проблема заключается не столько в ускорении кавычек, сколько в том, что я решил, что это должно быть », но проблема в том, почему не работает gsub, как сказано? – railsy

+0

Я не уверен, почему это не спасает. Попробуйте 'gsub! ('' ',' '')'. –

ответ

0

Try:

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