пропустить вставку первой строки CSV-файла - PullRequest
0 голосов
/ 04 января 2012

У меня есть метод, который берет данные из файла .csv и помещает их в массив в обратном направлении (первая строка идет в последний слот массива), однако я бы хотел, чтобы первая строка в файле .csv не была в массиве.Как бы я это сделал?Вот мой код:

public static String[][] parse(String symbol) throws Exception{

    String destination = "C:/"+symbol+"_table.csv"; 

    LineNumberReader lnr = new LineNumberReader(new FileReader(new File(destination)));
    lnr.skip(Long.MAX_VALUE);

    String[][] stock_array = new String[lnr.getLineNumber()][3];

    try{
        BufferedReader br = new BufferedReader(new FileReader(destination));
        String strLine = "";
        StringTokenizer st = null;

        int line = lnr.getLineNumber()-1;

        while((strLine = br.readLine()) != null){           
            st = new StringTokenizer(strLine, ",");

            while(st.hasMoreTokens()){                  
                stock_array[line][0] = st.nextToken();
                        st.nextToken();
                stock_array[line][1] = st.nextToken();
                stock_array[line][2] = st.nextToken();
                        st.nextToken();
                        st.nextToken();
                        st.nextToken();
            }
            line--; 
        }
    }
    catch(Exception e){
        System.out.println("Error while reading csv file: " + e);
    }
    return stock_array;
}

Ответы [ 2 ]

2 голосов
/ 04 января 2012

Вы можете пропустить первую строку, просто прочитав ее и ничего не делая.Сделайте это непосредственно перед циклом while:

br.readLine();

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

String[][] stock_array = new String[lnr.getLineNumber()-1][3];
...
int line = lnr.getLineNumber()-2;
1 голос
/ 04 января 2012

Насколько мне известно, ваш код неэффективен. Кроме того, вы используете linenumberreader.skip (long.max_value), который не является правильным / подтвержденным способом найти количество строк файла. StringTokenizer - это устаревший способ расщепления токенов. Я бы написал это следующим образом:

public static List<String[]> parse(String symbol) throws Exception {
        String destination = "C:/"+symbol+"_table.csv";
        List<String[]> lines = new ArrayList<String[]>();

        try{
            BufferedReader br = new BufferedReader(new FileReader(destination));
            int index = 0;

            while((line = br.readLine()) != null){
                if(index == 0) {
                   index++;
                   continue; //skip first line
                }

                lines.add(line.split(","));
            }

            if(lines != null && !lines.isEmpty()) {
                Collections.reverse(lines);
            }
        } catch(IOException ioe){
            //IOException Handling
        } catch(Exception e){
            //Exception Handling
        }

        return lines;
    }
...