Динамическое чтение файла CSV - PullRequest
0 голосов
/ 03 января 2019

Введение

Я работаю над проектом по автоматизации, чтобы освоить новые приемы в Java и науке о данных (на очень простом уровне), все самообучаемо.

Проблема

Вот пример .csv-файла того, как я храню эти данные.

Date when obtained
Format for identifying the numbers below
data
.
.
.
.
data

CSV, который я сейчас использую.

2018/12/29
name,quantity,quality,realmQ,cost
Tejido,321 908,13.55,43.18,$15.98,
Ropa,195 045,20.55,45.93,$123.01,
Gorra de visera,126 561,17.43,42.32,$79.54,
Cerveza,80 109,3.37,17.93,$12.38,
Mercancías de playa,75 065,11.48,39.73,$105.93,
Bebidas alcohólicas,31 215,4.84,27.90,$32.29,
Artículos de cuero,19 098,23.13,44.09,$198.74,
Bolsas y carteras,7 754,23.09,41.34,$1 176.54,
2018/12/30
name,quantity,quality,realmQ,cost
Tejido,252 229,12.86,43.14,$18.87,
Ropa,132 392,18.09,46.02,$177.58,
Gorra de visera,87 676,14.42,42.46,$122.48,
Cerveza,44 593,2.72,17.79,$18.71,
Mercancías de playa,44 593,8.26,39.56,$200.78,
Bebidas alcohólicas,27 306,4.30,23.88,$31.95,
Artículos de cuero,16 147,21.08,43.91,$207.49,
Bolsas y carteras,6 552,21.11,40.59,$1 195.41,
2019/01/02
name,quantity,quality,realmQ,cost
Tejido,321 908,13.55,43.18,$15.98,
Ropa,195 045,20.55,45.93,$123.01,
Gorra de visera,126 561,17.43,42.32,$79.54,
Cerveza,80 109,3.37,17.93,$12.38,
Mercancías de playa,75 065,11.48,39.73,$105.93,
Bebidas alcohólicas,31 215,4.84,27.90,$32.29,
Artículos de cuero,19 098,23.13,44.09,$198.74,
Bolsas y carteras,7 754,23.09,41.34,$1 176.54,
2019/01/03
name,quantity,quality,realmQ,cost
Tejido,321 908,13.55,43.18,$15.98,
Ropa,195 045,20.55,45.93,$123.01,
Gorra de visera,126 561,17.43,42.32,$79.54,
Cerveza,80 109,3.37,17.93,$12.38,
Mercancías de playa,75 065,11.48,39.73,$105.93,
Bebidas alcohólicas,31 215,4.84,27.90,$32.29,
Artículos de cuero,19 098,23.13,44.09,$198.74,
Bolsas y carteras,7 754,23.09,41.34,$1 176.54,

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

Код, который я использовал до сих пор, может прочитать один файл .csv, но если я добавлю большеданные ниже.Не работаетЯ знаю, что это связано с циклом, как я вижу в отладчике, но все еще не могу найти правильное решение.

Код

public class CSVinput {

    static String[] nombre = new String[8];
    static int[] cantidad = new int[8];
    static double[] calidad = new double[8];
    static double[] realmQ = new double[8];
    static double[] coste = new double[8];    

public static void ImportData(String path) throws FileNotFoundException
{
    /*Can only load one csv with 8 stuff in it*/
    System.out.println("Presenting data...");


        try (Scanner scan = new Scanner(new File(path))) {
            scan.useDelimiter(",");
            String date = scan.nextLine();
            System.out.println("fecha: " + date);
            scan.nextLine();

            int index = 0;
            while(scan.hasNext() == true)
                try{
                {                    
                    String name = scan.next().replaceAll("\n", "");
                        nombre[index] = name;
                    System.out.println("nombre: " + name);
                    int quantity = Integer.parseInt(scan.next().replaceAll(" ", ""));
                        cantidad[index] = quantity;
                    System.out.println("cantidad: " + quantity);
                    double quality = Double.parseDouble(scan.next());
                        calidad[index] = quality;
                    System.out.println("calidad: " + quality);
                    double realmq = Double.parseDouble(scan.next());
                        realmQ[index] = realmq;
                    System.out.println("realmQ: " + realmq);
                    double cost = Double.parseDouble(scan.next().replace("$", "").replace(" ", ""));
                        coste[index] = cost;
                    System.out.println("coste: $" + cost);

                    index++;                    
                }
                } catch(ArrayIndexOutOfBoundsException e){}    
        }     
}

   public static void main(String[] args) throws FileNotFoundException
         {
             ImportData("caca.csv");             
         }
}

Примечания

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

2018/12/29
name,quantity,quality,realmQ,cost
Tejido,321 908,13.55,43.18,$15.98,
Ropa,195 045,20.55,45.93,$123.01,
Gorra de visera,126 561,17.43,42.32,$79.54,
Cerveza,80 109,3.37,17.93,$12.38,
Mercancías de playa,75 065,11.48,39.73,$105.93,
Bebidas alcohólicas,31 215,4.84,27.90,$32.29,
Artículos de cuero,19 098,23.13,44.09,$198.74,
Bolsas y carteras,7 754,23.09,41.34,$1 176.54,

То, что я ожидал

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

Спасибо за интерес к этому вопросу.

1 Ответ

0 голосов
/ 03 января 2019

Вы пытались поймать не только ArrayIndexOutOfBoundsException e, но и все возникающие исключения (например, через дополнительный} catch (Excepction e)) и распечатать его?

Насколько я вижу, выЦикл прервется, как только цикл достигнет даты второго блока.(поскольку ваш цикл ожидает значения, а не одно поле даты).

Добавление:

Предполагается, что CSV / может иметь одну строку заголовка, а не несколько.

Я хотел бы рассмотреть вопрос об удалении дат и промежуточных объявлений заголовка и использовании даты в качестве части данных (6-й столбец), поскольку это, скорее всего, будет соответствовать файлам CSV.

Например, вместо этого:

2018/12/29 name,quantity,quality,realmQ,cost Tejido,321 908,13.55,43.18,$15.98, Ropa,195 045,20.55,45.93,$123.01, 2018/12/30 name,quantity,quality,realmQ,cost Tejido,324 708,13.55,43.18,$17.98, Ropa,111 045,20.55,45.93,$14.01,

вы можете / должны сделать:

name,quantity,quality,realmQ,cost,date Tejido,321 908,13.55,43.18,$15.98,2018/12/29 Ropa,195 045,20.55,45.93,$123.01,2018/12/29 Tejido,324 708,13.55,43.18,$17.98,2018/12/30 Ropa,111 045,20.55,45.93,$14.01,2018/12/30

и - конечно - переместить выборку даты в цикл.

HTH

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...