2015-06-12 3 views
2

У меня есть файл csv с заголовками в порядке fname, mname, lname и парсер csv, чтобы разобрать это. Я читаю файл строки за строкой и разбиваю на делитель («,»), и в соответствии с индексом я получаю значения 0 = fname, 1 = mname, 2 = lname.Общий синтаксический анализатор csv в java

Теперь, если csv поставляется с заголовками в порядке lname, fname и mname, я должен снова изменить код. Я хочу написать общий синтаксический анализатор, который независимо от порядка заголовка сохраняет значение в соответствующих полях. Какие-либо предложения?

+1

быстрый способ взломать, вы читаете заголовок к '' Список_массивов читать построчно .. когда вы посмотрите на 'fname', получить индекс его от ArrayList, то вы будете знать, индекс сохраненных данных. Агиан, это просто хак. Лично создайте себе объект для каждой строки с соответствующими заголовками в качестве вашей сделки с каждой строкой. –

ответ

3

Предлагаю не писать общий парсер и использовать Apache Commons CSV.

Как вы не знаете порядок столбцов, используйте CSVFormat, как описано в документации:

REFERENCING колонн безопасно

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

CSVFormat.EXCEL.withHeader();

Это приводит к тому, что анализатор считывает первую запись и использует ее значения как имена столбцов . Затем вызовите один из метода CSVRecord ПОЛУЧИТЬ, который принимает Струнного имя столбца аргумента:

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

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

+0

Я прошел через это, но я думаю, что даже в этом мы должны сначала объявить CSVFormat, я имею в виду порядок заголовков. Я не хочу объявлять об этом, так как я не знаю, в каком порядке появятся поля. Я знаю только поля. Любой другой вариант? –

+1

'CSVFormat' точно позволяет вам ссылаться на колонки, не зная их порядка. См. Мое редактирование. – Zim