Необходимо удалить пустые столбцы в CSV

Я создал файл CSV с использованием библиотеки Open CSV, используя некоторые данные времени выполнения, поступающие из другого источника данных.

Теперь я ищу много пустых столбцов, которые не имеют значения в ячейках столбцов, поэтому я хочу удалить их программно.

Подход, который я сейчас пытаюсь реализовать, заключается в том, чтобы получить первые данные CSV в массиве String 2, выполнить итерацию по вертикали и сделать что-нибудь для удаления пустых столбцов!

Могу ли я последовать другому лучшему подходу? Пожалуйста, предложите!

С Уважением

// отредактировал

Код для записи в CSV с использованием библиотеки OpenCSV:

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

person S Singh    schedule 15.01.2015    source источник
comment
Что вы имеете в виду под удалением? Удаление их из массива 2D String или из файла csv?   -  person DeadlyJesus    schedule 15.01.2015
comment
Мне нужно удалить пустые столбцы из CSV!   -  person S Singh    schedule 15.01.2015
comment
Затем прочтите его как массив 2D-строк и перепишите csv, не включая пустые столбцы.   -  person DeadlyJesus    schedule 15.01.2015
comment
Можете ли вы добавить код, который вы используете для записи файла CSV (CSVWriter)?   -  person Ascalonian    schedule 15.01.2015
comment
найди правку в моем сообщении для кода записи csv!   -  person S Singh    schedule 15.01.2015
comment
найди правку в моем сообщении для кода записи csv! Если перед записью в CSV, если я обновляю массив строк 2d, то это возможно то, что мне нужно, значит, когда я открываю csv, он не будет показывать пустые столбцы!   -  person S Singh    schedule 15.01.2015
comment
Обратите внимание: вы не можете отбросить запись из середины списка, если вы хотите отредактировать ее на месте, вы хотите сделать ее списком или массивом LinkedLists.   -  person Konstantin Tarashchanskiy    schedule 15.01.2015
comment
Знаете ли вы заранее, какие столбцы хотите удалить, или вам нужно сделать проверку перед удалением?   -  person Ascalonian    schedule 15.01.2015


Ответы (2)


Итак, в предоставленном 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);
}
person Ascalonian    schedule 15.01.2015

Фактически не запускал это, поэтому могут существовать некоторые ошибки, но грубый скелет должен быть:

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
}
person Konstantin Tarashchanskiy    schedule 15.01.2015
comment
@Tom Спасибо, что поймали это - person Konstantin Tarashchanskiy; 15.01.2015
comment
В вашем последнем заявлении if все еще отсутствуют круглые скобки :) - person Ascalonian; 15.01.2015
comment
@Ascalonian Я был, теперь я нет. Спасибо за улов. - person Konstantin Tarashchanskiy; 15.01.2015