2010-03-09 5 views
1

Je sais qu'il existe plusieurs bibliothèques de code qui peuvent analyser les fichiers CSV selon la norme, mais pour diverses raisons, j'ai besoin d'une simple routine (pas une bibliothèque entière) qui analyse un fichier CSV dans un DataTable ou un tableau. Un tel animal existe-t-il ou est-il éteint? (De préférence C# mais je peux aussi traduire vb.net)CSV Analyseur dans une routine/fonction?

+1

Je suis curieux de savoir ce que vous entendez par «la norme». Au meilleur de ma connaissance, il n'y a pas de norme pour CSV. C'est exactement pourquoi vous devriez éviter d'essayer de coder votre propre analyseur - vous ne voulez pas être celui qui traite le CSV mal ordonné de tout le monde, laissez quelqu'un d'autre le faire. Quelles «raisons diverses» justifient d'assumer vous-même ce fardeau? – Aaronaught

+0

[Top 6 façons d'analyser un .CSV? Haute performance!] (Http://izlooite.blogspot.com/2011/06/top-6-ways-to-parse-csv-high.html) –

Répondre

2

Écrivez votre propre méthode qui boucle sur chaque ligne et utilisez la méthode fractionnée en utilisant la virgule comme délimiteur.

Si vous voulez analyser un fichier CSV en utilisant LINQ, voici un exemple simple:

http://www.fryan0911.com/2009/05/read-data-from-csv-using-linq.html

+0

Mais voir http://www.secretgeek.net/csv_trouble. asp d'abord! –

+0

... puis utilisez le support CSV intégré au framework .NET et supporté par Microsoft. http://stackoverflow.com/questions/2405787/csv-parser-in-one-routine-function/2405898#2405898 – MarkJ

5

Référence Microsoft.VisualBasic.FileIO et vous pouvez utiliser TextFieldParser

using (var parser = 
    new TextFieldParser(@"c:\data.csv") 
     { 
      TextFieldType = FieldType.Delimited, 
      Delimiters = new string[] { "," } 
     }) 
{ 
    while (!parser.EndOfData) 
    { 
     string[] fields; 
     fields = parser.ReadFields(); 
     //go go go! 
    } 
} 
0

La rédaction de votre propre analyseur CSV n'est pas facile. Il y a beaucoup de cas limites que vous rencontrerez.

Lire: http://www.secretgeek.net/csv_trouble.asp

@ réponse de Spender est probablement le plus proche que vous obtiendrez en utilisant des trucs intégré.

Donner CsvHelper un essai (une bibliothèque que je maintiens). C'est disponible sur NuGet. C'est très léger. Si vous voulez juste un petit morceau de code, vous pouvez simplement copier la source CsvParser.cs et la modifier un peu. Il y a essentiellement une fonction qui fait tout l'analyse, c'est juste plus de 100 lignes, y compris les commentaires. Si vous voulez une routine unique, ce serait une bonne chose à saisir.

Si vous utilisez la bibliothèque CsvHelper, la lecture dans une collection d'objets de classe personnalisée est facile.

var streamReader = // Create StreamReader to your CSV file. 
var csvReader = new CsvReader(streamReader); 
var myObjects = csvReader.GetRecords<MyObject>();