Чтение CSV, кроме первой строки, через CSVReader

Вопрос:

Я хотел знать, есть ли способ читать CSV файл, кроме первой строки (заголовок) и первого столбца каждой строки? Я решил, что если я пропущу 0-й элемент массива nextLine [], я могу пропустить первый столбец каждой строки, но кто-нибудь может помочь мне пропустить первую строку, содержащую заголовки, мне нужно получить только данные, а не заголовки. Ниже мой код:

if (CSValreadyExists)
{
try {
reader = new CSVReader(new FileReader(csvfile));
} catch (FileNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
String [] nextLine;
try {
while ((nextLine = reader.readNext()) != null) {
// nextLine[] is an array of values from the line
//System.out.println(nextLine[0] + nextLine[1] + "etc...");

scalesFromCSV.add(nextLine[0]); // Factor
scalesFromCSV.add(nextLine[1]); // Scale
scalesFromCSV.add(nextLine[2]); // Scale
scalesFromCSV.add(nextLine[4]); // Scale
scalesFromCSV.add(nextLine[5]); // Scale
scalesFromCSV.add(nextLine[6]); // Scale

Toast.makeText(this, nextLine[1] + "-" + nextLine[2]
+ "-" + nextLine[3] + "-" + nextLine[4] + "-" + nextLine[5]
+ "-" + nextLine[6], Toast.LENGTH_LONG).show();
}
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}

Лучший ответ:

Например:

if (CSValreadyExists)
    {
        try {
            reader = new CSVReader(new FileReader(csvfile));
        } catch (FileNotFoundException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        String [] nextLine;
        try {
            boolean headersConsumed = false; // helper flag
            while ((nextLine = reader.readNext()) != null) {
                // nextLine[] is an array of values from the line
                //System.out.println(nextLine[0] + nextLine[1] + "etc...");

                if(!headersConsumed){ // if headers not consumed
                    headersConsumed = true;
                    continue; // skip line with headers
                } 

                scalesFromCSV.add(nextLine[0]); // Factor
                scalesFromCSV.add(nextLine[1]); // Scale
                scalesFromCSV.add(nextLine[2]); // Scale
                scalesFromCSV.add(nextLine[4]); // Scale
                scalesFromCSV.add(nextLine[5]); // Scale
                scalesFromCSV.add(nextLine[6]); // Scale

                Toast.makeText(this, nextLine[1] + "-" + nextLine[2]
                         + "-" + nextLine[3] + "-" + nextLine[4] + "-" + nextLine[5]
                                 + "-" + nextLine[6], Toast.LENGTH_LONG).show();
            }
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    }

Ответ №1

Вам не нужно писать пользовательскую логику для пропуска заголовка, вы можете использовать соответствующий конструктор. Последний аргумент – skipLines, а по умолчанию – нуль (CSVReader.DEFAULT_SKIP_LINES), чтобы он CSVReader.DEFAULT_SKIP_LINES заголовок.

new CSVReader(new FileReader(pathToData), CSVParser.DEFAULT_SEPARATOR, CSVParser.DEFAULT_QUOTE_CHARACTER, 1);

Оцените статью
TechArks.Ru
Добавить комментарий