Existe-t-il une manière «correcte» de lire les fichiers CSV

Dupliquer possible:
Importation de fichier CSV en .Net

Dans .net, existe-t-il une bibliothèque standard qui devrait être utilisée pour lire les fichiers csv? Tous les échantillons sur le Web lancent leur propre lecteur / parsingur csv ou utilisent OleDb.

Ce n’est pas un problème en utilisant une de ces solutions, je me demandais simplement s’il y avait une bibliothèque généralement acceptée (pas que je puisse trouver), ou une autre manière “appropriée” de le faire?

CsvReader en est un assez bon … ce n’est pas Microsoft, mais cela fonctionne très bien et est beaucoup plus rapide que certaines alternatives (OleDb héritée, etc.).

L’espace de noms VB a une excellente classe TextFieldParser . Je sais que c # les gens n’aiment pas faire référence à une bibliothèque de ce langage «basique», mais c’est très bien.

Il se trouve à l’adresse Microsoft.VisualBasic.FileIO.TextFieldParser.

J’avais l’habitude de jouer avec OLEDB, de créer des fichiers de définition de colonne, etc., mais le TextFieldParser était un outil très simple et pratique pour l’parsing de tous les fichiers délimités.

L’une des raisons pour lesquelles de nombreuses personnes écrivent leurs propres textes est que le format CSV n’est pas si simple . Par exemple:

  1. La première ligne contient-elle des noms de champs ou pas?
  2. Soutenez-vous les dates? Si oui, sont-ils cités, entourés de #, dans un certain ordre jour-mois-année?
  3. Prend-il en charge les sauts de ligne dans les valeurs de texte citées? Ou est-ce que cela divise le disque?
  4. Comment pouvez-vous échapper à une citation à l’intérieur d’une chaîne citée? Doublez-vous la citation ou utilisez-vous une barre oblique inverse ou un autre caractère d’échappement?
  5. Quel (s) encodage (s) de caractères sont supportés?
  6. Comment gère-t-il les caractères de contrôle échappés? & # XX; ou \ uxxxx ou une autre méthode?

Ce sont quelquesunes des raisons pour lesquelles les gens écrivent leurs propres parsingurs, car ils sont bloqués en train de lire des fichiers créés avec tous ces parameters différents . Ou bien ils écrivent leurs propres sérialiseurs, car le système cible possède un tas de ces idiosyncrasies .

Si vous ne vous souciez pas de ces problèmes, utilisez simplement la bibliothèque la plus pratique. Mais comprenez qu’ils sont là.

Essayez CsvHelper (une bibliothèque que je maintiens). Il est également disponible via NuGet .

CsvHelper vous permet de lire votre fichier CSV directement dans votre classe personnalisée.

var streamReader = // Create a reader to your CSV file. var csvReader = new CsvReader( streamReader ); List myData = csvReader.GetRecords(); 

CsvReader déterminera automatiquement comment faire correspondre les noms de propriété en fonction de la ligne d’en-tête (cette option est configurable). Il utilise des arbres d’expression compilés au lieu de la reflection, donc c’est très rapide.

Il est également très extensible et configurable.

Après quelques recherches, il y a aussi ceci: http://www.filehelpers.com/

Cela semble être un cadre complet pour la lecture de fichiers, et pas seulement pour les fichiers csv.

(note: il suffit de lire des choses sur le site, je ne les ai pas encore utilisées)

KBCsv est une autre option, en particulier si vous avez besoin d’efficacité et de la capacité de travailler avec des fichiers CSV volumineux.

Divulgation: J’ai écrit KBCsv, d’où le “KB”;)

Je suis sûr que vous pouvez lire un fichier CSV dans un DataTable avec une ligne de code. Une fois dans un DataTable, vous pouvez sortinger, filtrer, itérer, etc.

Cette question contient des exemples de lecture de fichiers CSV dans DataTables.