Diviser les colonnes CSV contenant des virgules incorporées en C#
Les fichiers CSV utilisent généralement des virgules pour séparer les colonnes. Cependant, certaines colonnes peuvent elles-mêmes contenir des virgules, ce qui peut créer des difficultés lors du fractionnement des données CSV en différentes chaînes.
Question :
Étant donné une ligne CSV :
<code>2,1016,7/31/2008 14:22,Geoff Dalgas,6/5/2011 22:21,http://stackoverflow.com,"Corvallis, OR",7679,351,81,b437f461b3fd27387c5d8ab47a293d35,34</code>
Comment puis-je diviser cette ligne en un tableau de chaînes, en garantissant que le texte « Corvallis, OR » reste dans un seul champ ?
Solution :
L'expression régulière fournie ne fonctionne que sur les données CSV où toutes les virgules sont à l'extérieur ou à l'intérieur de guillemets. Pour résoudre ce problème, pensez à utiliser les classes Microsoft.VisualBasic.FileIO
dans l'espace de noms TextFieldParser
. Cette classe est conçue pour gérer des fichiers délimités où certains champs sont entourés de guillemets et d'autres non.
Code :
<code class="language-csharp">using Microsoft.VisualBasic.FileIO; // ... string csv = "2,1016,7/31/2008 14:22,Geoff Dalgas,6/5/2011 22:21,http://stackoverflow.com,\"Corvallis, OR\",7679,351,81,b437f461b3fd27387c5d8ab47a293d35,34"; using (TextFieldParser parser = new TextFieldParser(new StringReader(csv))) { parser.HasFieldsEnclosedInQuotes = true; parser.SetDelimiters(","); while (!parser.EndOfData) { string[] fields = parser.ReadFields(); foreach (string field in fields) { Console.WriteLine(field); } } }</code>
Sortie :
<code>2 1016 7/31/2008 14:22 Geoff Dalgas 6/5/2011 22:21 http://stackoverflow.com Corvallis, OR 7679 351 81 b437f461b3fd27387c5d8ab47a293d35 34</code>
Remarque :
Lors de l'utilisation de TextFieldParser
, vous devez ajouter une référence à Microsoft.VisualBasic
dans l'onglet "Ajouter une référence.NET". Le code utilise également l'instruction using
pour garantir que le TextFieldParser
est correctement fermé.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!