0

我有一個逗號分隔的源平面文件,文件具有開始日期和結束日期的標題,下一行包含所有提交的名稱並繼續源文件的數據 例如:以逗號分隔的源文件,然後使用java轉換來分割行

"2015-05-09","2015-06-05"                                                                                                                                                                                                                          
"CARRIER ","CONTRACT   ","ELGBL/GRP   ","     ","TOTAL FEES","TOTAL FEES  ","PMPM ACA ","PMPM ACA ","RETAIL  ","RETAIL  ","MEDICAID ","MEDICAID ","STATE ","STATE ","MAIL SERVICE","MAIL SERVICE","RETAIL  ","RETAIL  ","POSTAGE - ","POSTAGE - ","SYSTEM  ","SYSTEM  ","SYSTEM  ","SYSTEM  ","SYSTEM  ","SYSTEM  ","SYSTEM  ","SYSTEM  ","SYSTEM  ","SYSTEM  ","SYSTEM  ","SYSTEM  ","SYSTEM  ","SYSTEM  ","SYSTEM  ","SYSTEM  ","OTHER  ","OTHER  ","   ","   ","   ","   ","   ","   ","   ","   ","   ","   ","   ","   ","   ","   ","   ","   ","   ","   ","   ","   ","   
"  ","     ","     ","     ","COUNT  ","AMOUNT   ","METAL  ","METAL  ","DIRECTS  ","DIRECTS  ","   ","   ","HEALTH  ","HEALTH  ","CLAIMS  ","CLAIMS  ","PHARMACY ","PHARMACY ","BULK  ","BULK  ","MCRCF  ","MCRCF  ","MCRCP  ","MCRCP  ","MPA   ","MPA   ","MRXC  ","MRXC  ","PPACA  ","PPACA  ","QPC   ","QPC   ","RXSEL  ","RXSEL  ","SPCR  ","SPCR  ","COUNT  ","AMOUNT  ","   ","   ","   ","   ","   ","   ","   ","   ","   ","   ","   ","   ","   ","   ","   ","   ","   ","   ","   ","   ","   
"  ","     ","     ","     ","   ","    ","COUNT  ","AMOUNT  ","COUNT  ","AMOUNT  ","COUNT  ","AMOUNT  ","COUNT  ","AMOUNT  ","COUNT  ","AMOUNT  ","COUNT  ","AMOUNT  ","COUNT  ","AMOUNT  ","COUNT  ","AMOUNT  ","COUNT  ","AMOUNT  ","COUNT  ","AMOUNT  ","COUNT  ","AMOUNT  ","COUNT  ","AMOUNT  ","COUNT  ","AMOUNT  ","COUNT  ","AMOUNT  ","COUNT  ","AMOUNT  ","   ","   ","   ","   ","   ","   ","   ","   ","   ","   ","   ","   ","   ","   ","   ","   ","   ","   ","   ","   ","   ","   ","   
"1234 ","ABCD5678   ","ABCOEFITEST1  ","     ","   1","   1.60","  1","   1.60","  0","   0.00","  0","   0.00","  0","   0.00","  0","   0.00","  0","   0.00","  0","   0.00","  0","   0.00","  0","   0.00","  0","   0.00","  0","   0.00","  0","   0.00","  0","   0.00","  0","   0.00","  0","   0.00","  0","   0.00","  0","   0.00","  0","   0.00","  0","   0.00","  0","   0.00","  0","   0.00","  0","   0.00","  0","   0.00","  0","   0.00","  0","   0.00","  0","   0.00","  0","   0.00","  
"1234 ","ABCD5678   ","ABC200074002  ","     ","   6","   3.20","  2","   3.20","  0","   0.00","  0","   0.00","  0","   0.00","  0","   0.00","  4","   0.00","  0","   0.00","  0","   0.00","  0","   0.00","  0","   0.00","  0","   0.00","  0","   0.00","  0","   0.00","  0","   0.00","  0","   0.00","  0","   0.00","  0","   0.00","  0","   0.00","  0","   0.00","  0","   0.00","  0","   0.00","  0","   0.00","  0","   0.00","  0","   0.00","  0","   0.00","  0","   0.00","  0","   0.00","  
"1234 ","ABCD5678   ","ABC200178002  ","     ","   2","   1.60","  1","   1.60","  0","   0.00","  0","   0.00","  0","   0.00","  0","   0.00","  1","   0.00","  0","   0.00","  0","   0.00","  0","   0.00","  0","   0.00","  0","   0.00","  0","   0.00","  0","   0.00","  0","   0.00","  0","   0.00","  0","   0.00","  0","   0.00","  0","   0.00","  0","   0.00","  0","   0.00","  0","   0.00","  0","   0.00","  0","   0.00","  0","   0.00","  0","   0.00","  0","   0.00","  0","   0.00","  
"1234 ","ABCD5678   ","ABC200197001  ","     ","   1","   1.60","  1","   1.60","  0","   0.00","  0","   0.00","  0","   0.00","  0","   0.00","  0","   0.00","  0","   0.00","  0","   0.00","  0","   0.00","  0","   0.00","  0","   0.00","  0","   0.00","  0","   0.00","  0","   0.00","  0","   0.00","  0","   0.00","  0","   0.00","  0","   0.00","  0","   0.00","  0","   0.00","  0","   0.00","  0","   0.00","  0","   0.00","  0","   0.00","  0","   0.00","  0","   0.00","  0","   0.00","  
"1234 ","ABCD5678   ","ABC200204002  ","     ","   2","   3.20","  2","   3.20","  0","   0.00","  0","   0.00","  0","   0.00","  0","   0.00","  0","   0.00","  0","   0.00","  0","   0.00","  0","   0.00","  0","   0.00","  0","   0.00","  0","   0.00","  0","   0.00","  0","   0.00","  0","   0.00","  0","   0.00","  0","   0.00","  0","   0.00","  0","   0.00","  0","   0.00","  0","   0.00","  0","   0.00","  0","   0.00","  0","   0.00","  0","   0.00","  0","   0.00","  0","   0.00","  
"1234 ","ABCD5678   ","ABC200204003  ","     ","   2","   3.20","  2","   3.20","  0","   0.00","  0","   0.00","  0","   0.00","  0","   0.00","  0","   0.00","  0","   0.00","  0","   0.00","  0","   0.00","  0","   0.00","  0","   0.00","  0","   0.00","  0","   0.00","  0","   0.00","  0","   0.00","  0","   0.00","  0","   0.00","  0","   0.00","  0","   0.00","  0","   0.00","  0","   0.00","  0","   0.00","  0","   0.00","  0","   0.00","  0","   0.00","  0","   0.00","  0","   0.00","  
"1234 ","ABCD5678   ","ABC200232002  ","     ","   4","   1.60","  1","   1.60","  0","   0.00","  0","   0.00","  0","   0.00","  0","   0.00","  3","   0.00","  0","   0.00","  0","   0.00","  0","   0.00","  0","   0.00","  0","   0.00","  0","   0.00","  0","   0.00","  0","   0.00","  0","   0.00","  0","   0.00","  0","   0.00","  0","   0.00","  0","   0.00","  0","   0.00","  0","   0.00","  0","   0.00","  0","   0.00","  0","   0.00","  0","   0.00","  0","   0.00","  0","   0.00","  
"1234 ","ABCD5678   ","ABC200300001  ","     ","   7","   1.60","  1","   1.60","  0","   0.00","  0","   0.00","  0","   0.00","  0","   0.00","  6","   0.00","  0","   0.00","  0","   0.00","  0","   0.00","  0","   0.00","  0","   0.00","  0","   0.00","  0","   0.00","  0","   0.00","  0","   0.00","  0","   0.00","  0","   0.00","  0","   0.00","  0","   0.00","  0","   0.00","  0","   0.00","  0","   0.00","  0","   0.00","  0","   0.00","  0","   0.00","  0","   0.00","  0","   0.00","  
"1234 ","ABCD5678   ","ABC200345002  ","     ","   1","   1.60","  1","   1.60","  0","   0.00","  0","   0.00","  0","   0.00","  0","   0.00","  0","   0.00","  0","   0.00","  0","   0.00","  0","   0.00","  0","   0.00","  0","   0.00","  0","   0.00","  0","   0.00","  0","   0.00","  0","   0.00","  0","   0.00","  0","   0.00","  0","   0.00","  0","   0.00","  0","   0.00","  0","   0.00","  0","   0.00","  0","   0.00","  0","   0.00","  0","   0.00","  0","   0.00","  0","   0.00","  
"1234 ","ABCD5678   ","ABC200414001  ","     ","   9","   3.20","  2","   3.20","  0","   0.00","  0","   0.00","  0","   0.00","  0","   0.00","  7","   0.00","  0","   0.00","  0","   0.00","  0","   0.00","  0","   0.00","  0","   0.00","  0","   0.00","  0","   0.00","  0","   0.00","  0","   0.00","  0","   0.00","  0","   0.00","  0","   0.00","  0","   0.00","  0","   0.00","  0","   0.00","  0","   0.00","  0","   0.00","  0","   0.00","  0","   0.00","  0","   0.00","  0","   0.00","  
"1234 ","ABCD5678   ","ABC200491003  ","     ","   1","   1.60","  1","   1.60","  0","   0.00","  0","   0.00","  0","   0.00","  0","   0.00","  0","   0.00","  0","   0.00","  0","   0.00","  0","   0.00","  0","   0.00","  0","   0.00","  0","   0.00","  0","   0.00","  0","   0.00","  0","   0.00","  0","   0.00","  0","   0.00","  0","   0.00","  0","   0.00","  0","   0.00","  0","   0.00","  0","   0.00","  0","   0.00","  0","   0.00","  0","   0.00","  0","   0.00","  0","   0.00"," 

