需要删除csv中的空列

时间:2015-01-15 15:32:04

标签: java arrays csv opencsv

我使用来自不同数据源的一些运行时数据,使用Open CSV库创建了CSV文件。

现在我正在查看很多空列,这些列在列单元格中没有价值,所以我想以编程方式删除它。

我正在尝试实现的方法是,在String 2维数组中获取第一个CSV数据并垂直迭代并执行删除空列的操作!

我可以效仿其他更好的方法吗?请建议!

此致

//编辑

使用OpenCSV库以CSV格式编写代码:

public static void writeDataToCSV(CSVWriter writer, String[][] csvData){
    List<String[]> csvDataList = new ArrayList<String[]>();
    for (String[] rowData : csvData) {
        csvDataList.add(rowData);
    }
    writer.writeAll(csvDataList);
}

2 个答案:

答案 0 :(得分:1)

因此,在提供的String[]中,您知道要删除的列的索引是什么,对吗?如果是这样,你可以这样做:

for (String[] rowData : csvData) {
    // Convert the String[] to an ArrayList to be able to easily remove the specific column
    ArrayList<String> rowArray = new ArrayList<String>(Arrays.asList(rowData));

    // Remove that specific column value
    rowArray.remove(<index of column>);

    // Convert the ArrayList back into an array so it can be written to the CSV
    String[] dataToWrite = rowArray.toArray(new String[rowArray.size()]);

    // Add it to the ArrayList of values to be written
    csvDataList.add(dataToWrite);
}

答案 1 :(得分:0)

实际上没有运行它,因此可能存在一些错误,但粗糙的骨架应该是:

int height;  //How many rows
int width;  //How many columns per row

Set<Integer> emptyCols = new HashSet<Integers>();  //Columns that are empty

for (int x = 0; x < width; x++) { //Look at each column
  boolean empty = true; //We have yet to find an item in this column
  for (int y = 0; y < height; y++) {
    if (!data[y][x].isEmpty()) {  //This column is not empty, we can move on
      empty = false;
      break;
    }
  }

  if (empty) {
    emptyCols.add(x);
  }
}

for (int y = 0; y < height; y++) {
  for (int x = 0; x < width; x++) {
    if (!emptyCols.contains(x)) {
      //write out data[y][x]
    }
  }
  //Terminate row
}