【问题标题】:How do you ignore Whitespace when using CsvHelper, CsvReader.Read()?使用 CsvHelper、CsvReader.Read() 时如何忽略空格?
【发布时间】:2014-11-24 11:44:05
【问题描述】:

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

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

我检查了 Github,CsvReader.Read() 似乎使用 SkipEmptyRecords 但这对我不起作用,因为我有空格。

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

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

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

【问题讨论】:

标签: c# .net csvhelper


【解决方案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));

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

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

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

【讨论】:

  • 酷.. 为我们所有人推送修复;)
  • 出色的修复拉尔夫。拉取请求已合并,在 NuGet 上发布为 2.9.0 版。
猜你喜欢
  • 2022-01-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-12-31
  • 2023-03-17
相关资源
最近更新 更多