Я сталкиваюсь с такой проблемой, как анализ простого файла CSV. Несколько строк не имеют правильных значений двойных кавычек. Я хотел пропустить эти записи об ошибках (строка) и обработать остальные записи. Записи об ошибках должны храниться отдельно. Я проверил ваш анализатор однозначности, который хорошо работает для записей об успехах (нет проблем с синтаксисом). Но когда я запускаю записи о проблемах, процесс останавливается, а не продолжается.
Text File Entries
date, amount, quantity, pending ,comments
**"10-oct-2001**, 555.999, 1, yEs ,?
2001-10-10, , ?, N ," "" something "" "
public void parserFile() throws FileNotFoundException {
long time=System.currentTimeMillis();
System.out.println(time);
BeanListProcessor<TestBean> rowProcessor = new BeanListProcessor<TestBean>(TestBean.class);
CsvParserSettings parserSettings = new CsvParserSettings();
parserSettings.setKeepEscapeSequences(true);
parserSettings.setIgnoreLeadingWhitespaces(true);
parserSettings.setIgnoreTrailingWhitespaces(true);
parserSettings.setProcessor(rowProcessor);
parserSettings.setUnescapedQuoteHandling(UnescapedQuoteHandling.STOP_AT_DELIMITER);
parserSettings.setUnescapedQuoteHandling(UnescapedQuoteHandling.STOP_AT_CLOSING_QUOTE);
parserSettings.setUnescapedQuoteHandling(UnescapedQuoteHandling.RAISE_ERROR);
parserSettings.setProcessorErrorHandler(new RowProcessorErrorHandler() {
@Override
public void handleError(DataProcessingException error, Object[] inputRow, ParsingContext context) {
System.out.println( "Error processing row: " + Arrays.toString(inputRow));
System.out.println( "Error details: column '" + error.getColumnName() + "' (index " + error.getColumnIndex() + ") has value '" + inputRow[error.getColumnIndex()] + "'");
}
});
parserSettings.setProcessorErrorHandler(new RetryableErrorHandler<ParsingContext>() {
@Override
public void handleError(DataProcessingException error, Object[] inputRow, ParsingContext context) {
System.out.println("Error processing row: " + Arrays.toString(inputRow));
System.out.println( "Error details: column '" + error.getColumnName() + "' (index " + error.getColumnIndex() + ") has value '" + inputRow[error.getColumnIndex()] + "'. Setting it to null");
System.out.println("error.getColumnIndex()"+ error.getColumnIndex());
if(error.getColumnIndex() == 0){
setDefaultValue(null);
} else {
keepRecord(); //prevents the parser from discarding the row.
}
}
});
List<String[]> errorRecords = new ArrayList<String[]>();
CsvParser parser = new CsvParser(parserSettings);
try{
parser.beginParsing(new FileReader(Paths.get("/src/main/resources/bean_test.csv").toFile()));
Record row;
int rownum=0;
while ((row = parser.parseNextRecord()) != null) {
rownum++;
System.out.println("rownum : " + rownum);
System.out.println("rowvalue : " + row.getValues());
errorRecords.add(row.getValues());
}
} catch (TextParsingException exception) {
//The exception will give you better details about what went wrong, and where.
System.out.println("Quote escape error. Parser stopped after reading: Record Number " + exception.getRecordNumber()+" ['" + exception.getParsedContent() + "'] of column " + exception.getColumnIndex());
for(String[] it : errorRecords) {
System.out.println("Exception : "+ it.toString());
}
}
}