我的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 ",,,,,"等。
我之所以有这个相当恼人的问题,是因为向我的Mule应用程序提供输入的系统生成了一个文件,其中每行的列数可能有所不同。我正在尝试填充这个文件,这样每一行中的列数是相等的,这样我就可以将它传递给一个使用FlatPack的解释过的FlatPack转换器(它希望使用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>发布于 2014-04-24 09:12:18
试试这个基于@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;
}
}发布于 2014-04-23 17:56:52
您可以编写一个自定义java组件,它逐行读取CSV文件,写入另一个文件,并根据每行末尾的逻辑添加,。
https://stackoverflow.com/questions/23246772
复制相似问题