आपकी समस्या मल्टीलाइन नहीं बल्कि विकृत सीएसवी है।
\" को बदलें और एक पंक्ति के इस तरह समाप्त होने के बाद स्थान समाप्त करें:
require 'csv'
ml = %q{"id","name","address","email","potato"
1,"Bob","---
- 101 Cottage row
- Lovely Village
- \"\"
","example@sqldat.com","omnomnom"
2,"Charlie","---
- 102 Flame Street
- \"\"
- \"\"
","example@sqldat.com","andcheese"
4,"Doug","---
- 103 Dark Cave
- Next to some geo dude
- So many bats
","example@sqldat.com","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
- ____
","example@sqldat.com","omnomnom"
etc
यदि आपके पास सीएसवी वितरित करने वाले प्रोग्राम पर कोई नियंत्रण नहीं है, तो आपको फ़ाइल खोलनी होगी, सामग्री पढ़नी होगी, एक प्रतिस्थापन करना होगा और फिर सीएसवी को पार्स करना होगा। मैं __ . का उपयोग करता हूं यहां लेकिन आप अन्य गैर-विरोधी पात्रों का उपयोग कर सकते हैं।