Разбейте CSV на несколько частей с Univocity - PullRequest
1 голос
/ 21 апреля 2019

У меня есть CSV с несколькими наборами данных. Например,

FIELD1, 10, FIELD2, 20, FIELD3, 30 // dataset1 begins here
FIELD4, 40, FIELD5, 50 // line 2 of dataset1
SUBFIELD1_ROW1, 100, SUBFIELD2_ROW1, 200 // subsection of dataset1: line1
SUBFIELD1_ROW2, 300, SUBFIELD2_ROW2, 400 // subsection of dataset1: line2
SUBFIELD1_ROW3, 500, SUBFIELD2_ROW3, 600 // subsection of dataset1: line3
FIELD1, 10, FIELD2, 20, FIELD3, 30 // dataset2 begins here
FIELD4, 40, FIELD5, 50 // line 2 of dataset2
SUBFIELD1_ROW1, 100, SUBFIELD2_ROW1, 200 // subsection of dataset2: line1
SUBFIELD1_ROW2, 300, SUBFIELD2_ROW2, 400 // subsection of dataset2: line2
SUBFIELD1_ROW3, 500, SUBFIELD2_ROW3, 600 // subsection of dataset2: line3
// dataset 3
// dataset 4 and so on

Можно ли разбить этот CSV на 4 части (по одной для каждого набора данных)? Я просмотрел тестовые классы на странице Univocity GitHub, но не смог найти похожий пример.

1 Ответ

0 голосов
/ 22 апреля 2019

Проверьте это пример . В основном вам нужно использовать InputValueSwitch, который нацелен на первый столбец. Добавьте переключатель для «FIELD1», другой для «Field4» и еще один для «SUBFIELD». Вам необходимо связать разные процессоры с каждым возможным типом строки, используя:

inputSwitch.addSwitchForValue(<your column matcher>, processorForRowWhereMatcherReturnsTrue);

Что произойдет, когда формат строки изменится, решать вам. Вы можете переопределить

public void rowProcessorSwitched(RowProcessor from, RowProcessor to) 

Из InputValueSwitch делать все, что вам нужно.

Проверьте эти другие связанные вопросы:

Univocity - разбирать каждую строку файла TSV на разные типы объектов класса

Анализатор Univocity CSV, несколько компонентов с несколькими строками в одном CSV

Изменение сложных CSV-файлов в Java

...