0

J'ai un fichier source avec virgule séparée, le fichier a en-tête avec date de début et de fin, la ligne suivante a tous les noms de fichiers et a continué avec le données exemple de fichier source:fichier source avec virgule, puis utiliser la transformation java pour diviser les lignes

"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"," 

maintenant je lis comme une longue chaîne avec 1000 précision et je veux utiliser Java transformation et les diviser avec les noms de colonnes qui sont réparties sur en-tête multiples, et associé eux avec les valeurs ci-dessous. Une ligne d'entrée atteindra autant de lignes cibles. Première chose: lire le fichier ligne par ligne dans un port de chaîne longue.

Ajoutez le port "CurrentProcessedFileName" à la source pour capturer le nom de fichier.
Comptez le nombre de lignes lues

Divisez la ligne par des virgules - comment puis-je implémenter ceci? deviner l'expression ou la transformation java et le processus ci-dessous dans java ou puis-je utiliser SP, bu comment je diviser la ligne sur les virgules?

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 

Pour chaque ligne source, le nombre de lignes de sortie doit être égal au nombre de Amount_types distincts, (sauf vides)

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.. 

Répondre

0

Vous pouvez utiliser un normalisateur pour diviser une ligne en plusieurs lignes. Dans votre cas, vous devez traiter séparément la première ligne, les trois lignes d'en-tête suivantes et les lignes de données. Pour cela créez un seq non dans une expression en utilisant une variable.

Vous pouvez obtenir la date de début et de fin dans l'expression elle-même: Ex.

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

Pour les lignes seperating d'en-tête et les lignes de données, utilisez un rouer avec des conditions comme seq>1 && seq<=4 et seq>4

Maintenant, vous pouvez utiliser un normalisateur pour diviser la ligne en plusieurs lignes. Pour les lignes de données, créez 5 colonnes pour carrier, contract, pbm_group, count et amount et réglez l'occurrence count et amount sur le total. ou compte ou montant des colonnes.

Vous pouvez également utiliser un autre normaliseur pour les colonnes d'en-tête. Enfin, joignez les deux flux en utilisant la transformation joiner.

Vous pouvez également utiliser une transformation java, dans l'onglet de la ligne d'entrée, vous avez écrit une logique similaire. Pour fractionner la ligne, vous pouvez utiliser la méthode split. Ex:

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

Maintenant, le tableau fields contiendrait tous les champs comme éléments du tableau. Vous pouvez affecter des éléments appropriés aux ports de sortie et appeler la méthode generateRow() d'Informatica pour créer un enregistrement cible.

+0

Merci pour votre entrée smack, je veux utiliser la transformation java alors voici le code que j'ai utilisé pour diviser les lignes qui sont séparés par des virgules.String [] str = Col1.split (","); pour (int i = 0; i kiran

+0

Oui, vous allez dans la bonne direction.Comme les trois premiers champs sont communs à toutes les lignes, vous n'avez pas besoin de le placer à l'intérieur de la boucle. Vous pouvez simplement utiliser str [0], str [1] et str [2]. Exécutez la boucle for de 3 à la fin avec l'étape 2 pour obtenir les montants. – Samik

+0

Samik, ma question est après je diviser le fichier avec les virgules, la première chose que je dois faire est de trouver la longueur de la chaîne comment écrire le code pour If Current RowNumber = 1 Alors vINVC_BGN_DT: = field1 vINVC_END_DT: = field2 pouvez-vous me montrer un exemple en java s'il vous plaît – kiran