【问题标题】:Getting data from CSVRecord without having access to header values从 CSVRecord 获取数据而无需访问标头值
【发布时间】:2017-03-20 00:23:59
【问题描述】:

我正在解密一个字符串以显示多个逗号分隔的值,并且我想访问各个信息,但加密的字符串不包括标头值。

我知道,在读取特定列的 CSV 文件信息时,可以通过以下方式访问:

CSVRecord.get(ID);

其中 ID 是表中的标头值,但似乎没有办法在不知道标头名称的情况下访问它。

加密的字符串正在另一个应用程序中解密。

有没有办法在不知道标头值的情况下读取逗号分隔值的访问权限,或者是否有任何替代 CSVRecord 的方法?

【问题讨论】:

  • 为什么这个标签是加密和许可证密钥?
  • 已删除,但已添加,因为此任务的目的是从解密的许可证密钥中获取许可证信息
  • 好吧,也许吧,但你的问题都是关于 CSV 的。您不会询问加密或解密,CSV 数据的用途也无关紧要。如果你碰巧在 Linux 上运行它,你也不会标记这个“Linux”,对吧?

标签: java csv apache-commons-csv


【解决方案1】:

您可以简单地遍历结果记录并通过record.get(i) 访问记录的第 i 项,例如

    Reader in = new StringReader(
            "DAR_123451                  ,\"XXXXX Hello World Hello World XXX \"\n" +
            "DAR_123452                  ,\"XXXXX Hello World Hello World XXX \"");
    Iterable<CSVRecord> records = CSVFormat.DEFAULT.parse(in);
    for (CSVRecord record : records) {
        for (int i = 0; i < record.size(); i++) {
            System.out.println("At " + i + ": " + record.get(i));
        }
    }

【讨论】:

    【解决方案2】:

    您可以通过以下方式访问 CSVRecord 的列名(键和值):

    private void printRecords(final CSVParser csvRecords) {
        for (CSVRecord csvRecord : csvRecords) {
            for (Entry<String, String> column : csvRecord.toMap().entrySet()) {
                System.out.println(column.getKey() + "=" + column.getValue());
            }
        }
    }
    

    或者,您可以像遍历 java.util.ArrayList 一样遍历 CSVRecord。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-12-23
      • 1970-01-01
      • 2012-09-28
      • 2019-05-17
      • 2021-05-03
      • 2021-09-21
      • 1970-01-01
      • 2021-09-13
      相关资源
      最近更新 更多