Existe-t-il des lecteurs / bibliothèques d'écrivains CSV en C #? [fermé]


111

Existe-t-il des lecteurs / bibliothèques d'écrivains CSV en C #?


68
Je ne suis pas d'accord. C'est définitivement une question constructive et le premier résultat sur google pour .net csv library. La preuve, quoique anecdotique, pour mon affirmation est que cette question a été vue plus de 22 000 fois au cours des six dernières années.
shovavnik

5
true said - premier hit sur google
Robetto

Réponses:


107

Essayez CsvHelper . Il est aussi facile à utiliser que FastCsvReader et écrit également. J'ai été très satisfait de FastCsvReader dans le passé, mais j'avais besoin de quelque chose qui écrit aussi, et je n'étais pas satisfait de FileHelpers.

En train de lire:

var csv = new CsvReader( stream );
var myCustomTypeList = csv.GetRecords<MyCustomType>();

L'écriture:

var csv = new CsvWriter( stream );
csv.WriteRecords( myCustomTypeList );

Divulgation complète: Je suis l'auteur de cette bibliothèque.


3
Merci Josh. J'ai essayé, et c'était à la fois rapide et efficace en termes de mémoire. Je pense que la documentation pourrait être un peu améliorée pour les nouveaux utilisateurs, mais c'était certainement suffisant.
Sam

Existe-t-il un moyen d'utiliser cette bibliothèque sans type personnalisé afin que je puisse simplement parcourir ma grille de table (personnalisée) et écrire un en-tête, puis passer chaque champ de ligne? Je cherche juste un moyen d'éviter les erreurs dans les fichiers (échapper correctement, etc.).
u84six

Oui. Vous pouvez utiliser WriteField. Consultez la documentation ici joshclose.github.io/CsvHelper
Josh Fermer

1
@Zimano Pas vrai. Vous pouvez lire des champs individuels ou même simplement obtenir un tableau de chaînes pour la ligne. Consultez la documentation. joshclose.github.io/CsvHelper
Josh Fermer

@JoshClose Oh, c'est bon à entendre, merci! J'ai seulement consulté le guide de démarrage ici: joshclose.github.io/CsvHelper/ ... et il n'incluait pas mon cas d'utilisation. J'aurais dû chercher plus loin, mes excuses. Cependant, sur cette page, il est indiqué que l'utilisation d'un mappage quelconque est la manière recommandée d'utiliser CsvHelper. Peut-être pourrait-il offrir des stratégies de lecture alternatives à cet endroit? Au fait, j'ai supprimé ma remarque originale, car elle n'est plus pertinente :-)
Zimano

21

Il y a quelques options, directement dans le cadre lui-même.

L'une des plus simples consiste à référencer Microsoft.VisualBasic, puis à utiliser TextFieldParser . Il s'agit d'un lecteur CSV entièrement fonctionnel dans le cadre de base.

Une autre bonne alternative consiste à utiliser des ensembles de données pour lire les fichiers CSV .


6
Je me suis toujours demandé pourquoi c'était dans l'assembly Microsoft.VisualBasic ... Est-ce que MS pensait que les développeurs C # n'utilisaient pas CSV?
Thomas Levesque

4
@Thomas: d'autant plus que beaucoup de développeurs C # grincent des dents à l'idée d'inclure un assembly VisualBasic dans leurs projets

2
Ouais - il y a beaucoup de bons "goodies" là-dedans. Je pense que c'est plus parce que VB a des constructions de langage qui n'étaient pas vraiment prises en compte dans le cadre à l'origine, mais ils n'auraient jamais été en mesure de faire passer les utilisateurs de VB6 sans les implémenter. Les espaces de noms Devices et ApplicationServices ont toutes sortes de choses utiles.
Reed Copsey

20
@ Roboto, tout développeur C # qui grince des dents en faisant référence à Microsoft.VisualBasic dans leur projet est un snob du langage ignorant. Pire encore, ils ne comprennent pas du tout .NET.
Ash

3
Un autre joyau de l'assemblage VB est CopyDirectory: stackoverflow.com/questions/58744/…

17

Sébastien Lorion a un excellent CSVlecteur sur CodeProject appelé A Fast CSV Reader . Probablement l'un des meilleurs pour C # et c'est gratuit.

En ce qui concerne l'écriture, utilisez simplement StreamWriter.

Voici un code standard pour écrire un DataGridViewdans un fichier:

private void exportDGVToCSV(string filename)
{
    if (dataGridView1.Columns.Count != 0) 
    {    
        using (Stream stream = File.OpenWrite(filename))
        {
            stream.SetLength(0);
            using (StreamWriter writer = new StreamWriter(stream))
            {
                // loop through each row of our DataGridView
                foreach (DataGridViewRow row in dataGridView1.Rows) 
                {
                    string line = string.Join(",", row.Cells.Select(x => $"{x}"));
                    writer.WriteLine(line);
                }

                writer.Flush();
            }
        };
    }
}

2
C'est mon préféré. Super petite bibliothèque.
Alex

2
L'écriture CSV est facile - utilisez simplement une méthode de sortie de texte normale et séparez-les par des virgules. Vous n'avez vraiment besoin que d'une bibliothèque / d'un gestionnaire personnalisé pour lire ...
Reed Copsey

10
@Reed: ce n'est pas trop trivial si vous voulez que les virgules et les guillemets soient correctement échappés. Je ne sais même pas s'il existe une normalisation pour cela, mais c'est très courant de le faire.
Stefan Steinegger

26
L'écriture CSV est un peu plus complexe que cela. Si les données que vous souhaitez exprimer dans le fichier CSV contiennent des virgules ou de nouvelles lignes, vous devez entourer les données de guillemets. S'il y a un guillemet dans les données nouvellement marquées, vous devez alors échapper le guillemet avec des guillemets doubles. Vous pouvez certainement coder cette logique vous-même, mais ce serait bien qu'une bibliothèque le fasse à votre place.
Tinister

4
La standardisation est la RFC 4180. tools.ietf.org/html/rfc4180
Josh Fermer le

7

Oui - même si je suppose que vous demandez des détails?

Essayez FileHelpers


Eh bien, je l'ai fait, mais pour une raison étrange, FileHelpers est tombé en panne au hasard. De plus, la bibliothèque FileHelpers n'est pas en développement depuis longtemps.
Erik Schierboom le

1
Les FileHelpers sont actuellement développés activement, voir le GitHub .
xmedeko

3

Il y en a des dizaines.

http://www.filehelpers.net/ est l'un des plus courants.

Je dois dire que je trouve Filehelpers restrictif dans certains scénarios et que j'utilise à la place The Fast CSV Reader . D'après mon expérience, si vous ne connaissez pas le format de votre fichier CSV ou importez le mappage jusqu'à l'exécution, c'est la meilleure bibliothèque à utiliser.


Nous utilisons également des aides de fichiers.
Tangurena

1
J'ai trouvé que FileHelpers était une nuisance à configurer. FastCsvReader était beaucoup plus facile à utiliser.
Josh Close le

+1 pour FastCsvReader. Performance excellente. Mais c'est principalement un lecteur / analyseur. Pas un écrivain.
Mehdi LAMRANI
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.