regex à la ligne de séparation (fichier csv)
Je ne suis pas bon dans la regex. Peut quelqu'un m'aider à écrire des regex pour moi?
J'ai peut-être des valeurs de ce type lors de la lecture de fichier csv.
"De l'artiste,Nom d'Album,12-SCS "val""u,e1",valeur2,valeur3
De sortie:
L'Artiste,Le Nom De Album 12-SCS Val"u,e1 Valeur2 Valeur3
Mise à jour:
J'aime l'idée à l'aide de fournisseur Oledb. Nous disposons d'un fichier de contrôle de téléchargement sur la page web, que j'ai lu le contenu du fichier à l'aide de lecteur de flux sans réelle fichier de sauvegarde sur le système de fichiers. Est il possible que je peux l'utilisateur fournisseur Oledb parce que nous avons besoin de spécifier le nom de fichier dans la chaîne de connexion et dans mon cas, je n'ai pas de fichier enregistré sur le système de fichiers.
cela va être difficile avec une regex, avez-vous considéré l'analyse à l'aide d'une machine à état fini à la place?
regex.info/blog/2006-09-15/247
regex.info/blog/2006-09-15/247
OriginalL'auteur shailesh | 2010-07-16
Vous devez vous connecter pour publier un commentaire.
Tout en ajoutant la solution que j'ai travaillé ce matin.
Comme vous pouvez le voir, vous devez appeler les regex.Matches() par ligne. Il sera ensuite de retour à un MatchCollection avec le même nombre d'éléments que vous avez sous la forme de colonnes. La Valeur de la propriété de chaque match est, de toute évidence, la valeur analysée.
C'est toujours un travail en cours, mais heureusement analyse CSV chaînes de caractères comme:
field1,"""",field2
.OriginalL'auteur Joshua
En fait, c'est assez facile de faire correspondre CVS lignes avec une regex. Essayez celui-ci:
Avertissement: L'expression rationnelle a été testé dans RegexBuddy, (qui a généré cet extrait de code), et il correspond bien à l'OP données de test, mais le code C# de la logique n'est pas testée. (Je n'ai pas accès à C# outils.)
OriginalL'auteur ridgerunner
Regex n'est pas l'outil approprié pour cela. L'utilisation d'un fichier CSV analyseur. Le builtin un ou une 3ème partie.
J'aime l'idée à l'aide de fournisseur Oledb. Nous disposons d'un fichier de contrôle de téléchargement sur la page web, que j'ai lu le contenu du fichier à l'aide de lecteur de flux sans réelle fichier de sauvegarde sur le système de fichiers. Est il possible que je peux l'utilisateur fournisseur Oledb parce que nous avons besoin de spécifier le nom de fichier dans la chaîne de connexion et dans mon cas, je n'ai pas de fichier enregistré sur le système de fichiers.
C'est une nouvelle question. Essayez de demander à un nouveau question avec le bon titre, du contexte et des balises.
L'construite en on vous oblige à convertir les valeurs .Types de réseau. Si il devine une colonne de mal, il va perdre les données. La 3ème partie, il y a beaucoup de bugs.
CsvReader
classe dans la 3ème partie du code est de 2500 lignes de long, et qui a beaucoup de mal écrites fonctions, de sorte que le débogage est une corvée. Amusez-vous!+1 Mais, pourquoi ne pas vous post que spiffy bibliothèque regex sur un système de guichet unique d'accueil (ex github, google code). Je ne peux pas télécharger de la source sans CodeProject compte.
OriginalL'auteur BalusC
Donner la TextFieldParser classe un coup d'oeil. C'est dans le Microsoft.VisualBasic de l'assemblée et ne délimité et fixe la largeur de l'analyse.
OriginalL'auteur Brian Surowiec
Donner CsvHelper un essai (une bibliothèque que je maintiens). Il est disponible via NuGet.
Vous pouvez facilement lire un fichier CSV dans une classe personnalisée de la collection. Il est également très rapide.
OriginalL'auteur Josh Close
Regex peut-être trop complexe ici. Séparer la ligne sur les virgules, puis parcourir la résultante de bits et de les enchaîner où les "le nombre de guillemets dans la chaîne concaténée" n'est pas la même.
"bonjour,",,"""test"""
...split...
"bonjour | ce" | | """test"""
...itérer et de fusion " jusqu'à ce que vous avez un nombre pair de guillemets...
"bonjour,ce" même nombre de citations (note virgule supprimé par split inséré entre bits)
est même nombre de citations
"""test""" - même le nombre de citations
...puis la bande d'attaque et de fuite des devis si présent et remplacer "" par ".
OriginalL'auteur Will A
Il pourrait être fait en utilisant le code ci-dessous:
OriginalL'auteur Nirupam