6

Apache CSV实现中是否有内置功能可以在读取 csv 时忽略标题大小写?

前段时间我们实现了将 CSV 导出文件转换为 SQL 的实用程序。为此,我们选择了 Apache CSV。到目前为止一切都很好,但现在我们收到了更改请求。

我们处理的所有 CSV 文件都必须包含标题,现在我们应该以不区分大小写的方式读取这些标题,这样我们的用户就不必费力地观察他们创建的 CSV 是否符合我们的标题大小写要求。

代码示例:

for (CSVRecord record : subsidiaryRows) {
    String name = record.get(Data.NAME));

Data.NAME 在哪里

public static final String NAME = "Name";

当用户使用“名称”作为其 CSV 中的列标题而不是使用大写“N”的“名称”时,问题显然会出现。

我已经关注了 API 和源代码,但找不到任何东西。有没有办法强制 CSVRecord 使用 CaseInsensitiveMap 进行映射或类似的东西?

4

3 回答 3

5

此功能已作为CSV-159添加到 Apache Commons CSV 1.3

提交的修订版 1708685。

于 2015-10-14T19:55:00.257 回答
1

我认为您必须为方便起见处理 csv 标头,在使用 解析 CSV 文件之前apache-commons-csv,您可以使用RandomAccessFile覆盖第一行中的大小写(标头)

//convert headers to my 'known' format (ie: lowercase)
RandomAccessFile raf = new RandomAccessFile("C:\\test.csv", "rw");
String firstLine = raf.readLine();
raf.seek(0);
raf.writeBytes(firstLine.toLowerCase());

//your normal process to parse CSV with commons csv

PS:我认为以其他方式实现这一点非常困难,因为它是一个封闭的 api(每个类都是最终的,并且标头映射返回内部标头映射的副本)

于 2015-06-30T14:58:48.737 回答
-1

我没有使用过 Apache CSV,但下面的帮助

Map<String, String> nodeMap = 
    new TreeMap<String, String>(String.CASE_INSENSITIVE_ORDER);
于 2015-04-28T06:09:10.153 回答