具有重复列标题的Apache CSV解析器

时间:2016-07-24 07:32:02

标签: csv apache-commons

我需要处理具有重复标题的CSV文件,每个数据分为三列(min,max和avg),但每列的标题相同。第一列是min,第二列是average,第三列是max。

Apache CSV解析器抛出:

java.lang.IllegalArgumentException: The header contains a duplicate name:

如何配置解析器以接受重复的标头?

2 个答案:

答案 0 :(得分:6)

CSVParser中没有预定义的配置参数来控制是否可以接受重复的列名。

查看源代码显示initializeHeader方法创建Map,其中列名称为键,列索引为值。如果要使用标头映射,则列名必须是唯一的。

但是,有一个解决方案:

指定CSVFormat,忽略CSV文件第一行定义的列名称,define your column names manually

来自CSVFormat documentation

  

定义列名称

     

要定义要用于访问记录的列名,请写:

CSVFormat.EXCEL.withHeader("Col1", "Col2", "Col3");
     

致电withHeader(String...),您可以使用给定的名称来解决CSVRecord中的值,并假设您的CSV源不包含也定义列名的第一条记录。如果是,那么您将使用您的姓名覆盖此元数据,并且应使用withSkipHeaderRecord(boolean)调用true来跳过第一条记录。

答案 1 :(得分:3)

现在可以将CSVParser配置为允许重复的标题。

Capota