Как игнорировать пробелы при использовании CsvHelper, CsvReader.Read ()?

Есть ли способ игнорировать пустые записи и / или пробелы при использовании библиотеки CsvHelper и, в частности, функции CsvReader.Read()?

Мне нужно вернуть необработанный string[], но я надеялся, что смогу выполнить некоторые функции очистки при синтаксическом анализе с библиотекой.

Я проверил Github, и CsvReader.Read(), похоже, использует SkipEmptyRecords, но у меня это не работает, так как у меня есть пробелы.

Вот мой CSV-файл в кодировке UTF8 без спецификации.

введите описание изображения здесь

Я пробовал кодировку ASCII, на случай, если что-то пропустил, но это тоже не сработало.
Если никто не знает, я поболтаю с Джошем и отправлю git-запрос с исправлением.

Ссылка: http://joshclose.github.io/CsvHelper/


person Ralph Willgoss    schedule 24.11.2014    source источник
comment
Кажется, он использует SkipEmptyRecords - github.com/JoshClose / CsvHelper / blob / master / src / CsvHelper /   -  person Rhumborl    schedule 24.11.2014
comment
Я видел это, но, похоже, для меня это не работает, он проверяет нули, но не пробелы. Вопрос изменен, чтобы отразить.   -  person Ralph Willgoss    schedule 24.11.2014


Ответы (1)


Думаю, лучше всего починить библиотеку самостоятельно.

Проблема в том, что метод Read использует параметр SkipEmptyRecords и метод IsRecordEmpty, чтобы определить, следует ли пропускать поле или нет:

while (this.configuration.SkipEmptyRecords && this.IsRecordEmpty(false));

Однако метод IsRecordEmpty () не полностью реализован для поддержки вашего сценария, потому что он использует следующий код:

Enumerable.All<string>((IEnumerable<string>) this.currentRecord, new Func<string, bool>(string.IsNullOrEmpty));

Это не работает, потому что ваши строки не являются пустыми или пустыми. На мой взгляд, сочетание Trimming с SkipEmptyRecords может теоретически сработать:

 csv.Configuration.TrimFields = true;
 csv.Configuration.SkipEmptyRecords = true;

Но снова обрезка не используется при проверке, пусто ли поле или нет, поэтому я почти уверен, что ваш единственный вариант - исправить библиотеку самостоятельно и использовать обрезку в методе IsRecordEmpty () ИЛИ использовать IsNullOrWhiteSpace вместо IsNullOrEmpty.

person Faris Zacina    schedule 24.11.2014
comment
Круто .. нажмите исправление для всех нас;) - person Faris Zacina; 24.11.2014
comment
Отличное исправление Ральфа. Запрос на вытягивание был объединен и находится в версии 2.9.0 на NuGet. - person Josh Close; 08.12.2014