使用CsvHelper,CsvReader.Read()时如何忽略空格?

Ral*_*oss 7 .net c# csvhelper

当使用CsvHelper库,特别是CsvReader.Read()函数时,有没有办法忽略空白记录和/或空格?

我需要返回原始string[]但希望,我可以在使用库进行解析时执行一些清理功能.

我已经检查了Github并且CsvReader.Read()似乎使用了SkipEmptyRecords但是这对我来说不起作用,因为我有空白.

这是我的csv文件,它以UTF8编码,没有BOM.

在此输入图像描述

我已经尝试过ASCII编码,以防万一我错过了一些东西但是也没用.
如果没有人知道我会和Josh聊天并提交一个修复的git请求.

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

Far*_*ina 5

我认为你最好的办法是自己修复图书馆。

问题是该Read方法使用SkipEmptyRecords设置和IsRecordEmpty方法来确定是否应该跳过字段:

while (this.configuration.SkipEmptyRecords && this.IsRecordEmpty(false));
Run Code Online (Sandbox Code Playgroud)

然而, IsRecordEmpty() 方法并未完美实现以支持您的场景,因为它使用以下代码:

Enumerable.All<string>((IEnumerable<string>) this.currentRecord, new Func<string, bool>(string.IsNullOrEmpty));
Run Code Online (Sandbox Code Playgroud)

这不起作用,因为您的字符串不为 null 或为空。在我看来,将 Trimming 与 SkipEmptyRecords 结合在理论上是可行的:

 csv.Configuration.TrimFields = true;
 csv.Configuration.SkipEmptyRecords = true;
Run Code Online (Sandbox Code Playgroud)

但是在检查该字段是否为空时再次不使用修剪,所以我很确定您唯一的选择是自己修复库并使用 IsRecordEmpty() 方法中的修剪或使用IsNullOrWhiteSpace而不是 IsNullOrEmpty。

  • 酷..为我们所有人推动修复;) (2认同)
  • 优秀的修复拉尔夫。拉取请求已合并,并在 NuGet 上发布 2.9.0 版。 (2认同)