Camel:使用BindyCSVFormat处理CSV文件中的动态列

时间:2017-10-12 14:16:38

标签: java apache-camel bindy

我是Apache Camel的新手。

我一直在编写使用BindyCsvformat类处理csv文件的路由。到目前为止,我处理的CSV文件非常简单,因为它们具有固定数量的记录。 因此,使用@DataField注释来定义列的位置不是问题。

但是,我遇到了一个CSV文件,其中列数是动态的。此CSV文件仅包含1行。

根据名为'句点数的列的值,列号是动态的。

如果期间的数量为'列是' 5',然后有5个额外的列添加到文件中。

以下是此特定CSV文件中标题的示例:

样品csv.txt

row_id, number_of_periods, result_period, result_period, result_period 0,3,0.00,10.00,10.00.

从上面的示例数据中可以看出,因为' number_of_periods'栏目显示' 3',有三个' result_period'列。 如果' number_of_periods'字段是5,然后会有5' result_period'列。

任何人都可以帮助(或指向任何引用)BindyCsvFormat(通过Camel)可以处理此动态列映射吗?除非我弄错了,否则我认为@DataField注释只能应用于固定字段(假设列的总数是预先知道的。

提前致谢。

1 个答案:

答案 0 :(得分:0)

是的,对于固定字段,但是有一个选项可以让最后一个字段溢出,只需抓住该行的其余部分。

在您的用例中,您最好不要使用Bindy,只需编写自己的一些CSV解析器代码。自己也不难做到这一点。然后,您仍然可以在Apache Camel中使用CSV解析器,并使用解析器对每行进行消息转换。解析器只能作为java方法实现。