2013-04-24 33 views
1

我正在編寫水壺轉換。在一行中處理具有多個名稱值對的輸入文件

我輸入文件看起來像下面

sessionId=40936a7c-8af9|txId=40936a7d-8af9-11e|field3=val3|field4=val4|field5=myapp|field6=03/12/13 15:13:34| 

現在,我要如何處理此文件?我完全不知所措。

第一步是CSV與|文件輸入作爲定界符

我的分析將基於名稱值對的「價值」的一部分。

有沒有人處理過這樣的文件?

+0

這可能是有用的通過一個簡單的命令行工具來剝離「字段名=」部分出到運行該文件。如果你的文件在unix機器上,一套'sed'命令可以解決這個問題。雖然我不知道水壺,所以我不能回答當前的問題。有沒有辦法設置多個分隔符(|和=)?然後,你可以看看字段2,4,6,8等... – 2013-04-24 20:51:00

+2

我對水壺一無所知,但[示例2](http://wiki.pentaho.com/display/EAI/Field+Splitter)在Field Splitter的文檔中使用的數據格式與您的格式完全相同。否則,由於@NWest建議只使用腳本以某種方式預處理數據。但希望有一個真正瞭解水壺的人能夠提出具體的解決方案。 – Pondlife 2013-04-24 21:01:06

+0

這工作。啊!!!沒有經過實例的壞習慣。 – 2013-04-26 10:31:49

回答

2

既然你已經分裂記錄爲「鍵=值」的領域,你可以使用表達式轉換成繩剪斷成兩個通過定位=字符的位置,並創建兩個輸出端口,其中一個是關鍵和其他的價值。
從那裏它取決於你想要對信息做什麼,如果你想將它們存儲爲鍵/值,它們通過聯合來存儲它們,或者使用路由器轉換將它們發送到不同的目標。

她是分裂對錶達式的例子: enter image description here

1

你可以使用改性JavaScript值步驟,與管道這個分組後添加此步驟。

現在做一些解析的javascript這樣的:

var mainArr = new Array(); 
var sessionIdSplit = sessionId.toString().split("|"); 

for(y = 0; y < sessionIdSplit.length; y++){ 
mainArr[y] = sessionIdSplit[y].toString(); 

    //here you can add another loop to parse again and split the key=value 

} 

Alert("mainArr: "+ mainArr); 
相關問題