【问题标题】:Break CSV into multiple parts with Univocity使用 Univocity 将 CSV 分解为多个部分
【发布时间】:2019-09-10 16:09:45
【问题描述】:

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

【问题讨论】:

    标签: csv parsing text univocity


    【解决方案1】:

    检查此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

    【讨论】:

      猜你喜欢
      • 2023-03-08
      • 1970-01-01
      • 1970-01-01
      • 2012-01-13
      • 2019-01-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-10-27
      相关资源
      最近更新 更多