首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Mule -如何使用额外的分隔符在CSV文件中填充行

Mule -如何使用额外的分隔符在CSV文件中填充行
EN

Stack Overflow用户
提问于 2014-04-23 14:03:33
回答 2查看 867关注 0票数 0

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

代码语言:javascript
复制
1,Item,Item,Item
2,Field,Field,Field,Field
2,Field,Field,Field,Field
3,Text

是否有办法将Mule中的这个文件转换为如下所示:

代码语言:javascript
复制
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 ",,,,,"等。

我之所以有这个相当恼人的问题,是因为向我的Mule应用程序提供输入的系统生成了一个文件,其中每行的列数可能有所不同。我正在尝试填充这个文件,这样每一行中的列数是相等的,这样我就可以将它传递给一个使用FlatPack的解释过的FlatPack转换器(它希望使用x列,它不会接受每一行中有不同数量列的文件)。

有没有人知道我怎么处理这件事?提前谢谢。

更新

基于@Learner的建议和@EdC的回答,我在Mule中实现了以下目标:

代码语言:javascript
复制
<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>
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-04-24 09:12:18

试试这个基于@Learner的答案。

代码语言:javascript
复制
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
EN

Stack Overflow用户

发布于 2014-04-23 17:56:52

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

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/23246772

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档