首页 > 解决方案 > 如何附加到 CSV 文件中的特定行

问题描述

我有以下从 CSV 文件中读取的数据:

Class    Total     Step     Run1    Run2   Run3    Run4
Timer    15        2        10.5    3.6    5.5     8

稍后,将添加具有可变运行大小的其他类。例如,Optimiser将添加具有 6 次运行的类,并且 CSV 将如下所示:

Class     Total     Step     Run1    Run2   Run3    Run4
Timer     15        2        10.5    3.6    5.5     8
Optimiser 26        6        6       10     5       1.5    16    9

如您所见,标题缺少Run5and Run6

我的问题是如何更新标题以包含新的列名?请注意,稍后可能会添加其他类,运行次数超过 6。

我编写的要写入 CSV 的代码是:

  try {
      BufferedWriter out = new BufferedWriter(new FileWriter(f, true));
      if (f.length() == 0L) {
          out.write("Class");
          out.write(",");
          out.write("Total");
          out.write(",");
          out.write("Step");
          out.write(",");
          for (int i = 1; i <= numRuns; i++) {
              out.write(String.valueOf(i));
              out.write(",");
          }
          out.write("\n");
      }

      for (int i = 0; i < classes.size(); i++) {
          out.write(classes.get(i));
          out.write(",");

          out.write(totals.get(i));
          out.write(",");

          out.write(steps.get(i));
          out.write(",");

          List<Double> runs = this.getRuns(classes.get(i));
          for (double x: runs) {
              out.write(String.valueOf(x));
              out.write(",");
          }
          out.write("\n");
      }
      out.close();

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

标签: java

解决方案


在开始编写步骤之前,您应该知道任何行中的最大运行次数,您可以通过

int numRuns = 0
for (int i=0; i<classes.size(); i++) {
    int rowSize = this.getRuns(classes.get(i));
    if (rowSize > numRows) {
        numRuns = rowSize;
    }
}

推荐阅读