java - 在 Java 中通过标题解析特定列

标签 java parsing csv header

这就是我的 CSV 文件的样子:

 X, X2, Symbol, Date, Open, High, Low, Close, Volume

 5, 9, AAPL, 01-Jan-2015, 110.38, 110.38, 110.38, 110.38, 0
 2710, 289,  AAPL, 01-Jan-2015, 110.38, 110.38, 110.38, 110.38, 0
 5415, 6500, AAPL, 02-Jan-2015, 111.39, 111.44, 107.35, 109.33, 53204600

如何仅从 X 和 X2 列中选择值?我一直在尝试使用 openCSV 库,但没有得到任何好处。

谢谢

最佳答案

uniVocity-parsers可以非常轻松地完成此操作,并且速度比 OpenCSV 快 2 倍。

以下是如何使用它来选择感兴趣的列:

输入

    String input = "X, X2, Symbol, Date, Open, High, Low, Close, Volume\n" +
            " 5, 9, AAPL, 01-Jan-2015, 110.38, 110.38, 110.38, 110.38, 0\n" +
            " 2710, 289,  AAPL, 01-Jan-2015, 110.38, 110.38, 110.38, 110.38, 0\n" +
            " 5415, 6500, AAPL, 02-Jan-2015, 111.39, 111.44, 107.35, 109.33, 53204600";

配置

    CsvParserSettings settings = new CsvParserSettings(); //many options here, check the tutorial
    settings.setHeaderExtractionEnabled(true); //tells the parser to use the first row as the header row
    settings.selectFields("X", "X2"); //selects the fields 

解析

    CsvParser parser = new CsvParser(settings);
    List<String[]> allRows = parser.parseAll(new StringReader(input));

打印结果

    for(String[] row : allRows){
        System.out.println(Arrays.toString(row));
    }
}

输出

[5, 9]
[2710, 289]
[5415, 6500]

在字段选择上,您可以使用任何字段序列,并且具有不同列大小的行,解析器将很好地处理这个问题。

披露:我是这个库的作者。它是开源且免费的(Apache V2.0 许可证)

关于java - 在 Java 中通过标题解析特定列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34890462/

相关文章:

java - 如何在没有 wsdl 的 url 的情况下创建 Axis 客户端?

parsing - 方案 - LALR 解析器生成 - 来自字符串的输入

java - 递归下降解析器 - ClassCastException

javascript - 如何将 csv 转换为数组

java - 转换为阿拉伯数字时出现 ArrayIndexOutOfBoundsException 中断

java - 如何添加到JTable?

Hibernate示例程序中的java.lang.NullPointerException

python - 在使用 pyparsing 制作递归解析器时需要帮助

json - linux命令行使用来自另一列json的值内联更新csv文件

python - MySQL 从 Python 中的 CSV 字段中选择