【问题标题】:How to read specified row in csv file如何读取csv文件中的指定行
【发布时间】:2016-03-26 18:20:07
【问题描述】:

我在 csv 文件中有从 1980 年开始的每日数据。但是我只想读取 1985 年的数据。因为另一个文件中的另一个数据集是从 1985 年开始的。Java 中如何跳过读取 1985 年之前的数据?

【问题讨论】:

  • 逐行阅读,跳过1985年之前的?
  • 到目前为止你尝试过什么?你哪里有问题?请显示您遇到问题的基本代码。
  • 你是怎么读的?带流?你分了?每一行都有固定的大小吗?您需要发布更多详细信息
  • 使用文件阅读器类读取.csv文件,是的,每一行都是固定大小

标签: java file csv opencsv


【解决方案1】:

Madhu - 如果您使用的是 openCSV,请查看 CSVToBeanFilter 的 javadocs。这将为您提供一个很好的示例,说明如何解析仅读取与给定条件匹配的列的行的文件。

【讨论】:

    【解决方案2】:

    我建议使用grep 命令行实用程序来过滤数据,而不是开发自定义解决方案。

    grep 1985 *.csv > data_from_1985.csv
    

    如果您需要更好的表达式来过滤数据以避免虚假数据,您可以使用regex101.com 进行测试。

    例如,如果 CSV 中的行以年份开头,您可以使用

    grep "^1985" *.csv > data_from_1985.csv
    

    【讨论】:

      【解决方案3】:

      也许这个link 可以帮助你。讲的是InputStream的seek()函数。

      你可以从 1985 年的数据开始计算女巫字节,然后用 seek() 跳过这个字节。

      【讨论】:

      • 只有链接的答案质量很差,因为链接本身将来可能会变得不可用......
      • 我解释了解决方法,对不起。
      【解决方案4】:

      阅读 opencsv 文档:http://opencsv.sourceforge.net/#how-to-read

      读取每一行(来自示例):

      CSVReader reader = new CSVReader(new FileReader("yourfile.csv"));
       String [] nextLine;
       while ((nextLine = reader.readNext()) != null) {
          // nextLine[] is an array of values from the line
          System.out.println(nextLine[0] + nextLine[1] + "etc...");
       }
      

      转换为整数

      int one_value=Integer.parseInt(nextLine[i]); // iterate i 
      

      然后,获取您的“年份”列,并将其与 1985 年进行比较

      【讨论】:

      • @MadhuSudhanBaddam 。您的年份肯定是在一列中定义的。你没有精确你的 csv 结构。
      • Madhu - Guillaume 是正确的。是的,您想读取行,但您想根据列值进行过滤。
      猜你喜欢
      • 2010-11-18
      • 1970-01-01
      • 2019-08-12
      • 2023-03-08
      • 2020-08-23
      • 2015-09-06
      • 1970-01-01
      • 2015-12-26
      • 1970-01-01
      相关资源
      最近更新 更多