Mysql
 sql >> Base de données >  >> RDS >> Mysql

Ruby CSV lit des champs multilignes

Votre problème n'est pas le CSV multiligne mais malformé.

Remplacez le \" et un espace de fin après une fin de ligne comme ceci :

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

Cela donne :

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

Si vous n'avez aucun contrôle sur le programme qui fournit le CSV, vous devez ouvrir le fichier, lire le contenu, effectuer un remplacement, puis analyser le CSV. J'utilise __ ici, mais vous pouvez utiliser d'autres caractères non conflictuels.