Vấn đề của bạn không phải là nhiều dòng mà là CSV không đúng định dạng.
Thay thế \"
và dấu cách kết thúc sau một dòng kết thúc như thế này:
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
Điều này mang lại:
"id","name","address","email","potato"
1,"Bob","---
- 101 Cottage row
- Lovely Village
- ____
","[email protected]","omnomnom"
etc
Nếu bạn không có quyền kiểm soát chương trình cung cấp CSV, bạn phải mở tệp, đọc nội dung, thực hiện thay thế và sau đó phân tích cú pháp CSV. Tôi sử dụng __
ở đây nhưng bạn có thể sử dụng các ký tự không xung đột khác.