Исключить поля из CSV
Я конвертирую Resultset в CSV, используя парсер Univocity. Я хочу, чтобы в выходном CSV присутствовали только пользовательские поля, если они присутствуют в наборе результатов. Если поле отсутствует в наборе результатов, соответствующий столбец должен быть пустым. У меня есть ограничение не изменять запрос SQL.
Я использую метод excludeFields(), но он делает значения полей пустыми в выходном CSV вместе с разделителем.
пример:
Name, Age, Email
Joe, 20, joe@example.com
После применения excludeFields("Возраст"). Поскольку метод setHeaders() имеет некоторые известные проблемы, я использую собственную логику для установки заголовков.
Name, Email
Joe, , joe@example.com
Но я хочу, чтобы это было так:
Name, Email
Joe, joe@example.com
Есть ли способ, которым я могу этого достичь?
1 ответ
В настоящее время автор контролируется определенными вами заголовками. Выбор поля просто заставит автора печатать пробелы в столбцах, которые не были выбраны.
Следующая версия обеспечит переупорядочение столбцов при записи, что должно делать то, что вы хотите. Если вы можете использовать 2.5.0-SNAPSHOT, он уже должен работать:
ResultSet resultSet = statement.executeQuery("SELECT * FROM users");
CsvWriterSettings csvWriterSettings = new CsvWriterSettings();
csvWriterSettings.excludeFields("Age");
csvWriterSettings.setHeaderWritingEnabled(true);
csvWriterSettings.setColumnReorderingEnabled(true); //this does the trick
CsvRoutines csvRoutines = new CsvRoutines(csvWriterSettings);
csvRoutines.write(resultSet, output);
Надеюсь, поможет!