Почему Apache commons csv parser добавляет уникальные данные во второй набор результатов? - PullRequest
0 голосов
/ 14 октября 2018

У меня есть 2 CSV-файла (district1.csv, district2.csv) в каталоге, каждый из которых содержит столбец schoolCode.Когда я читаю оба CSV-файла с помощью библиотеки Apache commons CSV, я читаю различные значения столбца schoolCode и подсчитываю результаты.Вот мой код:

public void getDistinctRecordCount() throws IOException {
        Set<String> uniqueSchools = new HashSet<>();
        int numOfSchools;
        String SchoolCode;

    //Filter to only read csv files.
    File[] files = Directory.listFiles(new FileExtensionFilter());

    for (File f : files) {
        CSVParser csvParser;
        CSVFormat csvFormat = CSVFormat.DEFAULT.withFirstRecordAsHeader().withIgnoreHeaderCase().withTrim();
        reader = Files.newBufferedReader(Paths.get(Directory + "\\" + f.getName() ), StandardCharsets.ISO_8859_1);
        csvParser = CSVParser.parse(reader, csvFormat);
        for (CSVRecord column : csvParser) {
            SchoolCode = column.get("School Code");
            uniqueSchools.add(SchoolCode);
        }
        Logger.info("The list of Schools for " + f.getName() + " are: " + uniqueSchools);
        numOfSchools = uniqueSchools.size();
        Logger.info("The total count of Schools for " + f.getName() + " are: " + numOfSchools);
        Logger.info("-----------------------");
    }
}

Вот мой вывод:

[INFO ] [Logger] - The list of Schools for district1.csv are: [01-0003-002, 01-0003-001]
[INFO ] [Logger] - The total count of Schools for district1.csv are: 2
[INFO ] [Logger] - The list of Schools for district2.csv are: [01-0003-002, 01-0003-001, 01-0018-004, 01-0018-005, 01-0018-002, 01-0018-003, 01-0018-008, 01-0018-006]
[INFO ] [Logger] - The total count of Schools for district2.csv are: 8

Проблема: два значения, считанные из результата district1.csv, добавляются к результату district2.csv,сбросив мой счет на 2 для district2.csv (фактическое правильное значение должно быть 6).Как это добавляется?

1 Ответ

0 голосов
/ 14 октября 2018

Если вам не нужен набор всех школ, вы можете просто переместить uniqueSchools внутри цикла или очистить it:

for (File f : files) {
   uniqueSchools.clear();

Вы также можете сохранить в Map<String, String>школы на файл или создать набор на файл, зарегистрировать счетчик, а затем addAll установить на uniqueSchools

Set<String> currentSchools = new HashSet<>();
..
currentSchools.add(SchoolCode);
Logger.info("The list of Schools for " + f.getName() + " are: " + currentSchools);
numOfSchools = currentSchools.size();
Logger.info("The total count of Schools for " + f.getName() + " are: " + numOfSchools);        
uniqueSchools.addAll(currentSchools);
  • Рассмотреть строчную (верблюжий) первую букву переменных,например, изменить SchoolCode на schoolCode и Logger на logger
...