public PaymentStatistic processKZ(File csvFile, LoggingHandler lh) throws IOException { CsvReader reader = null; ArrayList<PaymentRecord> recordList = new ArrayList(); Double sum = 0.0; PaymentStatistic statisticAll = new PaymentStatistic(); try { reader = new CsvReader(csvFile.getCanonicalPath()); reader.setDelimiter(';'); reader.readHeaders(); // Headers ohne Spaces mittels trim String[] headers = new String[reader.getHeaderCount()]; for (int i = 0; i < reader.getHeaderCount(); i++) { headers[i] = reader.getHeader(i).trim(); } reader.setHeaders(headers); // http://www.csvreader.com/java_csv_samples.php // http://javacsv.sourceforge.net/ PaymentRecord record = new PaymentRecord(reader); recordList.add(record); while (true) { try { PaymentRecord newRecord = new PaymentRecord(reader); if (newRecord.getKontoNr() == record.getKontoNr()) { // nicht verarbeiten, gleicher Kunde recordList.add(newRecord); sum = sum + newRecord.getBetragNr(); record = newRecord; continue; } // unterschiedliche Kundennummer, alte Belege verarbeiten if (sum == 0.0) { PaymentStatistic statistic = processKZPaymentRecord(recordList, lh); statisticAll.addStatistic(statistic); } // System.out.println("Kunde " + record.getKontoStr() + "OP: " + sum); recordList = new ArrayList(); sum = 0.0; recordList.add(newRecord); sum = sum + newRecord.getBetragNr(); record = newRecord; continue; } catch (Throwable th) { // kein neuer record mehr, Liste verarbeiten if (sum == 0.0) { PaymentStatistic statistic = processKZPaymentRecord(recordList, lh); statisticAll.addStatistic(statistic); } } break; } reader.close(); } catch (Throwable th) { lh.getLogger(Globals.LOGGINGKZ).log(Level.SEVERE, null, th); return statisticAll; } return statisticAll; }