Csvhelper: Сообщения об ошибках синтаксического анализа

Созданный на 3 июл. 2014  ·  3Комментарии  ·  Источник: JoshClose/CsvHelper

Я видел пул-реквест, который должен решить проблему выяснения сообщений об ошибках , но он все равно не обеспечивает достаточной гибкости.

В настоящее время мне нужно написать что-то вроде этого, чтобы предоставить пользователю более подробную информацию об ошибке:

`` С #
var e = новый список();
csvReader.Configuration.ReadingExceptionCallback = (например, строка) =>
{
foreach (ошибка var в ex.Data.Values)
{
var info = error.ToString (). Split (new [] {"\ n", "\ r \ n"}, StringSplitOptions.RemoveEmptyEntries);
значение переменной = информация [4] .Split (':') [1] .Trim ();
var field = info [3] .Split (':') [1] .Trim ();
e.Add (string.Format ("Не удалось прочитать значение {0} в строке {1}, поле {2}.",
value, row.Row, field));
}
};
// возвращаем e на веб-страницу (например, как 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));
    }
};

Но выше все в порядке ... это работает. Что важнее, так это следующий запрос.
Также было бы неплохо иметь возможность предоставить информацию, ПОЧЕМУ не удалось выполнить синтаксический анализ.
Допустим, поле принимает только значения «Красный» или «Синий», но пользователь вводит значения «Желтый». Мы могли бы решить эту проблему следующим образом:

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));

Этот синтаксис обеспечит большую гибкость для разработчика и даст четкую обратную связь для пользователя.

Дайте мне знать, что вы думаете.

Самый полезный комментарий

Это интересная идея. Я отмечу это как особенность сейчас и более подробно рассмотрю позже.

Все 3 Комментарий

Это интересная идея. Я отмечу это как особенность сейчас и более подробно рассмотрю позже.

просто хотел бы поддержать этот запрос функции.

раз уж я здесь, я просто хотел бы вкратце сказать спасибо. CsvHelper хорош на многих уровнях.

В версии 3.0 базовый объект CsvHelperException теперь имеет свойства для всех значений. Обратный вызов вернет CsvHelperException вместо Exception . Бета 3.0 находится на NuGet.

Была ли эта страница полезной?
0 / 5 - 0 рейтинги