【问题标题】:How to read csv since header inclusively in apache commons csv?如何在 apache commons csv 中从头文件中读取 csv?
【发布时间】:2018-04-22 11:41:05
【问题描述】:

以下方法允许使用跳过标题进行阅读:

Iterable<CSVRecord> records = CSVFormat.EXCEL.withHeader().parse(in);

for (CSVRecord record : records) {
     //here first record is not header
}

如何读取包含标题行的 csv?

附言

方法:

CSVFormat.EXCEL.withHeader().withSkipHeaderRecord(false).parse(in)

不起作用并且具有相同的行为

【问题讨论】:

  • @Berger,我稍微更正了代码。是的 - 现在是实际代码
  • public final class CSVParser 实现 Iterable, Closeable {
  • 这不是一件容易的事,如果您查看CSVParser 从其构造函数调用的initializeHeader 方法,您会看到nextRecord() 被调用并跳过第一个你的情况下的行(format.getHeader() 是一个大小为 0 的数组)。看。 commons.apache.org/proper/commons-csv/apidocs/src-html/org/… 。为什么会有这个要求?
  • @Berger 我做了解决方法并在循环之前调用了 records.getHeaderMap().keySet() 以获取标题。在处理之前我需要做一些额外的检查。
  • 好吧,这似乎是最好的解决方案。

标签: java csv parsing header apache-commons-csv


【解决方案1】:

对我来说,以下所有似乎都将标题记录作为第一个(使用commons-csv 1.5):

Iterable<CSVRecord> records = CSVFormat.EXCEL.parse(in);
Iterable<CSVRecord> records = CSVFormat.EXCEL.withSkipHeaderRecord().parse(in); //???
Iterable<CSVRecord> records = CSVFormat.EXCEL.withSkipHeaderRecord(false).parse(in); 
Iterable<CSVRecord> records = CSVFormat.EXCEL.withSkipHeaderRecord(true).parse(in); //???

正如你所说,以下似乎没有标题记录作为第一个:

Iterable<CSVRecord> records = CSVFormat.EXCEL.withHeader().parse(in); //???

我无法理解为什么withSkipHeaderRecord()withSkipHeaderRecord(true) 包含标题而withHeader() 不包含标题;似乎与方法名称所暗示的行为相反。

【讨论】:

    【解决方案2】:

    withHeader() 方法告诉解析器该文件有一个标题。可能是方法名比较混乱。

    withFirstRecordAsHeader() 方法也可能有用。

    来自CSVFormat (Apache Commons CSV 1.8 API) JavaDoc 页面:

    安全地引用列

    如果您的源代码包含标题记录,您可以通过使用不带参数的withHeader(String...) 来简化代码并安全地引用列:

    CSVFormat.EXCEL.withHeader();
    

    这会导致解析器读取第一条记录并将其值用作列名。然后,调用采用 String 列名参数的 CSVRecord get 方法之一:

    String value = record.get("Col1");
    

    这使您的代码不受 CSV 文件中列顺序更改的影响。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-07-16
      • 2019-06-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-01-18
      相关资源
      最近更新 更多