Чтение CSV-файла в Java и извлечение определенных данных из прочитанного файла. - PullRequest
0 голосов
/ 19 апреля 2020

Я прочитал CSV-файл в Java, используя класс POJO. Файл имеет 19 столбцов с заголовком, и я хотел бы извлечь информацию из одного из заголовков. Как я могу это сделать? Был бы признателен за некоторые рекомендации и советы от сообщества.

The csv file looks like that

Вот некоторые из моих кодов:

Я хотел бы получить доступ к "EWR" из исходной переменной и распечатать там сколько EWR из данных. Я пытался использовать геттер для извлечения данных, которые я хочу, но это не сработало. Я получил 0, когда я попытался напечатать размер.

public class nycflights13 {

    public static void main(String[] args) {
        // TODO Auto-generated method stub
        NYC13data ABC = new NYC13data ();
        List<Flights> EWRairport = new ArrayList <> ();
        for (Flights ab : ABC.NYC13.fdata) {
            if(ab.getorigin().equals("EWR")){
                EWRairport.add(ab);
            } else {
                continue;
            }
        }
        System.out.println(EWRairport.size());
    }   
}

Вот мой класс NYC13data:

class NYC13data {
    flightdata NYC13 = new flightdata ();

    public flightdata getList (){
        return NYC13;
    }

    public NYC13data () {
        NYC13.readFileFromCSV("C:\\Users\\boonl\\Desktop\\R Assignment\\flights.csv");
    }
}

Вот мой класс flightdata:

class flightdata {
    public List<Flights> fdata;

    public List<Flights> readFileFromCSV (String fileName){
        Path pathToFile = Paths.get(fileName);

        try(BufferedReader br = Files.newBufferedReader(pathToFile,
                StandardCharsets.US_ASCII)){
            br.readLine();
            String line = br.readLine();
            while (line != null) {
                String [] variable = line.split(",");

                //convert string array to list
                List<String> list = Arrays.asList(variable);
                if(list.contains("NA")) {
                    line = br.readLine();
                    continue;
                } else {
                    Flights dataset = createFlights(variable);
                    fdata.add(dataset);
                    line = br.readLine();
                }

            }
        }catch (IOException ioe) {
            ioe.printStackTrace();
        }

        return fdata;

    }

    //Did not show all the 19 variables
    private static Flights createFlights (String [] metadata) {
        int year = Integer.parseInt(metadata[1]);
        int month = Integer.parseInt(metadata[2]);
        int day = Integer.parseInt(metadata[3]);
        String flight = metadata[11]; 
        String tailnum = metadata[12];
        String origin = metadata[13];
        String dest = metadata[14]; 
        String time_hour = metadata[19];

        return new Flights(year, month, day, dep_time, sched_dep_time, dep_delay, arr_time,
                sched_arr_time, arr_delay, carrier, flight, tailnum, origin, dest, air_time,
                distance, hour, minute, time_hour);
    }

    public flightdata () {
        fdata = new ArrayList <> ();    
    }

    public void printdata () {
        for(Flights ab : fdata) {
            System.out.println(ab);
        }
    }
}

Вот мой класс Flights :

class Flights {

    private int year; private int month; private int day; private int dep_time;
    private int sched_dep_time; private int dep_delay; private int arr_time;
    private int sched_arr_time; private int arr_delay; private String carrier;
    private String flight; private String tailnum; private String origin;
    private String dest; private int air_time; private int distance;
    private int hour; private int minute; private String time_hour;

    public Flights(int year, int month, int day, int dep_time, int sched_dep_time,
            int dep_delay, int arr_time, int sched_arr_time, 
            int arr_delay, String carrier, String flight, String tailnum,
            String origin, String dest, int air_time, int distance,
            int hour, int minute, String time_hour) {
        this.year = year; this.month = month; this.day = day; this.dep_time = dep_time;
        this.sched_dep_time = sched_dep_time; this.dep_delay = dep_delay; this.arr_time = arr_time;
        this.sched_arr_time = sched_arr_time; this.arr_delay = arr_delay; this.carrier = carrier; 
        this.flight = flight; this.tailnum = tailnum; this.origin = origin; 
        this.dest = dest; this.air_time = air_time; this.distance = distance; 
        this.hour = hour; this.minute = minute; this.time_hour = time_hour; 
    }

    public int getyear() {return year;}
    public void setYear(int year) {this.year = year;}

    public int getmonth() {return month;}
    public void setMonth(int month) {this.month = month; }

    public int getday() {return day;}
    public void setDay(int day) {this.day = day; }

    public String getcarrier() {return carrier;}
    public void setcarrier(String carrier) {this.carrier = carrier;}

    public String getflight() {return flight;}
    public void setflight(String flight) {this.flight = flight; }

    public String gettailnum() {return tailnum;}
    public void settailnum(String tailnum) {this.tailnum = tailnum; }

    public String getorigin() {return origin;}
    public void setorigin(String origin) {this.origin = origin; }

    public String getdest() {return dest;}
    public void setdest(String dest) {this.dest = dest; }

    public String gettime_hour() {return time_hour;}
    public void settime_hour(String time_hour) {this.time_hour = time_hour; }

    @Override
    public String toString() {
        return "Flights [year=" + year +", month=" + month +", day=" + day +", dep_time=" + dep_time 
                + ", sched_dep_time=" + sched_dep_time +", dep_delay=" + dep_delay +", arr_time=" + 
                arr_time + ", sched_arr_time=" + sched_arr_time +", arr_delay=" + arr_delay +", 
                carrier=" + carrier + ", flight=" + flight +", tailnum=" + tailnum +", origin=" + 
                origin +", dest=" + dest ", air_time=" + air_time +", distance=" + distance +", 
                hour=" + hour +", minute=" + minute +", time_hour=" + time_hour +"]";
    }
}

Буду очень признателен, если кто-нибудь здесь поможет мне, что не так с моим кодом. Бесконечно благодарен.

1 Ответ

1 голос
/ 19 апреля 2020

Я думаю, что, возможно, нашел проблему, Ваш оригинальный CSV-файл содержит форматирование в ячейках. Очистите форматирование для всех ячеек, кроме столбца time_hour.

Или, как быстрое решение, измените код в классе nycflights13 внутри l oop

if( ab.getorigin().equals( "\"EWR\"" ) ) // nycflights13 class

Как примечание и, как уже упоминалось в комментариях, в следующий раз используйте синтаксический анализатор CSV, это позволит избежать многих сложностей при работе с файлами CSV

...