2014-11-24 5 views
5

Podczas korzystania z biblioteki CsvHelper, a w szczególności z funkcji CsvReader.Read(), czy istnieje sposób na zignorowanie pustych rekordów i/lub białych znaków?Jak ignorować Whitespace podczas korzystania z CsvHelper, CsvReader.Read()?

Potrzebuję zwrócić surowy string[], ale miałem nadzieję, że mógłbym wykonać pewne funkcje czyszczenia podczas analizy biblioteki.

Sprawdziłem Github i CsvReader.Read() wydaje się używać SkipEmptyRecords, ale to nie działa dla mnie, ponieważ mam białe spacje.

Oto mój plik csv, zakodowany w UTF8 bez LM.

enter image description here

Próbowałem kodowania ASCII, na wypadek gdyby coś mi umknęło, ale to nie działa.
Jeśli nikt nie wie, porozmawiam z Joshem i prześlę prośbę git z poprawką.

referencyjny: http://joshclose.github.io/CsvHelper/

+1

Wydaje się używać SkipEmptyRecords - https://github.com/JoshClose/CsvHelper/blob/master/src/CsvHelper/CsvReader.cs#L177 – Rhumborl

+0

Widziałem, ale to nie wydaje się działać dla mnie , sprawdza wartości null, ale nie białe znaki. Pytanie zmodyfikowane, aby odzwierciedlić. –

Odpowiedz

4

Myślę, że najlepiej jest ustalić biblioteki siebie.

Problemem jest to, że metoda Read używa ustawień SkipEmptyRecords oraz metodę IsRecordEmpty celu ustalenia, czy należy go pominąć pole czy nie:

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

Jednak metoda IsRecordEmpty() nie jest idealnie wdrożony w celu wspierania Scenariusz, ponieważ używa następującego kodu:

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

To nie działa, ponieważ twoje ciągi znaków nie są puste lub puste. Moim zdaniem łączenie Przycinanie z SkipEmptyRecords mógł pracować w teorii:

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

Ale znowu przycinanie nie jest wykorzystywana podczas sprawdzania, jeśli pole jest puste lub nie, więc jestem całkiem pewny, że jedynym rozwiązaniem jest, aby naprawić samodzielnie bibliotekę i użyj przycinania w metodzie IsRecordEmpty() LUB użyj IsNullOrWhiteSpace zamiast IsNullOrEmpty.

+0

Fajnie .. pchnij poprawkę dla nas wszystkich;) –

+1

Będziemy mate :-) –

+1

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