2011-10-27 33 views
0

背景:在Talend中使用類似tSplitRow的東西將包含多個字段的行分成多行是很常見的。與字段的行:Talend - 一行到多行,可變數量的輸出行

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

Date | Name | Phone ...你將永遠有從一行3個結果行。


問:如果我想從字段的變量數列的數是什麼?

我有一個架構:UniqueID | FieldSet其中FieldSet是一個可以被九整除的分隔字段。如果有45個字段,則在此分隔列中,我需要5行。 81場=> 9行。

我想使用tJavaRow解析字段,但我不知道如何將它與tSplitRow結合來生成適當數量的字段。

想法?謝謝!

回答

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; 
+0

想不到更好的方法來做到這一點。 – drmirror

+0

此方法已棄用。請參閱下面的答案 –

1

Talend自這個問題出現以來就有了進步,而做這件事的更好方法是使用tNormalize組件。

enter image description here

首先,我們使用一個文件中像這樣輸入:

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

我們讀取使用tFileInputRegex組件文件。我們必須定義正則表達式和模式。正則表達式是:

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

的模式將是:

enter image description here

然後,我們用tNormalize連接tFileInputRegex。我們將分隔符設置爲:

"\\|" 

最後我們根據需要使用輸出。

相關問題