Новичок в OpenCSV: как получить содержимое из определенных ячеек

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

Редактировать: я обновил свой код, но ничего не изменилось... Помогите?

ImageAnnotation PeserAnnotation1 = new ImageAnnotation ();
    String csvFilename = "C:/Users/Daniela/Documents/ISPY/205_4493_MR1_ACRIN_6657/E25008/peser_data.csv"; //Insert file name and location
    CSVReader csvReader = new CSVReader(new FileReader(csvFilename));
    String [] headerLine = csvReader.readNext();

    //start imageannotation info
    for (int i = 0; i < headerLine.length; i++){
            if (headerLine[i].equals("PRIMARY_ID")) //customize name
            {
                CSVReader csvreader = new CSVReader(new FileReader(csvFilename), ',', '\'', 1);
                String [] nextLine = csvreader.readNext();
                PeserAnnotation1.setPRIMARY_ID(nextLine[i]); 
            }
            else
            {
                PeserAnnotation1.setPRIMARY_ID(""); 
            }
    }
    for (int i = 0; i < headerLine.length; i++){    
            if (headerLine[i].equals("ISPY_ID")) //customize name
            {
                CSVReader csvreader = new CSVReader(new FileReader(csvFilename), ',', '\'', 1);
                String [] nextLine = csvreader.readNext();
                PeserAnnotation1.setISPY_ID(nextLine[i]); 
            }
        else
            {
                PeserAnnotation1.setISPY_ID("");
            }
    }

CSV-файл:

PRIMARY_ID, ISPY_ID, DATE, PE_FTV
205, 1207, 20050819, 8.7508545

И мой код, и файл CSV — это всего лишь примеры реальных вещей. В настоящее время код просто пропускает «если» и переходит прямо к «иначе».


person user2499705    schedule 18.08.2013    source источник
comment
не создавайте новый CsvReader в циклах for, повторно используйте уже открытый csvReader, из которого вы получили строку заголовка...   -  person Dru    schedule 18.08.2013
comment
Я сделал это изначально, чтобы пропустить первую строку с заголовками, чтобы код мог захватить все, что было в следующих строках. я удалил Csvreader в циклах, но в результате, похоже, нет никакой разницы...   -  person user2499705    schedule 18.08.2013


Ответы (3)


Вы используете == для сравнения строк. Вместо этого используйте equals(). == проверяет, ссылаются ли два выражения на один и тот же объект. Нет, если две строки содержат одни и те же символы.

person JB Nizet    schedule 20.08.2013
comment
Тогда у вас есть другие ошибки. Отредактируйте свой вопрос и вставьте обновленный код после изменений, предложенных в комментариях и в моем ответе. Покажите пример ввода, желаемый результат и результат, который вы получите. - person JB Nizet; 20.08.2013

Фактически ваш код входит в условие if.

for (int i = 0; i < headerLine.length; i++){
            if (headerLine[i].equals("PRIMARY_ID")) //customize name
            {
                System.out.println("inside PRIMARY_ID IF");
                CSVReader csvreader = new CSVReader(new FileReader(csvFilename), ',', '\'', 1);
                String [] nextLine = csvreader.readNext();

            }
            else
            {
                System.out.println("inside PRIMARY_ID ELSE");
            }
    }
    for (int i = 0; i < headerLine.length; i++){    
            if (headerLine[i].equals("ISPY_ID")) //customize name
            {
                System.out.println("inside ISPY_ID IF");
                CSVReader csvreader = new CSVReader(new FileReader(csvFilename), ',', '\'', 1);
                String [] nextLine = csvreader.readNext();

            }
        else
            {
            System.out.println("inside ISPY_ID ELSE");
            }
    }

дает мне следующий вывод

inside PRIMARY_ID IF
inside PRIMARY_ID ELSE
inside PRIMARY_ID ELSE
inside PRIMARY_ID ELSE
inside ISPY_ID ELSE
inside ISPY_ID IF
inside ISPY_ID ELSE
inside ISPY_ID ELSE
person baskar_p    schedule 29.08.2013

Чтобы решить эту проблему, я вставил break после оператора if. Без него код снова войдет в цикл, войдет в предложение else и заменит строку из оператора if на материал из else.

person user2499705    schedule 13.10.2013