【问题标题】:Reading and using data from a csv file in java在java中读取和使用csv文件中的数据
【发布时间】:2015-11-05 01:18:53
【问题描述】:

我需要获取一个 CSV 文件并找到每一行和每一列的平均值。有 922 行和 11 列。到目前为止,我已经能够将这些值打印到控制台,但它们并没有被行和列分隔,只有一个值,然后是一个新行。到目前为止,我有:

public static void main(String[] args) {

    String fileName = "eeg.csv";
    File file = new File(fileName);

    try {
        Scanner inputStream = new Scanner(file);
        while (inputStream.hasNext()){
            String data = inputStream.next();
            System.out.println(data);
        }
        inputStream.close();

    } catch (FileNotFoundException e) {
        e.printStackTrace();
    }

}

}

对于将值重新排序为行和列的任何帮助,以及有关如何按行和列查找平均值的任何建议,我将不胜感激。谢谢。

【问题讨论】:

  • 使用为工作设计的库,比如 openCSV
  • 我投票给 Apache POI
  • @TheLima openCSV 是那么大(与 apache API 相比)并且 CSV 比用逗号分隔的值更复杂,因此无需重新发明轮子。我认为任何开发人员可以开发的最佳技能之一就是知道何时由 3rd 方库解决该问题,以及何时花时间推出自己的库是一个更好的解决方案。而你必须手动完成的所有解析都可以用一两行简单的代码来完成,只要说
  • CSV parser/reader for C#?的可能重复
  • @TheLima 如果列数据包含,?这就是我建议使用专用库的原因,解析 CVS 看起来很简单,但很快就会变得混乱。我希望你不建议人们手动解析 HTML 和 XML:P

标签: java csv


【解决方案1】:

对于大多数使用 CSV 的情况,首先按行或行组(读取和)解析文件以获取行就足够了;然后用分隔符模式分割每一行,对于 CSV 来说是\s*,\s*,得到每一行的列。

遍历行和列以找到之后的平均值应该是微不足道的。

更高级的情况,比如"quoted blocks"可以包含分隔符,,换行,甚至是其他引用的值(通常处理为双引号""以便解析器可以知道区别),会更好使用PatternMatcher 或其他解析技术解决。

【讨论】:

    【解决方案2】:

    使用 Apache POI 库。

    public int getPhysicalNumberOfRows();
    public int getFirstRowNum();
    public int getLastRowNum();
    

    【讨论】:

      猜你喜欢
      • 2019-05-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-08-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多