【问题标题】:Camel CSVRecord Camel BindyCamel CSVRecord Camel Bindy
【发布时间】:2015-10-29 22:16:56
【问题描述】:

我正在使用带有 bindy (2.16.0) 的骆驼来解析 csv 文件。该文件包含页眉和页脚。两者都用作元数据来描述所有其他记录的公共数据。 (客户定义,所以我无法更改 CSV 格式)

我正在使用 Bindy 为我解析数据。我遇到的问题是,对于 CSVRecord,您不能排除页脚。我可以跳过页眉,但数据解析失败,因为它无法解析页脚,因为数据格式不同。

有没有办法从 CSVRecord 绑定中排除最后一行/页脚,或者可能有骆驼读取并以另一种方式删除最后一行?

【问题讨论】:

    标签: java apache-camel bindy


    【解决方案1】:

    不,目前在 bindy 中不支持此功能。在您的情况下,页脚是否只有一行?或者它是否有任何特殊的前导标记来指示它的页脚?

    我们也许可以改进 bindy 以支持跳过页脚。因此,默认情况下,页脚可能只是最后一行。但只是想知道人们是否可以将多行作为页脚?

    在使用 bindy 解析它之前,您需要自己手动删除最后一行。如果文件不大,并且您可以将它放在内存中,您可以使用 Camel 处理器/bean 并从消息正文中删除最后一行。

    【讨论】:

    • 它确实有第一列作为数据的描述符,即 F 表示页脚,H 表示页眉,D 表示数据。就我而言,页脚只有 1 行。页脚仅说明整个数据集中有多少条记录。我假设您只需要一行作为页脚。我认为如果 bindy 可以解析页眉信息和页脚信息并提供对这些信息的访问权限,那将非常有帮助。看来这就是 fixedLengthRecord 的工作方式。虽然,可能有页脚和页眉超出了 csv 文件的构建方式。
    • 是的,有很多不同的方法可以做到这一点。所以也许 bindy 需要一个 spi 插件,您可以在其中配置什么是页眉、数据和页脚。所以你可以做 isHeader(line) => line.startsWith("H,") ... 等等
    【解决方案2】:

    您可以考虑另一种解决方案:

    • 从客户那里获取 csv
    • 通过清理步骤预处理 csv:解析 header/fooder 并将其排除在外。但收集常用参数,以便丰富其他对象。
    • 通过bindy解析剩下的“干净的csv”,然后用通用的页眉/页脚进行丰富

    【讨论】:

      猜你喜欢
      • 2022-01-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-10
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多