CSV は「コンバーター」をサポートします。これは通常、フィールドのコンテンツをコードに戻す前にメッセージを送信するために使用できます。たとえば、行内のすべてのフィールドで余分なスペースを削除するために使用できます。
残念ながら、行がフィールドに分割された後にコンバーターが起動し、CSV が埋め込まれた引用符について怒っているのはそのステップの間です。 " ステップ。
これは私のサンプル CSV ファイルです。
ID,Name,Country
173,"Yukihiro \"The Ruby Guy\" Matsumoto","Japan"
メソッドを保持しますCSV.foreach
。これは、CSV を怒らせることなく解析するための私のコード例です。
require 'csv'
require 'pp'
header = []
File.foreach('test.csv') do |csv_line|
row = CSV.parse(csv_line.gsub('\"', '""')).first
if header.empty?
header = row.map(&:to_sym)
next
end
row = Hash[header.zip(row)]
pp row
puts row[:Name]
end
結果のハッシュと名前の値は次のとおりです。
{:ID=>"173", :Name=>"Yukihiro \"The Ruby Guy\" Matsumoto", :Country=>"Japan"}
Yukihiro "The Ruby Guy" Matsumoto
:headers
フラグを指定したため、ハッシュバックが必要だと思いました:
CSV.foreach('my.csv', headers: true, header_converters: :symbol) do |row|