所以現在我與1000精密閱讀它作爲一個長字符串,然後我想用Java轉換,並將它們與在多個標題蔓延列名,和準分裂他們與下面的值。一個輸入行將着陸許多目標行。

第一件事:逐行讀取文件到一個長串端口。

將「CurrentlyProcessedFileName」端口添加到源以捕獲文件名。
計算讀取的行數

在逗號分隔行 - 我該如何實現?猜測表達式或Java轉換和下面的整個過程在Java中或我可以使用SP,BU如何分割行上的逗號?

If Current RowNumber = 1 Then  
     vINVC_BGN_DT := field1 
     vINVC_END_DT := field2 

    If Current RowNumber > 1 
     If field1 != $$CARRIER Then 
    NAME1 := NAME1 || field1 #Initialize NAME variables to an empty string 
    NAME2 := NAME2 || field2 
    NAME3 := NAME3 || field3 #repeat for each comma seperated field 
     If field1 = $$CARRIER Then 
    VALUE1 := field1 
    VALUE2 := field2 
    VALUE3 := field3   #repeat for each comma seperated field 

對於每個源行,輸出行的數量應等於不同Amount_types的計數,(不包括空的)

For i in NAME4.NAMEx loop 
     if NAMEi is not spaces or null then generate row 
      target.INVC_TYPE = "CLAIM" 
      target.FILE_RECEIPT_SK 
      target.CARRIER := VALUE1 
      target.CNTRCT := VALUE2 
      target.PBM_GROUP := VALUE3 
      target.INVC_BGN_DT := vINVC_BGN_DT #From row1 
      target.INVC_END_DT := vINVC_END_DT #From row1 
      target.INVC_AMOUNT_TYPE := NAMEi 
      target.INVC_AMOUNT := VALUEi 
    end i loop.. 

