Могу ли я при использовании Super CSV получить номер столбца, в котором есть ошибка проверки?

Я использую Super CSV для проверки файла csv.

Я получаю номер строки как listReader.getRowNumber(), но есть ли способ, с помощью которого я могу получить номер столбца, в котором есть ошибка проверки?


person v0ld3m0rt    schedule 20.08.2013    source источник


Ответы (1)


Вы точно можете. SuperCsvException, созданное Super CSV, имеет метод getContext(), который возвращает CsvContext при возникновении исключения (вы нужно попробовать/перехватить вызов read()).

Он содержит много полезной информации, в том числе:

  • Номер строки (начинается с 1). Это фактический номер строки файла.
  • Номер строки (начинается с 1). Это не (всегда) то же самое, что и номер строки (одна строка может охватывать несколько строк!)
  • Номер столбца (начинается с 1)
  • Источник строки (в данном случае список токенизированных строк для каждого столбца до применения обработчиков ячеек)

Кроме того, вы также можете вызвать 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();
    }
}

Обновление:

После просмотра кода, который вы добавили, похоже, что вы хотите зафиксировать исключения проверки, а не просто знать номер столбца. Если это так, вам следует взглянуть на этот вопрос.

person James Bassett    schedule 20.08.2013
comment
Я не понял, что ты пытаешься сказать. - person v0ld3m0rt; 20.08.2013