Ruby なら、これで、改行・ダブルクォーテーション(b・c の間)も含められる。
ファイルから読み込んで、1行ずつ処理するには、CSV.foreach がある

require 'csv'

str = <<"EOT"
id,first name
1,"ab""c"
2,"xy\nz"
EOT

options = { :headers => true }

CSV.parse( str, options ).each do | row |
p [ row[ 'id' ], row[ 'first name' ] ]
end

出力
["1", "ab\"c"]
["2", "xy\nz"]