123 votes

Existe-t-il des bibliothèques de lecture/écriture de fichiers CSV en C# ?

Y a-t-il des CSV bibliothèques de lecteurs/écrivains en C# ?

76 votes

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, bien qu'anecdotique, de mon affirmation est que cette question a été consultée plus de 22 000 fois au cours des six dernières années.

6 votes

True said - premier résultat sur google

0 votes

Il y a une belle comparaison de vitesse : joelverhagen.com/blog/2020/12/fastest-net-csv-parsers

115voto

Josh Close Points 4901

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

Lecture :

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 votes

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 vraiment suffisant.

1 votes

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

0 votes

Oui. Vous pouvez utiliser WriteField . Consultez les documents ici joshclose.github.io/CsvHelper

22voto

Reed Copsey Points 315315

Il existe plusieurs options, directement dans le cadre lui-même.

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

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

6 votes

Je me suis toujours demandé pourquoi il était dans l'assemblage Microsoft.VisualBasic... MS pensait-il que les développeurs C# n'utilisaient pas CSV ?

4 votes

Thomas : d'autant plus que de nombreux développeurs C# craignent l'idée d'inclure un assemblage VisualBasic dans leurs projets.

2 votes

Oui, il y a beaucoup de bonnes choses là-dedans. Je pense que c'est plutôt parce que VB a des constructions de langage qui n'ont pas vraiment été prises en compte dans le framework à l'origine, mais ils n'auraient jamais été capables de faire passer les utilisateurs de VB6 sans les implémenter. Les espaces de noms Devices et ApplicationServices contiennent toutes sortes de choses utiles.

17voto

Sébastien Lorion a une grande CSV lecteur sur CodeProject appelé Un lecteur CSV rapide . Probablement l'un des meilleurs pour C# et il est gratuit.

Pour ce qui est de l'écriture, il suffit d'utiliser StreamWriter .

Voici un code standard pour écrire un DataGridView dans 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();
            }
        };
    }
}

7voto

Murph Points 7600

Oui - mais je suppose que vous demandez des précisions ?

Essayez FileHelpers

0 votes

Je l'ai fait, mais pour une raison étrange, FileHelpers s'est arrêté de façon aléatoire. De plus, la bibliothèque FileHelpers n'est plus en développement depuis longtemps.

1 votes

Les FileHelpers sont activement développés à l'heure actuelle. GitHub .

3voto

Alex Points 1124

Il y en a des dizaines.

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

Je dois dire que je trouve les Filehelpers restrictifs dans certains scénarios, et que j'utilise plutôt Le lecteur CSV rapide . D'après mon expérience, si vous ne connaissez pas le format de votre fichier CSV ou le mappage de l'importation avant l'exécution, c'est la meilleure bibliothèque à utiliser.

0 votes

Nous utilisons également des aides de fichiers.

1 votes

J'ai trouvé que les FileHelpers étaient une nuisance à configurer. FastCsvReader est beaucoup plus facile à utiliser.

0 votes

+1 pour FastCsvReader. Excellentes performances. Mais c'est principalement un lecteur/parseur. Pas un écrivain.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X