【问题标题】:Mule - how to pad rows in a CSV file with extra delimitersMule - 如何使用额外的分隔符填充 CSV 文件中的行
【发布时间】:2014-06-08 10:22:25
【问题描述】:

我的 Mule 应用程序中有一个 CSV 文件,如下所示:

1,Item,Item,Item
2,Field,Field,Field,Field
2,Field,Field,Field,Field
3,Text

有没有办法可以将 Mule 中的这个文件转换为如下内容:

1,Item,Item,Item,,,,,,
2,Field,Field,Field,Field,,,,,
2,Field,Field,Field,Field,,,,,
3,Text,,,,,,,,

基本上,我在这里需要做的是在每一行的末尾附加一个字符串(包含 x 次出现的分隔符)。我需要附加到每一行的分隔符的数量可以由该行的第一个字符确定,例如if row[0]='1' then (append ",,,,,,") else if row[0]='2' then (append ",,,,,"etc.

我遇到这个相当烦人的问题的原因是,为我的 Mule 应用程序提供输入的系统会生成一个文件,其中每行中的列数可能会有所不同。我正在尝试填充此文件,以使每行中的列数相等,以便我可以将其传递给 Java 转换器,如使用 FlatPack 解释的here (期望 x 列,它不会接受每行中列数不同的文件)。

有人对我如何解决这个问题有任何想法吗?提前致谢。

更新

根据@Learner 的建议和@EdC 的回答 - 我在 Mule 中使用以下方法实现了这一点:

<flow name="testFlow1" doc:name="testFlow1">
    <file:inbound-endpoint .../>
    <file:file-to-string-transformer doc:name="File to String"/>
    <component doc:name="Java" class="package.etc.etc.MalformData"/>
</flow>

【问题讨论】:

    标签: csv append mule delimiter mule-studio


    【解决方案1】:

    根据@Learner 的回答试试这个。

    import org.mule.api.MuleEventContext;
    import org.mule.api.MuleMessage;
    
    public class MalformData implements org.mule.api.lifecycle.Callable {
      private String[] strTempArray;
    
      public String findMalformRow(String strInput) {
        String strOutput = "";
        String strFix = "";
        int intArrayLength = 0;
        char charFirst = ' ';
        String strControl = "";
        strTempArray = strInput.split("\\n");
        intArrayLength = strTempArray.length;
        for (int i = 0; i < intArrayLength; i++) {
            charFirst = strTempArray[i].charAt(0);
            strFix = strTempArray[i];
            String missingDelimiter = "";
    
            if (charFirst == '1') {
                missingDelimiter = ",,,,,,";
                strFix += missingDelimiter;
            } else if (charFirst == '2') {
                missingDelimiter = ",,,,,";
                strFix += missingDelimiter;
            } else if (charFirst == '3') {
                missingDelimiter = ",,,,,,,,";
                strFix += missingDelimiter;
            } else {
                strFix = "Good";
            }
    
            if (strControl != "Good") {
                strTempArray[i] = strFix;
            } else {
                charFirst = ' ';
                strFix = "";
            }
        }
    
        for(int i=0; i < intArrayLength; i++){
            strOutput += strTempArray[i] + "\n";
        }
    
        return strOutput;
    }
    
    @Override
      public Object onCall(MuleEventContext eventContext) throws Exception {
        MuleMessage message = eventContext.getMessage();
        String newPayload = this.findMalformRow(message.getPayloadAsString());
        message.setPayload(newPayload);
        return message;
      }
    }
    

    【讨论】:

      【解决方案2】:

      您可以编写一个自定义 java 组件,逐行读取您的 CSV 文件,写入另一个文件并根据您的逻辑在每行末尾添加 ,

      【讨论】:

        猜你喜欢
        • 2021-06-25
        • 2018-07-12
        • 2012-04-26
        • 1970-01-01
        • 2014-07-27
        • 2020-11-09
        • 2014-08-14
        • 2017-12-28
        相关资源
        最近更新 更多