Есть ли обходной путь для необязательного исключения ParseDate SuperCsvCellProcessorException в SuperCSV?

Я использую SuperCSV в java для чтения CSV-файла. У меня есть столбец, содержащий даты, но записи могут быть не заполнены, поэтому я установил его как необязательный. В моем CellProcessor я определяю поле как

    ...,
    new Optional(new ParseDate("MM/dd/yyyy",true)),
    ...

Когда ParseDate встречает пустую ячейку, он возвращает «...SuperCsvCellProcessorException: '' не может быть проанализирован как дата».

Как продолжить обработку parseDate в этой ситуации?


person ABC123    schedule 27.09.2013    source источник


Ответы (1)


Только пустые столбцы (т. е. пустая строка) сопоставляются с нулевым значением, когда Super CSV читает CSV — пробел будет считываться как пробел. Это связано с тем, что пробелы важны в RFC4180, спецификации MIME-типа CSV.

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

new Optional(new Token(" ", null, new ParseDate("MM/dd/yyyy",true)));

Это вернет null, если встретится с нулевым значением (т. е. пустой строкой в ​​CSV) или одним пробелом, и пропустит попытку проанализировать его как дату.

Вы также можете включить настройку surroundingSpacesNeedQuotes, чтобы обойти это, но имейте в виду, что это также удалите все начальные/конечные пробелы, которые вам могут не понадобиться.

person James Bassett    schedule 28.09.2013