Исключить поля из 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);

Надеюсь, поможет!

Другие вопросы по тегам