0

背景:在 Talend 中,通常使用 tSplitRow 之类的方法将具有多个字段的一行映射到多行。带字段的行:

Date | Name | MorningPhone | Day Phone | EveningPhone ...可以分为:

Date | Name | Phone...并且您将始终从一行中获得 3 个结果行。


问题:如果我想要来自可变数量字段的行数怎么办?

我有一个模式:UniqueID | FieldSet其中 FieldSet 是可被九整除的列的分隔字段。如果有 45 个字段,在这个分隔列中,我想要 5 行。81 个字段 => 9 行。

我正在尝试使用 tJavaRow 来解析字段,但我不知道如何将其与 tSplitRow 结合以生成适当数量的字段。

想法?谢谢!

4

2 回答 2

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;
于 2011-11-07T19:53:06.227 回答
1

自从提出这个问题以来,Talend 已经发展起来,一个更好的方法是使用 tNormalize 组件。

在此处输入图像描述

首先,我们使用这样的文件作为输入:

pepe|123|123
juan|454|2423|34343|5454

我们使用 tFileInputRegex 组件读取此文件。我们必须定义正则表达式和模式。正则表达式将是:

"^([^|]+)\\|(.+)"

架构将是:

在此处输入图像描述

然后,我们将 tFileInputRegex 与 tNormalize 连接起来。我们将分隔符设置为:

"\\|"

最后我们根据需要使用输出。

于 2014-03-26T21:56:10.050 回答