0

我对 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注释只能应用于固定字段(假设事先知道总列数。

提前致谢。

4

1 回答 1

0

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

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

于 2017-10-12T17:00:03.653 回答