回答

0

可以使用歸一化到一個行分成多行。你的情況,你必須分開處理第一行,接下來的3個標題行和數據行。爲此,在使用變量的表達式中創建seq否。

您可以在表達式本身中獲取開始日期和結束日期:例如,

begin_date:= iif(seq=1, field1, begin_date) 

對於分離該標題行和數據行,請使用條件柔兒像seq>1 && seq<=4seq>4

現在你可以使用一個歸一化於行拆分爲多個行。對於數據行,爲載體,合約,pbm_group,計數和金額創建5列,並將計數和金額的發生設置爲總數。或計數或金額欄。

您可以對標題列同樣使用另一個標準化程序。最後使用joiner轉換連接兩個流。

您也可以使用java轉換,在輸入行選項卡上,您已寫入類似的邏輯。爲了分割行,你可以使用split方法。例如:

String[] fields=row.split(","); 

現在陣列fields將包含所有字段的數組元素。您可以將適當的元素分配給輸出端口,並調用Informatica的generateRow()方法來創建目標記錄。

+0

感謝您輸入smack,我想使用java轉換,所以這裏是我用來分割逗號分隔的行的代碼。String [] str = Col1.split(「,」); (int i = 0; i kiran

+0

是的,你正朝着正確的方向前進。由於前三個字段對於所有行都是通用的,因此您不必將其放入for循環中。你可以使用str [0],str [1]和str [2]。從3運行for循環以第2步結束以獲取金額。 – Samik

+0

Samik,我的問題是我用逗號分割文件後,我需要做的第一件事是找到字符串的長度如何編寫代碼當前RowNumber = 1然後 vINVC_BGN_DT:= field1 vINVC_END_DT:= field2 你能告訴我一個例子在Java請 – kiran