Я использую Super CSV для проверки файла csv.
Я получаю номер строки как listReader.getRowNumber()
, но есть ли способ, с помощью которого я могу получить номер столбца, в котором есть ошибка проверки?
Я использую Super CSV для проверки файла csv.
Я получаю номер строки как listReader.getRowNumber()
, но есть ли способ, с помощью которого я могу получить номер столбца, в котором есть ошибка проверки?
Вы точно можете. SuperCsvException, созданное Super CSV, имеет метод getContext()
, который возвращает CsvContext при возникновении исключения (вы нужно попробовать/перехватить вызов read()
).
Он содержит много полезной информации, в том числе:
Кроме того, вы также можете вызвать getUntokenizedRow() метод CsvReader для получения необработанной неразмеченной строки CSV.
Например
ICsvListReader listReader = null;
try {
listReader = new CsvListReader(new FileReader(CSV_FILENAME),
CsvPreference.STANDARD_PREFERENCE);
listReader.getHeader(true); // skip the header
final CellProcessor[] processors =
new CellProcessor[]{new Optional(), new ParseInt()};
List<Object> row;
while( (row = listReader.read(processors)) != null ) {
System.out.println(String.format("lineNo=%s, rowNo=%s, row=%s",
listReader.getLineNumber(), listReader.getRowNumber(), row));
}
} catch (final SuperCsvException e){
// here's what you're after!
final CsvContext context = e.getContext();
System.out.println(String.format(
"something went wrong on lineNo=%s, rowNo=%s, colNo=%s",
context.getLineNumber(),
context.getRowNumber(),
context.getColumnNumber()));
} finally {
if( listReader != null ) {
listReader.close();
}
}
Обновление:
После просмотра кода, который вы добавили, похоже, что вы хотите зафиксировать исключения проверки, а не просто знать номер столбца. Если это так, вам следует взглянуть на этот вопрос.