Какой клеточный процессор использовать в строках при использовании SuperCSV CSVBeanReader - PullRequest
2 голосов
/ 29 ноября 2011

@ Карл В. Данго, @ Жолт, @Джон, Давайте начнем сначала.Вот мой код и ошибка (внизу).В консоли вы увидите первые две строки необработанных данных.Первое поле в первой строке («элемент») является нулевым в выходных данных.Я подумал, что это должно быть 'xx', потому что у меня есть столбец StrReplace ("", "xx").Больше всего меня беспокоит то, как перехватить ноль / пробел в столбце 4 третьей записи.Это кажется настолько основополагающим, что я немного встревожен, что это такая большая проблема, чтобы решить.

1 Ответ

2 голосов
/ 14 февраля 2012

Эта проблема заключается в том, что CsvBeanReader не преобразует пустой столбец в null, но в "" (пустая строка). Поэтому вам действительно нужен процессор ConvertNullTo, когда записывает CSV-файлы.

Так что вместо

new ConvertNullTo("0", new ParseBigDecimal())

вы должны использовать

new Token("", "0", new ParseBigDecimal()) // replace "" with "0"

Предполагается, что вы хотите BigDecimal со значением ноль для пустых столбцов - если вы хотите, чтобы вместо него было null, тогда используйте

new Optional(new ParseBigDecimal())

Я признаю, что сайт и javadoc должны сделать это более явным, и над этим я работаю в предстоящем выпуске Super CSV.


Редактировать: Обновление для Super CSV 2.0.0-бета-1

Недавно выпущенный Super CSV 2.0.0-beta-1 включает в себя множество исправлений ошибок и новых функций (включая поддержку Maven и новое расширение Dozer для отображения вложенных свойств и массивов / коллекций). Также изменилась обработка нулей и пустой строки.

В новой версии "" (пустой столбец) читается как null, что означает, что теперь вы можете использовать свой исходный код:

new ConvertNullTo("0", new ParseBigDecimal())

В результате этого процессор ячеек Optional() теперь сопоставляется с null вместо "", что означает, что вы также можете использовать его как процессор ячеек при записи (теперь будет записано значение null) как "").

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...