From 3b09d15163ab8d838b393219cc5d750b5d33daf4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=D0=95=D1=80=D1=88=D0=BE=D0=B2=20=D0=92=D0=BB=D0=B0=D0=B4?= =?UTF-8?q?=D0=B8=D1=81=D0=BB=D0=B0=D0=B2?= Date: Mon, 31 Aug 2026 22:30:45 +0700 Subject: [PATCH] feat: reworking StudentCsvReader. Added the aability to specify row number when an exception is thrown out --- .../project/datasource/StudentCsvReader.java | 27 ++++++++++++------- 1 file changed, 18 insertions(+), 9 deletions(-) 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) {