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

时间:2018-08-16 17:13:50

标签: java csv parsing univocity

提供以下课程

public class Inventory {
    private InventoryHeader header;
    private List<InventoryLine> lines;
}

public class InventoryHeader {
    private String date;
    private boolean isCurrent;
}


public class InventoryLine {
    private String itemName;
    private int quantity;
}

和以下CSV(使用','作为分隔符,但为了便于查看,我在此处使用了空格):

IH    2007-06-05    false
IL    Watch         7
IL    Flower Pot    9
IL    Chicken Wing  29
IH    2010-07-30    true
IL    Cable         200
IL    Fish Tank     87

在这种情况下,“ IH”表示此行是库存标头,而“ IL”表示它是库存行。库存标题后的库存行仅与该库存有关。库存对象的结尾用新的库存标题行或文件的结尾表示。

我想将其解析为一个列表。解析单个Inventory对象非常简单,只需在第0列上添加ValueSwitch,为InventoryHeader和InventoryLine创建BeanListProcessor,然后将结果添加到新的Inventory对象中即可。

使用上述方法,我们将获得标题和行的列表,但是如何知道哪些行与哪些标题相对应?

1 个答案:

答案 0 :(得分:0)

此处是库的作者。检查this example,因为它似乎与您的情况非常相似。

您需要重写rowProcessorSwitched的{​​{1}}方法,以了解解析器何时开始处理其他行格式。

类似这样的东西:

InputValueSwitch

希望这会有所帮助。