通过Univocity将CSV分为多个部分

时间:2019-04-20 21:31:31

标签: csv parsing text univocity

我有一个包含多个数据集的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 :(得分:0)

选中此example。基本上,您需要使用针对第一列的InputValueSwitch。为“ FIELD1”添加一个开关,为“ Field4”添加另一个,为“ SUBFIELD”添加另一个。您需要使用以下方法将不同的处理器与每种可能的行类型相关联:

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

由您决定行格式更改时会发生什么。您可以覆盖

public void rowProcessorSwitched(RowProcessor from, RowProcessor to) 

InputValueSwitch中,您可以做任何所需的事情。

请检查以下其他相关问题:

Univocity - parse each TSV file row to different Type of class object

Univocity CSV parser multiple beans with multiple rows in single CSV

Modifying complex csv files in java