Supercsv を使用して csv ファイルを解析しようとしています。「キャッチ例外」を使用して、間違った構造またはデータを持つ行を排除します。
すべての行は do / while ループで処理されます。しかし、最初の行で例外 (正規表現...) が発生した場合、read() メソッドの戻り値は null になり、while ループが停止します。
不良行の除去を維持することで、これを回避するにはどうすればよいですか?
コードは次のとおりです。
CsvPreference LSP_PREFERENCE = new CsvPreference.Builder(' ', ';', "\n").build();
beanReader = new CsvBeanReader(new InputStreamReader(new FileInputStream(fileToTreat), "ISO-8859-1"), LSP_PREFERENCE);
CsvPreference LSP_PREFERENCE = new CsvPreference.Builder(' ', ';', "\n").build();
beanReader = new CsvBeanReader(new InputStreamReader(new FileInputStream(fileToTreat), "ISO-8859-1"), LSP_PREFERENCE);
treatedOk = true;
ucdr = null;
do {
try {
ucdr = beanReader.read(ConvergeDataRow.class, headers, processors);
if (ucdr != null) {
rdata.add(ucdr); // contains list of row data.
}
} catch (SuperCsvConstraintViolationException ex) {
logger.log(Level.SEVERE, "NON CORRECT VALUE ENCOUNTERD ON ROW "+beanReader.getRowNumber(), ex);
treatedOk = false;
} catch (SuperCsvCellProcessorException ex){
logger.log(Level.SEVERE, "PARSER EXCEPTION ON ROW "+beanReader.getRowNumber(), ex);
treatedOk = false;
} catch (org.supercsv.exception.SuperCsvException ex){
logger.log(Level.SEVERE, "ERROR ON ROW "+beanReader.getRowNumber(), ex);
treatedOk = false;
}
} while (ucdr != null);treatedOk = true;
致命的な解決策は、ucdr を別の値の null に強制することです。しかし、確かにもっと良い方法があります...
私たちを手伝ってくれますか?