Сравнение построчно файла CSV Java - PullRequest
0 голосов
/ 01 февраля 2020

Пример моего кода выглядит следующим образом:

File myFile = new File("C:\\Windows\\Temp\\fileName.csv");

try {
    Scanner myScanner = new Scanner(myFile);
    while(myScanner.hasNextLine()) {
        String data = myScanner.nextLine();
        String[] fields = data.split(",");
        name = fields[0];
        age = Integer.parseInt(fields[1]);
        birthday = fields[2]; 
        storeVisitDate = fields[3];
        }
        Person myPerson = new Person(name,age,birthday,storeVisitDate);
    } 
}

У меня есть отдельный класс "Person", который создает объект на основе ввода файла CSV.

Мне поручено подготовить вывод, который генерирует имя, возраст, день рождения и дату посещения магазина человеком на одной строке, однако, если у этого человека несколько дат посещения магазина, я должен отображать только дату посещения магазина в следующая строка.

Как я могу сравнить текущую строку со следующей строкой, чтобы узнать, совпадает ли это имя человека? Кроме того, мне не разрешено создавать ArrayLists / Lists.

Образец содержимого файла .CSV: Образец содержимого файла .CSV

Спасибо.

Персональный класс:

public class Person{
private String name;
private int age;
private String birthday;
private String dateOfVisit;

public Person(String data)
{
String[] info = data.split(",");
name = info[0];
age = Integer.parseInt(info[1]);
birthday = info[2];
dateOfVisit = info[3];
}
}

1 Ответ

0 голосов
/ 01 февраля 2020

Это классическое c упражнение по обработке данных, напоминающее мне, когда я изучал программирование на COBOL более 30 лет go. Основной алгоритм c выглядит следующим образом:

  1. Считайте следующую запись из файла. В вашем случае данные о человеке.
  2. Если человек, который только что прочитал, отличается от последнего прочитанного человека, завершите обработку для последнего человека и начните обработку нового человека и установите данные о последнем человеке для нового человека детали.
  3. Если только что прочитанный человек совпадает с последним прочитанным, продолжайте обработку текущего человека.

В вашем случае два Person одинаковы, если они имеют тот же name.
В соответствии с приведенным выше алгоритмом вам необходимо сохранить последние Person данные.
Ниже приведен код реализации java.

import java.io.File;
import java.io.IOException;
import java.util.Scanner;

public class Person {
    private String name;
    private int age;
    private String birthday;
    private String dateOfVisit;

    public Person(String data) {
        String[] info = data.split(",");
        name = info[0];
        age = Integer.parseInt(info[1]);
        birthday = info[2];
        dateOfVisit = info[3];
    }

    public String getName() {
        return name;
    }

    public int getAge() {
        return age;
    }

    public String getBirthday() {
        return birthday;
    }

    public String getDateOfVisit() {
        return dateOfVisit;
    }

    public String toString() {
        return String.format("%s %d %s ", name, age, birthday);
    }

    /**
     * @param args
     */
    public static void main(String[] args) {
        File myFile = new File("C:\\Windows\\Temp\\fileName.csv");
        Person lastPerson = null;
        int count = 0;
        try (Scanner myScanner = new Scanner(myFile)) {
            while (myScanner.hasNextLine()) {
                String data = myScanner.nextLine();
                Person p = new Person(data);
                if (lastPerson == null  ||  !lastPerson.getName().equals(p.getName())) {
                    if (count == 1) {
                        System.out.println(lastPerson.getDateOfVisit());
                    }
                    System.out.print(p);
                    count = 1;
                    lastPerson = p;
                }
                else {
                    if (count == 1) {
                        System.out.println();
                        System.out.println(lastPerson.getDateOfVisit());
                    }
                    count++;
                    System.out.println(p.getDateOfVisit());
                }
            }
            // Print the visit date of the last person in the CSV file.
            if (count == 1) {
                System.out.println(lastPerson.getDateOfVisit());
            }
        }
        catch (IOException xIo) {
            xIo.printStackTrace();
        }
    }
}

Обратите внимание, что вам нужно закрыть свой Scanner. Приведенный выше код достигает этого с помощью try-with-resources

Используя предоставленные вами примеры данных, вы получите следующий код:

Aliza Burn 20 01/01/2000 
07/20/2018
08/15/2016
04/14/2014
Edward Chase 45 02/14/1974 
05/05/2009
06/20/2014
Penny Lane 15 06/20/2004 
03/13/2018
05/06/2018
Josef Hunt 89 09/28/1930 08/21/2019
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...