使用 Univocity 将 CSV 分成多个部分

Break CSV into multiple parts with 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 页面上的测试 类,但找不到类似的示例。

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

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

当行的格式发生变化时会发生什么,由您决定。您可以覆盖

public void rowProcessorSwitched(RowProcessor from, RowProcessor to) 

InputValueSwitch随心所欲

检查这些其他相关问题: