J'essaie de lire un *.csv
fichier.
Le *.csv
fichier -f se compose de deux colonnes séparées par un point-virgule (" ; ").
Je suis capable de lire le *.csv
fichier en utilisant StreamReader et de séparer chaque ligne en utilisant la Split()
fonction. Je souhaite stocker chaque colonne dans un tableau séparé, puis l'afficher.
Est-il possible de faire ça?
";"
comme séparateur ... cela a fait du CSV un imo non standard :(Réponses:
Vous pouvez le faire comme ceci:
la source
using
clause ici, ou à tout le moins manuellementClose()
lereader
comme il est uneIDisposible
ressource.column1;"Special ; char in string";column3
- tools.ietf.org/html/rfc4180Mon analyseur CSV préféré est intégré à la bibliothèque .NET. Il s'agit d'un trésor caché dans l'espace de noms Microsoft.VisualBasic. Voici un exemple de code:
N'oubliez pas d'ajouter une référence à
Microsoft.VisualBasic
Plus de détails sur l'analyseur sont fournis ici: http://codeskaters.blogspot.ae/2015/11/c-easiest-csv-parser-built-in-net.html
la source
Microsoft.VisualBasic
assembly du framework car il n'est généralement pas référencé par défaut.Façon LINQ:
^^ Wrong - Edit by Nick
Il semble que le répondeur d'origine tentait de remplir
csv
avec un tableau à 2 dimensions - un tableau contenant des tableaux. Chaque élément du premier tableau contient un tableau représentant ce numéro de ligne, chaque élément du tableau imbriqué contenant les données de cette colonne spécifique.la source
Vous ne pouvez pas créer un tableau immédiatement car vous devez connaître le nombre de lignes depuis le début (et cela nécessiterait de lire le fichier csv deux fois)
Vous pouvez stocker des valeurs dans deux
List<T>
, puis les utiliser ou les convertir en tableau à l'aideList<T>.ToArray()
Exemple très simple:
NB
Veuillez noter que ce n'est qu'un exemple très simple . L'utilisation
string.Split
ne tient pas compte des cas où certains enregistrements contiennent le séparateur à l';
intérieur.Pour une approche plus sûre, pensez à utiliser certaines bibliothèques spécifiques csv comme CsvHelper sur nuget.
la source
;
faire partie de la valeur, par exemple"value with ; inside it"
. Valeurs surround CSV contenant des caractères spéciaux avec des guillemets pour indiquer qu'il s'agit d'une chaîne littérale.Je viens de découvrir cette bibliothèque: https://github.com/JoshClose/CsvHelper
Très intuitif et facile à utiliser. Possède également un paquet nuget qui est rapide à mettre en œuvre: http://nuget.org/packages/CsvHelper/1.17.0 . Semble également être activement maintenu que j'aime.
Le configurer pour utiliser un point-virgule est facile: https://github.com/JoshClose/CsvHelper/wiki/Custom-Configurations
la source
Microsoft.VisualBasic.FileIO.TextFieldParser
(cf. réponse de @ Habeeb)?J'utilise généralement cet analyseur de codeproject , car il y a un tas d'échappements de caractères et similaires qu'il gère pour moi.
la source
Voici ma variation de la réponse la plus votée:
La
csv
variable peut ensuite être utilisée comme dans l'exemple suivant:la source
Si vous devez sauter des lignes et / ou des colonnes (en-tête), vous pouvez l'utiliser pour créer un tableau à deux dimensions:
Ceci est très utile si vous devez façonner les données avant de les traiter davantage (en supposant que les 2 premières lignes sont constituées du titre et que la première colonne est un titre de ligne - que vous n'avez pas besoin d'avoir dans le tableau car vous venez de vouloir considérer les données).
NB Vous pouvez facilement obtenir les titres et la 1ère colonne en utilisant le code suivant:
Cet exemple de code suppose la structure suivante de votre
*.csv
fichier:Remarque: Si vous devez ignorer des lignes vides - ce qui peut parfois être utile, vous pouvez le faire en insérant
entre le
from
et l'select
instruction dans les exemples de code LINQ ci-dessus.la source
Vous pouvez utiliser la DLL Microsoft.VisualBasic.FileIO.TextFieldParser en C # pour de meilleures performances
obtenir ci-dessous l'exemple de code de l'article ci-dessus
la source
Salut à tous, j'ai créé une classe statique pour ce faire. + vérification de colonne + suppression de signe de quota
la source
la source
Voici un cas spécial où l'un des champs de données a un point-virgule (";") dans le cadre de ses données dans ce cas, la plupart des réponses ci-dessus échouent.
Solution ce cas sera
la source
La bibliothèque open source Angara.Table permet de charger CSV dans des colonnes typées, afin que vous puissiez obtenir les tableaux à partir des colonnes. Chaque colonne peut être indexée à la fois par nom ou par index. Voir http://predictionmachines.github.io/Angara.Table/saveload.html .
La bibliothèque suit RFC4180 pour CSV; il permet l'inférence de type et les chaînes multilignes.
Exemple:
Vous pouvez voir un type de colonne en utilisant le type Colonne, par exemple
Étant donné que la bibliothèque se concentre sur F #, vous devrez peut-être ajouter une référence à l'assembly FSharp.Core 4.4; cliquez sur 'Ajouter une référence' sur le projet et choisissez FSharp.Core 4.4 sous "Assemblys" -> "Extensions".
la source
J'ai passé quelques heures à chercher une bonne bibliothèque, mais finalement j'ai écrit mon propre code :) Vous pouvez lire le fichier (ou la base de données) avec les outils que vous voulez, puis appliquer la routine suivante à chaque ligne:
la source
J'utilise csvreader.com (composant payant) depuis des années et je n'ai jamais eu de problème. Il est solide, petit et rapide, mais vous devez le payer. Vous pouvez définir le délimiteur à votre guise.
la source
Je suis juste un étudiant qui travaille sur ma thèse de maîtrise, mais c'est ainsi que je l'ai résolu et cela a bien fonctionné pour moi. Vous sélectionnez d'abord votre fichier dans le répertoire (uniquement au format csv), puis vous mettez les données dans les listes.
la source
Toujours incorrecte. Vous devez compenser "" entre guillemets. Voici ma solution CSV style Microsoft.
la source
J'ai une bibliothèque qui fait exactement ce dont vous avez besoin.
Il y a quelque temps, j'avais écrit une bibliothèque assez simple et rapide pour travailler avec des fichiers CSV. Vous pouvez le trouver par le lien suivant: https://github.com/ukushu/DataExporter
Il fonctionne avec CSV comme avec un tableau à 2 dimensions. Exactement comme vous en avez besoin.
Par exemple, si vous avez besoin de toutes les valeurs de la 3ème ligne, il vous suffit d'écrire:
ou pour lire la 2e cellule de
la source
regarde ça
en utilisant CsvFramework;
using System.Collections.Generic;
espace de noms CvsParser {
}
la source