【问题标题】:Read CSV file escaping more than one character in Mulesoft读取在 Mulesoft 中转义多个字符的 CSV 文件
【发布时间】:2022-01-22 08:41:24
【问题描述】:

我有一个带有标题和这些值的 CSV 文件:

"20000160";"20000160";"177204930";"Zusammendruck ""Blumen"" nk 01.03.07";"2021";"01";"EUR";"599.000";"599,000";"599.00";"599,00 EUR";"EUR";"0.00";"0,00 EUR";"0.00";"0,00 EUR";"EUR"
"20000000";"20000000";"1013";"Einschreiben";"2021";"01";"EUR";"0.000";"0,000";"22.80";"22,80 EUR";"EUR";"0.00";"0,00 EUR";"0.00";"0,00 EUR";"EUR"
"20000000";"20000000";"1018";"Rückschein";"2021";"01";"EUR";"0.000";"0,000";"6.60";"6,60 EUR";"EUR";"0.00";"0,00 EUR";"0.00";"0,00 EUR";"EUR"
"8003325905";"8003325905";"233800118";"Prof.Services: Datenmanagement;Pauschale";"2021";"01";"EUR";"0.000";"0,000";"600.00";"600,00 EUR";"EUR";"0.00";"0,00 EUR";"108.00";"108,00 EUR";"EUR"

我将文件读取连接器配置为转义"Zusammendruck ""Blumen"" nk 01.03.07",它正在工作:

<file:read doc:name="Read CSV, Set MIME Type" doc:id="bb378f83-d0ea-4951-8253-8253953ed9e7" path="${outputCSV}" outputMimeType='application/csv; streaming=true; quote="\""; separator=";"; escape="\""' outputEncoding="UTF-8" />

但我还必须转义 ; 才能正确解析 "Prof.Services: Datenmanagement;Pauschale"。我尝试将模式配置为escape="\"|;",但收到警告:

警告 2021-12-20 16:59:34,604 [[MuleRuntime].uber.26: [测试].upload.BLOCKING @27454a45] [处理器:;事件: [eb625e31-61b5-11ec-a30d-00090ffe0001] org.mule.weave.v2.model.service.DefaultLoggingService$:选项 escape="|; 需要长度为 1 的值,但得到了 "|;。只有 第一个字符将被使用,其余的将是 忽略。

考虑到示例数据,如何正确读取和解析数据?

【问题讨论】:

  • 您在哪个版本的 Mule 上试用?是否在基本版本之上应用了每月补丁?
  • 只是mule 4.4.0,没有补丁

标签: csv escaping mule dataweave


【解决方案1】:

DataWeave 中的默认 CSV 解析器有一些限制。出于这个原因,我开发了一个基于 Apache Commons CSV 的 Mule 模块。你可以在 GitHub 上找到它:https://github.com/rbutenuth/csv-module 依赖在 Maven Central 上可用,所以你不需要自己编译。

它可以使用以下设置解析您的 CSV:

<csv:config name="Csv_Config" doc:name="Csv Config" recordSeparator="\n" withHeaderLine="false" escape="">
    <csv:columns >
        <csv:column columnName="column_01" type="TEXT" />
        <csv:column columnName="column_02" type="TEXT" />
        <!-- columnss 3 to 16 ommitted -->
        <csv:column columnName="column_17" type="TEXT" />
    </csv:columns>
</csv:config>

我使用 column_01 到 column_17 作为列名,因为我无法从内容中猜出有意义的名称。

可以通过以下设置使用 DataWeave 实现它:

application/csv separator=";",quoteValues=true,quote="\"",escape="\""

【讨论】:

    猜你喜欢
    • 2016-04-07
    • 2018-05-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-06-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多