2013-09-11 2 views
7

Мне было интересно, имеет ли CsvHelper Josh Close что-либо в конфигурации, которую мне не хватает, чтобы перевести значения в null. Я большой поклонник этой библиотеки, но я всегда думал, что должна быть какая-то конфигурация, чтобы сообщить, какие значения представляют NULL в вашем файле. Примером может служить столбец со значениями «NA», «EMPTY», «NULL» и т. Д. Я уверен, что смогу создать свой собственный TypeConverter, но я надеялся, что будет проще установить где-нибудь в config как это, как правило, довольно распространено с файлами, с которыми я сталкиваюсь.Добавление обнаруживаемых значений Nullable в CsvHelper

Есть ли настройка конфигурации, чтобы сделать это относительно легко?

Я нашел TypeConversion в пространстве имен CsvHelper.TypeConversion, но я не уверен, где применить что-то подобное или пример правильного использования:

new NullableConverter(typeof(string)).ConvertFromString(new TypeConverterOptions(), "NA") 

Я также использую последнюю версию 2.2.2

Спасибо!

+3

В настоящее время вам необходимо создать пользовательский конвертер, например, @JNYRanger, и продлить «NullableConverter». Наличие способности устанавливать конфигурацию других значений, которые оцениваются как «null», кажется удобной функцией, и я удивлен, что это не было раньше. Я добавлю его как новый запрос функции. –

ответ

11

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

Первое, что вам нужно сделать, это построить объект CsvHelper.TypeConverter для ваших типов Nullable. Обратите внимание, что я буду использовать int, так как строки по умолчанию допускают нулевые значения.

public class MyClassMap : CsvClassMap<MyClass> 
{ 
    public override CreateMap() 
    { 
      CsvHelper.TypeConversion.NullableConverter intNullableConverter = new CsvHelper.TypeConversion.NullableConverter(typeof(int?)); 

      Map(m => m.number).Index(2).TypeConverter(intNullableConverter); 
     } 
} 

Следующая устанавливает атрибут вашего объекта CSVReader, чтобы пустые столбцы & автоматически обрезать поля. Лично это нужно сделать, создав объект CsvConfiguration со всеми моими настройками до создания моего объекта CsvReader.

CsvConfiguration csvConfig = new CsvConfiguration(); 
csvConfig.RegisterClassMap<MyClassMap>(); 
csvConfig.WillThrowOnMissingField = false; 
csvConfig.TrimFields = true; 

Тогда вы можете позвонить myReader = new CsvReader(stream, csvConfig) построить CsvReader объект.

ЕСЛИ вы должны иметь определенные значения для нуля, такие как "NA" == null, тогда вам нужно будет свернуть собственный класс CsvHelper.TypeConversion. Я рекомендую вам расширить класс NullableConverter для этого и переопределить как конструктор, так и метод ConvertFromString. Использовать пустые значения как null - это действительно ваш лучший выбор.

 Смежные вопросы

  • Нет связанных вопросов^_^