sql >> Databasteknik >  >> RDS >> Mysql

Ruby CSV-läs flerradsfält

Ditt problem är inte den flerradiga utan felaktiga CSV-filen.

Ersätt \" och slutsteg efter ett radslut så här:

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

Detta ger:

"id","name","address","email","potato"
1,"Bob","---  
- 101 Cottage row 
- Lovely Village 
- ____
","[email protected]","omnomnom"
etc

Om du inte har kontroll över programmet som levererar CSV-filen måste du öppna filen, läsa innehållet, göra en ersättning och sedan analysera CSV-filen. Jag använder __ här men du kan använda andra icke-motstridiga tecken.




  1. Hur lagrar man europeisk valuta i MySQL?

  2. Sätt att åtgärda SQL Server upptäckte ett logiskt konsistensbaserat I/O-fel

  3. Oracle - Hur får jag den faktiska storleken på en specifik RAD?

  4. Är det möjligt att använda en variabel och inte ange en returtyp i postgreSQL?