Вашият проблем не е многоредовият, а неправилно оформен CSV.
Заменете \"
и край на интервал след ред, завършващ по следния начин:
require 'csv'
ml = %q{"id","name","address","email","potato"
1,"Bob","---
- 101 Cottage row
- Lovely Village
- \"\"
","[email protected]","omnomnom"
2,"Charlie","---
- 102 Flame Street
- \"\"
- \"\"
","[email protected]","andcheese"
4,"Doug","---
- 103 Dark Cave
- Next to some geo dude
- So many bats
","[email protected]","usemeltattack"}
ml.gsub!(/\" \n/,"\"\n").gsub!(/\\\"/,"__")
CSV.parse(ml, {:headers=>true}) do |row|
puts row
end
Това дава:
"id","name","address","email","potato"
1,"Bob","---
- 101 Cottage row
- Lovely Village
- ____
","[email protected]","omnomnom"
etc
Ако нямате контрол върху програмата, която доставя CSV, трябва да отворите файла, да прочетете съдържанието, да извършите замяна и след това да анализирате CSV. Използвам __
тук, но можете да използвате други неконфликтни знаци.