1

我有一个包含多个数据集的 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 页面上的测试类,但找不到类似的示例。

4

1 回答 1

0

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

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

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

public void rowProcessorSwitched(RowProcessor from, RowProcessor to) 

InputValueSwitch做任何你需要的事情。

检查这些其他相关问题:

Univocity - 将每个 TSV 文件行解析为不同类型的类对象

Univocity CSV 解析器在单个 CSV 中具有多行的多个 bean

在java中修改复杂的csv文件

于 2019-04-22T19:39:03.613 回答