diff --git a/app/src/main/java/ru/project/datasource/StudentCsvReader.java b/app/src/main/java/ru/project/datasource/StudentCsvReader.java index 7e39bee..156608e 100644 --- a/app/src/main/java/ru/project/datasource/StudentCsvReader.java +++ b/app/src/main/java/ru/project/datasource/StudentCsvReader.java @@ -25,7 +25,10 @@ public class StudentCsvReader implements Iterator { private final CSVParser parser; private final Iterator records; + private int lineOfFile; + public StudentCsvReader(String absoluteFilePath) { + lineOfFile = 0; Path path = Paths.get(absoluteFilePath); if (!path.isAbsolute()) { throw new IllegalArgumentException("File path must be absolute"); @@ -51,6 +54,7 @@ public class StudentCsvReader implements Iterator { @Override public Student next() { + lineOfFile++; if (!records.hasNext()) { throw new NoSuchElementException(); } @@ -58,16 +62,21 @@ public class StudentCsvReader implements Iterator { CSVRecord record = records.next(); if (record.size() != 3) { throw new IllegalArgumentException( - "Expected 3 columns, but got " + record.size()); + "Problem at line " + lineOfFile + ".Expected 3 columns, but got " + record.size()); + } + try { + double averageGrade = Double.parseDouble(record.get(AVERAGE_GRADE)); + int recordBookNumber = Integer.parseInt(record.get(RECORD_BOOK_NUMBER)); + return new StudentBuilder() + .setGroupNumber(record.get(GROUP_NUMBER)) + .setAverageGrade(averageGrade) + .setRecordBookNumber(recordBookNumber) + .build(); + } + catch (NumberFormatException e){ + throw new IllegalArgumentException( + "Problem at line " + lineOfFile + ". Unacceptable type convertation"); } - - double averageGrade = Double.parseDouble(record.get(AVERAGE_GRADE)); - int recordBookNumber = Integer.parseInt(record.get(RECORD_BOOK_NUMBER)); - return new StudentBuilder() - .setGroupNumber(record.get(GROUP_NUMBER)) - .setAverageGrade(averageGrade) - .setRecordBookNumber(recordBookNumber) - .build(); } private static void validateHeader(Map headerMap) {