0

csvファイルをデータベースにインポートしようとしていますが、何時間も楽しんだ後、問題が何であるかを特定しました.remarksフィールドには引用符が含まれていることがあり、置き換える\"\""フィールドは問題なくインポートされます.

csv ファイルをインポートし、gsub を使用して置き換える rake タスクを作成しました\"\""、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 を使用して価格フィールドからカンマを削除するために別のアプリでまったく同じ rake タスクを使用したため、このコードが機能することはわかってい\"ます\""

編集:

たとえば、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 に答える