7

CsvHelper ライブラリ、特にCsvReader.Read()関数を使用する場合、空白のレコードや空白を無視する方法はありますか?

生を返す必要がありstring[]ますが、ライブラリで解析するときにいくつかのクリーンアップ機能を実行できることを望んでいました。

Github を確認したところ、 SkipEmptyRecordsCsvReader.Read()を使用しているようですが、空白があるため、これは機能しません。

これが私のcsvファイルで、BOMなしでUTF8でエンコードされています。

ここに画像の説明を入力

何かを見逃した場合に備えて、ASCIIエンコーディングを試しましたが、それもうまくいきませんでした。
誰も知らない場合は、Josh とチャットして、修正を含む git リクエストを送信します。

参考: http: //joshclose.github.io/CsvHelper/

4

1 に答える 1

5

あなたの最善の策は、ライブラリを自分で修正することだと思います。

問題は、ReadメソッドがSkipEmptyRecords設定とメソッドを使用してIsRecordEmpty、フィールドをスキップするかどうかを決定することです。

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

ただし、IsRecordEmpty() メソッドは、次のコードを使用するため、シナリオをサポートするために完全に実装されているわけではありません。

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

文字列が null または空ではないため、これは機能しません。私の意見では、 Trimming と SkipEmptyRecords を組み合わせると、理論的にはうまくいく可能性があります。

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

ただし、フィールドが空かどうかを確認するときにトリミングは使用されないため、ライブラリを自分で修正し、IsRecordEmpty() メソッドでトリミングを使用するか、 IsNullOrEmptyの代わりに IsNullOrWhiteSpace を使用することが唯一のオプションであると確信しています。

于 2014-11-24T12:45:10.883 に答える