背景:在Talend中使用类似tSplitRow的内容将一行包含多个字段映射到多行。带字段的行:
Date | Name | MorningPhone | Day Phone | EveningPhone
......可以分成:
Date | Name | Phone
...并且您将始终从一行中得到3行。
问题:如果我想要来自可变数量字段的行数,该怎么办?
我有一个架构:UniqueID | FieldSet
其中FieldSet是一个可以被九整除的列的分隔字段。如果有45个字段,在此分隔列中,我想要5行。 81个字段=> 9行。
我正在尝试使用tJavaRow来解析字段,但我不知道如何将其与tSplitRow组合以生成适当数量的字段。
想法?谢谢!
答案 0 :(得分:2)
我使用了自定义tJavaRow - 这将特殊格式的字符串转换为新表。一个黑客,但它的工作。
String input = "";
String OUT = "";
try {
input = java.net.URLDecoder.decode(input_row.CustomField16, "ASCII");
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
}
String[] pieces = input.split(";");
/*for(int a=0; a<pieces.length; a++)
System.out.println("Piece "+a+"\n"+pieces[a]);*/
String[] allfields = pieces[0].split("\\|");
//System.out.println("num_full_rows="+num_full_rows);
int fieldnum=9;
int totalrows=1;
for (int i=0; i+8<allfields.length; i++) {
String xrow = allfields[i];
i++;
for (int j=i; j<fieldnum*totalrows;j++){
xrow=xrow+"\t"+allfields[j];
}
i+=fieldnum-2;
totalrows++;
OUT += (input_row.LoadTime + "\t"
+ input_row.minutepart + "\t" + input_row.TXID
+ "\t" + input_row.SessionString + "\t" + xrow + "\n");
}
output_row.BULK = OUT;
答案 1 :(得分:1)
首先,我们使用这样的文件作为输入:
pepe|123|123
juan|454|2423|34343|5454
我们使用tFileInputRegex组件读取此文件。我们必须定义正则表达式和模式。正则表达式为:
"^([^|]+)\\|(.+)"
架构将是:
然后,我们将tFileInputRegex与tNormalize连接起来。我们将分隔符设置为:
"\\|"
最后我们根据需要使用输出。