Csvhelper: Messages d'erreur d'analyse

Créé le 3 juil. 2014  ·  3Commentaires  ·  Source: JoshClose/CsvHelper

J'ai vu une pull request qui devrait résoudre le problème de la clarification des messages d'erreur , mais elle ne fournirait toujours pas suffisamment de flexibilité.

Actuellement, je dois écrire quelque chose comme ceci afin de fournir à l'utilisateur un meilleur niveau de détails sur l'erreur :

``` c#
var e = nouvelle liste();
csvReader.Configuration.ReadingExceptionCallback = (ex, ligne) =>
{
foreach (erreur var dans ex.Data.Values)
{
var info = error.ToString().Split(new[] { "\n", "\r\n" }, StringSplitOptions.RemoveEmptyEntries);
valeur var = info[4].Split(':')[1].Trim();
var field = info[3].Split(':')[1].Trim();
e.Add(string.Format("Impossible de lire la valeur {0} dans la ligne {1}, champ {2}.",
valeur, ligne.Ligne, champ));
}
} ;
// renvoie e à la page Web (par exemple en tant que JSON)

This is relatively ok. It gives information where exactly parsing error has occured. However, as you can see, digging this information is ugly since I have to parse string to get the value and the field name. It would be nice if this information could be exposed via properties so that I could write something like this:

``` c#
csvReader.Configuration.ReadingExceptionCallback = (ex, row) =>
{
    foreach (var error in row.Errors)
    {
        e.Add(string.Format("Could not read value {0} in row {1}, field {2}.",
            error.Value, error.Row, error.FieldName));
    }
};

Mais au-dessus, c'est ok... ça marche. Ce qui est plus important est la demande suivante.
Ce serait également bien de pouvoir fournir des informations POURQUOI l'analyse a échoué.
Disons qu'un champ n'accepte que les valeurs "Rouge" ou "Bleu", mais que l'utilisateur tape "Jaune". Nous pourrions résoudre ce problème en :

c# // in the MyClassMap : CsvClassMap<MyClass> class Map(x => x.Color).ErrorMessage("Accepted values are 'Red' and 'Blue'"); ... // in the ReadingExceptionCallback e.Add(string.Format("Could not read value {0} in row {1}, field {2}. {3}", error.Value, error.Row, error.FieldName, error.Message));

Cette syntaxe offrirait beaucoup de flexibilité au développeur et donnerait un retour clair à l'utilisateur.

Laisse moi savoir ce que tu penses.

feature

Commentaire le plus utile

C'est une idée intéressante. Je vais marquer cela comme une fonctionnalité pour le moment et y regarder de plus près plus tard.

Tous les 3 commentaires

C'est une idée intéressante. Je vais marquer cela comme une fonctionnalité pour le moment et y regarder de plus près plus tard.

voudrais juste appuyer cette demande de fonctionnalité.

puisque je suis ici, je voudrais juste dire brièvement merci. CsvHelper est génial à plusieurs niveaux.

Dans 3.0, l'objet CsvHelperException a maintenant des propriétés pour toute la valeur. Le rappel renverra un CsvHelperException au lieu de Exception . 3.0 bêta est sur NuGet.

Cette page vous a été utile?
0 / 5 - 0 notes