2014-11-24 2 views
5

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

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

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

Вот мой файл csv, его закодированный в UTF8 без спецификации.

enter image description here

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

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

+1

Это похоже на использование SkipEmptyRecords - https://github.com/JoshClose/CsvHelper/blob/master/src/CsvHelper/CsvReader.cs#L177 – Rhumborl

+0

Я видел это, но, похоже, он не работает для меня , он проверяет нули, но не пробелы. Вопрос изменен, чтобы отразить. –

ответ

4

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

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

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

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

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

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

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

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

+0

Прохладный .. нажмите исправить для всех нас;) –

+1

Будет делать мат :-) –

+1

https://github.com/JoshClose/CsvHelper/pull/324 –

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