Super CSV (Java) - чтение файлов с пробелами в именах столбцов - PullRequest
5 голосов
/ 29 июня 2010

Я работаю с Super CSV, и это выглядит как удивительный пакет.

Меня беспокоит только то, как работать со столбцами с пробелами в их именах.Нет, я не могу вернуться и удалить пробелы самостоятельно.Эти файлы будут переданы мне сотнями, и у меня нет времени, чтобы вернуться и исправить все 60 столбцов для каждого файла, и я не могу доверять всем остальным, чтобы сделать это правильно.

Как я могуработать со столбцами с пробелами в названии (т.е. «Имя», а не «Имя» или «Имя»)?

Спасибо!

Для примеров кодирования смотрите здесь: http://supercsv.sourceforge.net/codeExamples_general.html

Ответы [ 4 ]

5 голосов
/ 29 июня 2010

Вы заметили эту строку в примерах, на которые ссылаетесь:

final String[] header = inFile.getCSVHeader(true);

Это должно дать вам имена ваших столбцов, нет?

http://supercsv.sourceforge.net/javadoc/index.html

Мне кажется, я понимаю ваш вопрос сейчас. Аргумент String [], передаваемый в функцию read, принимает имена свойств класса, в который вы хотите прочитать. Он позиционный, поэтому его не нужно называть как заголовки. Так, например, вы можете иметь String[] header = inFile.getCSVHeader(), но затем иметь отображение headerName->propertyName, поэтому, если ваши поля заголовка были:

First Name, Last Name, Age

но ваш класс был

getFirstName(), setFirstName(...);
getLastName(), setLastName(...);
getYears(), setYears();

передать методу read не (String[]) {"First Name", "Last Name", "Age"}, как ваш заголовок, а передать read, массив (String[]) {"FirstName", "LastName", "Years"}.

2 голосов
/ 04 сентября 2015

Чтобы иметь заголовок с пробелами, разделите отображение бина и массив заголовков.

private final String[] header = new String[] { "First Name", "Last Name"}; private final String[] dataMapping = new String[] { "firstName", "lastName"}; beanWriter = new CsvBeanWriter(new FileWriter(path), CsvPreference.EXCEL_PREFERENCE); beanWriter.writeHeader(header); beanWriter.write(yourPojo, dataMapping, processors);

2 голосов
/ 29 июня 2010

Если вы хотите отобразить заголовок CSV с другим именем, вы можете создать хеш-карту и использовать ее для внутренней реализации, например, вы можете сопоставить «Имя» с «firstName» и заполнить ваш бин, основываясь на ваших внутренних именах.

1 голос
/ 01 марта 2013

Я понимаю, что это довольно старый пост, но другие могут искать альтернативное простое решение.Это то, что я сделал, чтобы убедиться, что у меня есть только названия буквенно-цифровых заголовков без пробелов:

  final String[] header = beanReader.getHeader(true);

  for(int i = 0; i <= header.length -1 ; i++ ) {
    header[i] = header[i].replaceAll("[^a-zA-Z0-9]+","");
  }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...