|
Publicité ' | ||||||||||||||||||||||||
|
|
#1 |
|
Invité de passage
![]() Romain ALCARAZ Inscription : novembre 2010 Messages : 24 ![]() |
Bonjour,
Je suis actuellement sur un projet de reprise d'historique pour une gestion d'archivage. le job sur lequel je dois travailler consiste à générer un fichier csv qui servira au paramétrage d'un logiciel (nouveau logiciel de gestion d'archive). J'ai un gros problème dans mon job car je dois me baser sur un fichier de paramétrage à croiser avec mon fichier de reprise d'historique. Je m'explique : Voici mon fichier de paramétrage (REPRISE.JPG) et mon fichier de paramétrage (PARAM.JPG). Ma question est simple (et je pense que vous avez compris ce que je veux faire) c'est de récupérer donc les champs correspondant au paramétrage dans la table de reprise (en fonction de ce qui correspond à tel ou tel code_archive). Est ce possible avec Talend ? Ne faites pas attention au nombre (c'est aléatoire) c'est juste pour montrer le principe : je dois récupérer du contenu de la même table mais en rapport avec le contenu du paramétrage (qui est en fait le nom des champs à récupérer). C'est tordu mais bon. |
|
|
00
|
|
|
#2 |
|
Membre actif
![]() Consultant informatique Inscription : mars 2003 Messages : 130 ![]() |
Yes we can !
Je le voie comme ca: row1 : reprise row2 : param Un tMap dans lequel tu fais une jointure et pour chaque champs tu met cet expression : Code :
row2.param01.equals("CHAMPS1")?row1.CHAMPS1:(row2.param01.equals("CHAMPS2")?row1.CHAMPS2:(row2.param01.equals("CHAMPS3")?row1.CHAMPS3:(etc....))) |
|
|
00
|
|
|
#3 | |
|
Invité de passage
![]() Romain ALCARAZ Inscription : novembre 2010 Messages : 24 ![]() |
Citation:
Le problème c'est que mon fichier de paramétrage va surement changer alors je ne sais pas si cette solution sera la meilleure mais bon. En partant du principe que mon fichier de reprise sera certainement figé je pourrais faire un truc comme ça... Faut voir.. En tout cas merci je vais tenter ça. Ça n'empêche pas d'autres idées de la part de quelqu'un d'autre. |
|
|
|
00
|
|
|
#4 |
|
Membre actif
![]() Consultant informatique Inscription : mars 2003 Messages : 130 ![]() |
Qu'est ce qui risque de changer exactement ?
|
|
|
00
|
|
|
#5 |
|
Invité de passage
![]() Romain ALCARAZ Inscription : novembre 2010 Messages : 24 ![]() |
Bah en fait non j'ai dit n'importe quoi à ce sujet là.
Effectivement si je vois ça au plus large c'est à dire une expression de ton style pour tous les champs possible dans mon fichier de reprise : ça marchera très bien. Mais (car il y a toujours un "mais") j'ai 85 champs dans cette table. Donc la construction de cette expression et surtout la compilation et l'exécution vont être bien lourdes. |
|
|
00
|
|
|
#6 |
|
Invité de passage
![]() Romain ALCARAZ Inscription : novembre 2010 Messages : 24 ![]() |
Est ce que c'est possible de créer une fonction qui aurait en entrée un chaine )ou autre je ne sais pas bien), qui ferait cette expression ?
en gros qui me rendrait le 'row2.<monchamps>' et qui prendrait en paramètre le nom du champs. au moins j'économiserai de la saisie. |
|
|
00
|
|
|
#7 |
|
Membre actif
![]() Consultant informatique Inscription : mars 2003 Messages : 130 ![]() |
Oui c possible mais ça te renverrai un String
Ça ne serais pas interprétable en Java. On ne peut pas avoir de nom de variable variable en java. Par contre si tu n'est pas allergique au Java j'ai une solution Tu fais passer ton flow reprise par un tJavaFlex Ou tu utilise un Object HashMap ou tu y met tous les éléments CHAMPS01,VALEUR Ton schéma en sorti du TjavaFlex : map Objet code_ARCH String ensuite dans ton tmap tu fera tjrs la jointure avec CODE_ARCH et tu utilise cet expression : Code :
(String)((HashMap) map).get(row2.param01) |
|
|
00
|
|
|
#8 | |
|
Invité de passage
![]() Romain ALCARAZ Inscription : novembre 2010 Messages : 24 ![]() |
Citation:
Cet objet aura pour chaque colonne une association clé/valeur du genre : param1,champs7 ou param4,champs2 etc... Et puis avec cette méthode je ne vais pas récupérer le contenu du champs de reprise ayant le nom : (String)((HashMap) map).get(row2.param01) Je vais juste lui donner cette valeur |
|
|
|
00
|
|
|
#9 | |
|
Membre actif
![]() Consultant informatique Inscription : mars 2003 Messages : 130 ![]() |
oui tu aura un HashMap par ligne de reprise et alors ?
Ca va pas exploser ta JVM à moins que tu est des millions de ligne à traiter Et dans la méthode que je te donne je te dis de faire passer ton ancien fichier dans la HashMap pas ton fichier param Citation:
méthode put pour donner la valeur méthode get pour prendre la valeur ... la clé est un String.... si la clé est "Champ1" valeur "VALEUR1", "Champ2" valeur "VALEUR2" (String)((HashMap) map).get(row2.param01) retourne "VALEUR1" si row2.param01="Champ1" retourne "VALEUR2" si row2.param01="Champ2" etc.... |
|
|
|
00
|
|
|
#10 | |
|
Invité de passage
![]() Romain ALCARAZ Inscription : novembre 2010 Messages : 24 ![]() |
Citation:
Par contre si tu pouvais me résumer ce que tu me proposes car j'ai du mal à comprendre le post où tu décris la méthode à utiliser. En fait c'est surtout que je ne vois aps dans mon tmap comment je vais pouvoir lui faire comprendre de récupérer, non pas le contenu de la variable, mais le champs correspondant au contenu de cette variable (car c'est ça que je cherche). Merci encore. |
|
|
|
00
|
|
|
#11 |
|
Invité de passage
![]() Romain ALCARAZ Inscription : novembre 2010 Messages : 24 ![]() |
Je n'arrive pas à récupérer les valeurs de mon flux dans mon tjavaflex...
|
|
|
00
|
|
|
#12 |
|
Invité de passage
![]() Romain ALCARAZ Inscription : novembre 2010 Messages : 24 ![]() |
Bon j'ai réussi.
Merci pour ton aide c'est parfait. Je n'aurais pas penser faire cela. |
|
|
00
|
|
|
#13 | ||
|
Invité de passage
![]() Romain ALCARAZ Inscription : novembre 2010 Messages : 24 ![]() |
Bon, en fait j'ai un autre soucis.
J'ai paramétré mon job pour qu'il puisse récupérer les noms des champs de manière dynamique pour que je n'ai pas à écrire pour chacun des champs : de ce fait j'arrive à récupérer le nom du champs mais malheureusement pas la valeur, j'ai fait comme ça : Code :
Code :
map.put(COLUMN,<qqch_recup_val_associe_a_column>); |
||
|
|
00
|
|
|
#14 | ||
|
Membre actif
![]() Consultant informatique Inscription : mars 2003 Messages : 130 ![]() |
alors j'ai reussi a retrouver la valeur depuis un fiels grace à cet source :
- http://download.oracle.com/javase/6/...a.lang.Object) Code :
|
||
|
|
00
|
|
|
#15 | |||||
|
Invité de passage
![]() Romain ALCARAZ Inscription : novembre 2010 Messages : 24 ![]() |
Citation:
J'me suis permis de changer un truc : en fait j'en connais un peu en java... Code :
|
|||||
|
|
00
|
|
|
#16 |
|
Membre actif
![]() Consultant informatique Inscription : mars 2003 Messages : 130 ![]() |
bah tu moment que tu est sur du type de ton objet
Le résultat est le même ^^ ça va je gère aussi un peu en java. même si avec talend on y touche beaucoup moins, mais cool de voir qq qui est pas effrayé par qq lignes de codes ^^ |
|
|
00
|
|
|
#17 | |
|
Invité de passage
![]() Romain ALCARAZ Inscription : novembre 2010 Messages : 24 ![]() |
Citation:
Avant j'étais dev java sur un progiciel (en J2EE) et j'aimais bien, là c'est du talend, BDD que je fais mais c'est bien ça me fait du bien de coder de temps en temps. |
|
|
|
00
|
|
|
#18 | ||
|
Membre actif
![]() Consultant informatique Inscription : mars 2003 Messages : 130 ![]() |
Du coup je viens de penser à une solution....
mettre tout simplement l'expression : Code :
|
||
|
|
00
|
|
|
#19 | |||
|
Invité de passage
![]() Romain ALCARAZ Inscription : novembre 2010 Messages : 24 ![]() |
Citation:
getdeclaredfield peut prendre un argument alors ? |
|||
|
|
00
|
|
|
#20 |
|
Membre actif
![]() Consultant informatique Inscription : mars 2003 Messages : 130 ![]() |
|
|
|
00
|
Copyright © 2000-2012 - www.developpez.com