Donné
2,1016,7 / 31/2008 14: 22, Geoff Dalgas, 6/5/2011 22:21, http://stackoverflow.com , "Corvallis, OR", 7679,351,81, b437f461b3fd27387c5d8ab47a293d35,34
Comment utiliser C # pour diviser les informations ci-dessus en chaînes comme suit:
2
1016
7/31/2008 14:22
Geoff Dalgas
6/5/2011 22:21
http://stackoverflow.com
Corvallis, OR
7679
351
81
b437f461b3fd27387c5d8ab47a293d35
34
Comme vous pouvez le voir, l'une des colonnes contient, <= (Corvallis, OR)
// mise à jour // Basé sur C # Regex Split - virgules hors guillemets
string[] result = Regex.Split(samplestring, ",(?=(?:[^\"]*\"[^\"]*\")*[^\"]*$)");
Réponses:
Utilisez la
Microsoft.VisualBasic.FileIO.TextFieldParser
classe. Cela gérera l'analyse d'un fichier délimité,TextReader
ouStream
lorsque certains champs sont entre guillemets et certains ne le sont pas.Par exemple:
Cela devrait aboutir à la sortie suivante:
Consultez Microsoft.VisualBasic.FileIO.TextFieldParser pour plus d'informations.
Vous devez ajouter une référence à
Microsoft.VisualBasic
dans l'onglet Ajouter des références .NET.la source
Il est tellement tard mais cela peut être utile pour quelqu'un. Nous pouvons utiliser RegEx comme ci-dessous.
la source
,
\" df ",Vous pouvez diviser toutes les virgules qui ont un nombre pair de guillemets qui les suivent.
Vous souhaitez également afficher au
specf
format CSV pour la gestion des virgules.Lien utile:
C# Regex Split - commas outside quotes
la source
Je vois que si vous collez du texte délimité csv dans Excel et faites un "Text to Columns", il vous demande un "text qualifier". Il est défini par défaut sur un guillemet double afin qu'il traite le texte entre guillemets comme littéral. J'imagine qu'Excel implémente cela en allant un caractère à la fois, s'il rencontre un "qualificatif de texte", il continue d'aller au "qualificatif" suivant. Vous pouvez probablement l'implémenter vous-même avec une boucle for et un booléen pour indiquer si vous êtes à l'intérieur d'un texte littéral.
la source
Utilisez une bibliothèque comme LumenWorks pour faire votre lecture CSV. Il traitera les champs avec des guillemets et sera probablement dans l'ensemble plus robuste que votre solution personnalisée en raison de son existence depuis longtemps.
la source
Il est difficile d'analyser les fichiers .csv lorsque le fichier .csv peut être soit des chaînes séparées par des virgules, soit des chaînes entre guillemets ou une combinaison chaotique des deux. La solution que j'ai trouvée permet l'une des trois possibilités.
J'ai créé une méthode, ParseCsvRow () qui renvoie un tableau à partir d'une chaîne csv. Je traite d'abord les guillemets doubles dans la chaîne en divisant la chaîne sur des guillemets doubles dans un tableau appelé quotesArray. Les fichiers .csv de chaîne entre guillemets ne sont valides que s'il existe un nombre pair de guillemets doubles. Les guillemets doubles dans une valeur de colonne doivent être remplacés par une paire de guillemets doubles (c'est l'approche d'Excel). Tant que le fichier .csv répond à ces exigences, vous pouvez vous attendre à ce que les virgules du délimiteur apparaissent uniquement en dehors des paires de guillemets doubles. Les virgules à l'intérieur des paires de guillemets doubles font partie de la valeur de la colonne et doivent être ignorées lors de la division du .csv en un tableau.
Ma méthode testera les virgules en dehors des paires de guillemets doubles en regardant uniquement les index pairs de quotesArray. Il supprime également les guillemets doubles du début et de la fin des valeurs de colonne.
Un inconvénient de mon approche est la façon dont je remplace temporairement les virgules de délimitation par un caractère unicode obscur. Ce caractère doit être si obscur qu'il n'apparaîtra jamais dans votre fichier .csv. Vous voudrez peut-être mettre plus de manipulation autour de cela.
la source
J'ai eu un problème avec un CSV contenant des champs avec un caractère de citation, donc en utilisant TextFieldParser, j'ai trouvé ce qui suit:
Un StreamReader est toujours utilisé pour lire le CSV ligne par ligne, comme suit:
la source
Avec Cinchoo ETL - une bibliothèque open source, il peut gérer automatiquement les valeurs des colonnes contenant des séparateurs.
Production:
Pour plus d'informations, veuillez consulter l'article codeproject.
J'espère que ça aide.
la source