Как читать CSV начиная с заголовка включительно в Apache Commons CSV?

Следующий подход позволяет читать с пропуском заголовка:

Iterable<CSVRecord> records = CSVFormat.EXCEL.withHeader().parse(in);

for (CSVRecord record : records) {
     //here first record is not header
}

Как я могу прочитать CSV начиная с заголовка включительно?

PS

подход:

CSVFormat.EXCEL.withHeader().withSkipHeaderRecord(false).parse(in)

не работает и имеет такое же поведение

2 ответа

Для меня все следующие записи имеют заголовок в качестве первого (используя commons-csv 1.5)

Iterable<CSVRecord> records = CSVFormat.EXCEL.parse(in);
Iterable<CSVRecord> records = CSVFormat.EXCEL.withSkipHeaderRecord().parse(in); //???
Iterable<CSVRecord> records = CSVFormat.EXCEL.withSkipHeaderRecord(false).parse(in); 
Iterable<CSVRecord> records = CSVFormat.EXCEL.withSkipHeaderRecord(true).parse(in); //???

И, как вы заявили, следующее, кажется, не имеет запись заголовка в качестве первой

Iterable<CSVRecord> records = CSVFormat.EXCEL.withHeader().parse(in); //???

Я не понимаю, почему withSkipHeaderRecord() и withSkipHeaderRecord(true) действительно включают заголовок, а withHeader() - нет; кажется противоположное поведение относительно того, что предлагают имена методов

В withHeader()сообщает синтаксическому анализатору, что файл имеет заголовок. Возможно, название метода сбивает с толку.

В withFirstRecordAsHeader() также может быть полезен.

На странице JavaDoc CSVFormat (Apache Commons CSV 1.8 API) :

Безопасная ссылка на столбцы

Если ваш источник содержит запись заголовка, вы можете упростить свой код и безопасно ссылаться на столбцы, используя withHeader(String...) без аргументов:

       CSVFormat.EXCEL.withHeader();

Это заставляет синтаксический анализатор читать первую запись и использовать ее значения в качестве имен столбцов. Затем позвоните в один изCSVRecord get метод, который принимает аргумент имени столбца String:

       String value = record.get("Col1");

Это делает ваш код невосприимчивым к изменениям порядка столбцов в CSV-файле.

Другие вопросы по тегам