Как игнорировать запись в последней строке CSV-файла с помощью Apache Commons CSV java?

Я использую Apache Commons CSV для чтения файла CSV. В файле есть информация о самом файле (дата и время создания) в последней строке.

|XXXX                                |XXXXX|XXXXX|XXXX|
|XXXX                                |XXXXX|XXXXX|XXXX|
|File generation: 21/01/2019 17.34.00|     |     |    |

Итак, при разборе файла я получаю это как запись (очевидно). Мне интересно, есть ли способ избавиться от этого при синтаксическом анализе, и есть ли у Apache Commons CSV какое-либо средство для его обработки.


person Aravinthsamy Sekar    schedule 14.03.2019    source источник
comment
Можете ли вы поделиться кодом, который вы написали?   -  person Sujit kumar    schedule 14.03.2019
comment
вы можете проверить records.size() из CSVParser и выполнить цикл size()-1   -  person IMParasharG    schedule 14.03.2019


Ответы (2)


Это цикл while, и вы не узнаете, когда доберетесь до конца, пока не дойдете до конца. У вас есть два варианта:

  • Плохой вариант: прочитайте его один раз и подсчитайте количество строк, а затем, когда вы прочитаете его во второй раз, вы можете break выполнить цикл, когда достигнете (счетчик-1) строки.
  • Хороший вариант: кажется, что ваши файлы разделены конвейером, поэтому, когда вы обрабатываете строку за строкой, просто убедитесь, что line.trim().spit("|").length() > 1 или, в вашем случае, выполняет некоторую работу, пока количество записей в строке больше 1. Это гарантирует, что вы не применяйте свою логику к строкам только с одним столбцом, который оказывается вашей последней строкой, также известной как нижний колонтитул.

Пример взят из Apache commons и немного изменен

Reader in = new FileReader("path/to/file.csv");
Iterable<CSVRecord> records = CSVFormat.RFC4180.parse(in);
for (CSVRecord record : records) {
    //all lines except the last will result greater than 1
    if (record.size() > 1){ 
        //do your work here 
        String columnOne = record.get(0);
        String columnTwo = record.get(1);
    } 
}
person Lawrence Khan    schedule 14.03.2019

Apache Commons CSV предоставляет функцию для игнорирования заголовка (https://commons.apache.org/proper/commons-csv/apidocs/org/apache/commons/csv/CSVFormat.html#withSkipHeaderRecord--), но не предложите решение, чтобы игнорировать footer. Но вы можете просто получить все записи, кроме последней, вручную проигнорировав последнюю запись.

person Marvin Klar    schedule 14.03.2019