2010-11-24 18 views
1

J'utilise le lecteur Lumenworks CSV et je dois dire que je ne suis pas très content de la façon dont cela fonctionne jusqu'à présent.lecteur csv fin et rapide

I m parsing des milliers de fichiers csv dans une heure et il y a toujours un problème, déclenche une exception se plaindre de mauvais dossiers ou biaiser les colonnes etc.

Pouvez-vous recommander un lecteur CSV bien, il ne marche pas avoir être libre, mais sans bug.

Merci.

+0

Êtes-vous certain que les fichiers d'entrée sont vraiment CSV? Avez-vous la possibilité d'importer les fichiers dans une base de données, puis d'utiliser les données? Par exemple, l'importation en bloc MS SQL peut facilement gérer différents types de fichiers CSV et l'importation de fichiers extrêmement volumineux prend quelques secondes. À partir de ce moment, vous travaillez simplement pour des données dans une table de base de données. –

+0

Je dois analyser les fichiers et les traiter. Je ne peux pas faire en vrac insérer à DB. alors que le parsin, lumenworks craps beaucoup pour chose everylittle. – DarthVader

+0

Je suis d'accord ... lumen jette toujours des exceptions ... tout ce dont nous avons besoin est simple lecteur qui lit des lignes délimitées, pas de merde fantaisie ... seulement lire lignes fous, D – Tommix

Répondre

0

Vous devez vérifier les fichiers d'entrée. Je pense que ces outils ne s'arrêtent pas à la vérification de format car ils visent des choses de quantité (passer des données erronées pour traiter le maximum de fichiers). Dans le monde réel, vous voyez rarement un flux de CSV propre. Les conducteurs ont tendance à donner leur propre genre:

-NO cite

côlon -Semi au lieu de la virgule

Les fichiers qui génèrent des erreurs proviennent généralement de la même source.

+0

ok quel type de fichier recommandez-vous? – DarthVader

+0

Comme Frank V a suggéré que vous deviez isoler les mauvais fichiers. Est-ce que votre CSV vient de MS Access, une exportation de base de données ou faite sur mesure? Les types de fichiers corrects doivent suivre CSV comme spécifié dans la norme –

3

FileHelpers Open Source Library http://www.filehelpers.net/

+0

cela n'a pas aidé. erreur d'analyse. – DarthVader

+0

@ user177883, Pouvez-vous poster l'erreur qu'il renvoie dans votre question d'origine? –

+0

vous pouvez passer une option pour ignorer les erreurs. ce qui le fait fonctionner. mais c'est très très lent. – DarthVader

0

Cela fait longtemps que je l'ai utilisé, mais FileHelpers n'analyse syntaxique CSV avec beaucoup d'options.

+0

n'a pas aidé, craps out aussi. – DarthVader

+1

définir craps sur ...un type d'erreur spécifique, y at-il quelque chose d'inhabituel avec le fichier CSV qui explose? – Zachary

+0

craps out = accidents! lol jk. même si filehelpers est recommandé par beaucoup de gens, j'ai aussi entendu des commentaires négatifs, donc pas surpris ... – Timmerz

1

Vous indiquez que vous recevez des exceptions et autres à partir des fichiers. Alors que ceux-ci peuvent être indésirables, avez-vous enquêté sur la cause?

Vous pouvez simplement utiliser l'un des analyseurs courants qui sont sur la table et lorsqu'une exception se produit, essayez une alternative et/ou gérez les scénarios avec du code personnalisé. Je sais que ce n'est pas exactement ce que vous cherchez, mais le problème n'est peut-être pas les outils que vous utilisez, mais l'entrée que les outils reçoivent ...

Vous pouvez également déplacer le fichier incriminé dans un répertoire séparé (dans le code) de regarder un peu plus tard et d'obtenir ce qui va traiter, traité.

3

Essayez CsvHelper (une bibliothèque que je gère). Il est également disponible sur NuGet.

1

Il existe un analyseur CSV intégré à .NET.

De http://coding.abel.nu/2012/06/built-in-net-csv-parser/:

// TextFieldParser is in the Microsoft.VisualBasic.FileIO namespace. 
using (TextFieldParser parser = new TextFieldParser(path)) 
{ 
    parser.CommentTokens = new string[] { "#" }; 
    parser.SetDelimiters(new string[] { ";" }); 
    parser.HasFieldsEnclosedInQuotes = true; 

    // Skip over header line. 
    parser.ReadLine(); 

    while (!parser.EndOfData) 
    { 
     string[] fields = parser.ReadFields(); 
     yield return new Brand() 
     { 
      Name = fields[0], 
      FactoryLocation = fields[1], 
      EstablishedYear = int.Parse(fields[2]), 
      Profit = double.Parse(fields[3], swedishCulture) 
     }; 
    } 
} 
+0

L'analyseur VB.Net est cependant beaucoup plus lent que l'analyseur Lumenworks. Dans nos tests, l'analyseur Lumenworks était ~ 20 - 60 plus rapide. –