【问题标题】:How to skip empty records CSVFormat parser如何跳过空记录 CSVFormat 解析器
【发布时间】:2019-09-03 16:36:36
【问题描述】:

在这组代码中,我需要在给定 URL 的情况下解析 csv 文件。问题是有时,文件会在文件末尾附加空行(我目前无法控制正在解析的文件)。这里的解决方案是在解析文件时忽略没有提供所有值的行

这是一些示例数据:

HEADER1,HEADER2,HEADER13,HEADER4,HEADER5,HEADER6
1,tt,9/2/2019,12000,4116,2307306
2,tt1,9/2/2019,12000,4147,1137039
,,,,,,
,,,,,,

我尝试了以下解决方案,但没有成功

Iterable<CSVRecord> csvRecords = CSVFormat.EXCEL.withFirstRecordAsHeader().withIgnoreEmptyLines(true).parse(new FileReader(url));

在这种情况下,预期的结果是获取标题之后的前两行并忽略最后两行

【问题讨论】:

  • 您可以尝试使用 CSVFormat.DEFAULT 代替 CSVFormat.EXCEL 并尝试吗?
  • 我猜“空行”实际上是指空行,即“\r\n\r\n\r\n”序列,而不是你所拥有的。

标签: java spring-boot csv


【解决方案1】:

您可以尝试以下代码并检查它是否有效。

Iterable<CSVRecord> csvRecords = CSVFormat.EXCEL.withFirstRecordAsHeader().withIgnoreEmptyLines(true).withTrim().parse(new FileReader(url));

我添加了一个方法.withTrim()

如果还是不行,你可以检查每个 CSVRecord 是否为 null 或不在 for 循环内。

【讨论】:

  • 我曾想过在循环中检查它,但它效率低下。特别是对于大型数据集。想象一下,遍历 100k 条记录只得到 100 条记录。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-07-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多