OpenCSV и Java: метод пропускает строку при каждом запуске?

Что я пытаюсь сделать. Используя OpenCSV, напишите метод, который позволит мне получать информацию из определенного столбца в CSV. Этот CSV (на практике) будет иметь только две строки: строку заголовка и одну строку информации. Мне нужно взять определенные биты и манипулировать ими, чтобы поместить их в другой CSV (но я еще не зашел так далеко).

Проблема. Каждый раз, когда я вызываю этот метод, он перемещается вниз по строке. Пример: я ищу идентификатор продукта, и он возвращает идентификатор продукта в строке 2, что хорошо. Затем я снова запускаю его и ищу описание, и оно возвращает описание в строке 3. Не очень хорошо. Запустите его еще раз, и он найдет правильный столбец в строке 4. Опять же, нехорошо. Нужно будет смотреть только на строку 2. Мне кажется, что ответ очень прост, но я его не вижу.

public class Application {

    public static String ItemNabber(String item, CSVReader reader, String [] headerLine) throws IOException {
        String passedItem = null;

        try {

                for (int i = 0; i < headerLine.length; i++){
                    if (headerLine[i].equals(item)) //customize name
                    {
                        String [] itemFound = reader.readNext();
                        System.out.println(itemFound[i]);
                        passedItem = itemFound[i];
                        itemFound = null;



                    }

        }

            } 
        catch (FileNotFoundException e) 
            {
            // TODO Auto-generated catch block
            e.printStackTrace();
            }
            return passedItem;
    }

    public static void main(String[] args) throws IOException {
        JFileChooser chooser = new JFileChooser();
        FileNameExtensionFilter myFilter = new FileNameExtensionFilter("Text Files", "txt", "csv");
        chooser.setFileFilter(myFilter);
        int returnVal = chooser.showOpenDialog(null);
            if(returnVal == JFileChooser.APPROVE_OPTION) 
            {
           System.out.println("You chose to open this file: " +
                chooser.getSelectedFile().getAbsolutePath());
            }
            String filePath = String.format(chooser.getSelectedFile().getAbsolutePath());

            CSVReader reader = new CSVReader(new FileReader(filePath), '|');

            String [] headerLine = reader.readNext(); 
            ItemNabber("PRODID", reader, headerLine);
            ItemNabber("DESCR", reader, headerLine);

В этом примере он находит правильный PRODID, но просматривает строку вниз, чтобы найти описание.

Заранее спасибо!


person Vladimir Marenus    schedule 14.03.2014    source источник


Ответы (1)


Вы вызываете reader.readNext в функции.

Строка [] itemFound = reader.readNext();

Просто прочитайте нужную строку и передайте ее как строковый аргумент:

Строка [] headerLine = reader.readNext(); Строка [] dataLine = reader.readNext();

ItemNabber("PRODID", dataLine, headerLine); ItemNabber("DESCR", dataLine, headerLine);

person Brad    schedule 14.03.2014
comment
Я -ЗНАЛ- это было что-то простое! Спасибо, я, должно быть, слишком много думал... Я приму ответ, как только смогу. - person Vladimir Marenus; 15.03.2014