Analyseur / lecteur CSV pour C #? [fermé]

89

existe-t-il une bonne implémentation gratuite de l'analyseur CSV disponible sous une licence libérale? Un équivalent de SuperCSV pour Java, peut-être un port?

Bartosz Radaczyński
la source
5
using Microsoft.VisualBasic.FileIO.TextFieldParser;
1
Pas constructif? Les administrateurs sont tellement fous. C'est une question TRÈS utile.
richard

Réponses:

70

Bibliothèque Open Source FileHelpers .

Keltex
la source
24
FileHelpers (pour CSV au moins) exige que vous "définissiez une classe qui correspond à l'enregistrement dans la source (fichier)", "vous devez déclarer une classe de mappage d'enregistrements", etc. et ce n'est pas si chaud. Je voudrais convertir CSV en DataTable, sans savoir à l'avance combien de colonnes attendre.
Konrad Morawski
53

Il y a une belle implémentation sur CodeProject :

Pour donner plus de chiffres terre-à-terre, avec un fichier CSV de 45 Mo contenant 145 champs et 50 000 enregistrements, le lecteur traitait environ 30 Mo / s. Donc dans l'ensemble, cela a pris 1,5 seconde! Les spécifications de la machine étaient P4 3,0 GHz, 1024 Mo.

Anton Gogolev
la source
(reprenant mon +1): Je viens de casser le lecteur lumenworks Fast CSV sur un fichier de 53 Mo. Il semble que la mise en cache des lignes ait échoué après 43 000 lignes et brouillé le tampon. J'ai essayé Microsoft.VisualBasic.FileIO.TextFieldParseet ça a fait l'affaire.
Fini le codage
11

Vous pouvez charger un fichier CSV dans DataTable.

Exemple de code -

static DataTable CsvToDataTable(string strFileName)
{
    DataTable dataTable = new DataTable("DataTable Name");

    using (OleDbConnection conn = new OleDbConnection("Provider=Microsoft.Jet.OleDb.4.0; Data Source = " + Directory.GetCurrentDirectory() + "; Extended Properties = \"Text;HDR=YES;FMT=Delimited\""))
    {
        conn.Open();
        string strQuery = "SELECT * FROM [" + strFileName + "]";
        OleDbDataAdapter adapter = 
            new System.Data.OleDb.OleDbDataAdapter(strQuery, conn);
        adapter.Fill(dataTable);
    }
    return dataTable;
}

Assurez-vous de compiler votre projet sur un processeur x86. Cela ne fonctionne pas pour x64.

Maxime
la source
1
cela a plutôt bien fonctionné pour moi car je voulais rester avec les bibliothèques ODBC ou OLEDB intégrées. Btw, ce qui suit contient des exemples de code supplémentaires pour OLEDB et ODBC: csvreader.com/csv_benchmarks.php
Meringros
5
Cela ne fonctionne pas sur 64 bits, hélas.
DenNukem
7

essayez filehelpers Fonctionne incroyablement bien. Je l'utilise pour analyser un fichier de 100 Mo chaque jour.

personne
la source
4

Avez-vous essayé la bibliothèque FileHelpers? C'est gratuit, open source et peut être utilisé pour analyser les fichiers CSV.

JaredPar
la source
3

J'ai commencé à utiliser CSV Parser qui fait partie de CommonLibrary.NET .

Il utilise .NET 3.5, dispose d'une API simple et de surcharges / méthodes et lamda pratiques pour les itérations.

Je n'ai pas de benchmarks pour celui-ci comme ci-dessus, mais une bonne chose à ce sujet est qu'il ne s'agit que d'un composant d'une bibliothèque similaire à Java Commons. Je reçois donc également un analyseur de ligne de commande, une implémentation de référentiel entre autres.

zhao
la source