|
Publicité ' | |||||||||||||||||||||||
|
|
#1 | ||
|
Membre Expert
![]() |
Bonjour,
je suis en train de découvrir Talend (version : Talend Integration Suite Professional Edition 4.2.3). J'ai encore un peu du mal à faire mes marques avec le nombre impressionnant d'outils disponibles et l'orientation Dev par rapport à d'autres ETL Bref, je suis actuellement en train de trouver la meilleure méthode pour faire un truc tout c*n, mais je ne suis pas satisfait du résultat, je voulais donc avoir vos avis éclairés ! J'ai des fichiers toto_<id>.txt de style csv Chaque fichier peut commencer par un ligne avec 4 valeurs sinon, il commencera par une ligne avec une seule colonne; il se terminera également avec une ligne composée d'une seule colonne. Les lignes normales des fichiers comportant 3 colonnes. Je veux parcourir tous ces fichiers, et sortir un fichier résultat comportant l'ensemble des lignes "normales" des fichiers, précédées du terme <id> et des éventuelles valeurs des 4 colonnes de la première ligne (si elle existe, du vide sinon). Exemple: Code :
Le problème que je rencontre, c'est de réutiliser les informations que j’extraie. Par exemple, je commence par un tFileList pour récupérer la liste des fichiers. Je sors avec 2 liens d'itération. Le premier va vers un tFileProperties suivi d'un tExtractRegexFields qui me permettent d'obtenir l'id d'un fichier. Le second lien d'itération part ves un tFileInputDelimited qui découpe les lignes en fonction des ;. Puis, un tMap réparti les lignes en fonction du nombre de champs : je sépare donc mes "entêtes" des mes lignes de données. Mais là, je suis un peu bloqué sur quoi faire de tout ça Donc si quelqu'un a une piste (n'hésitez pas à tout reprendre : je n'ai peut-être pas utilisé les bons outils dés le départ !). Merci d'avance. |
||
|
|
00
|
|
|
#2 | ||
|
Membre Expert
![]() |
Ah, et j'ai oublié un détail... en fait, un fichier peut aussi être découpé au milieu
Code :
|
||
|
|
00
|
|
|
#3 |
|
Membre Expert
![]() |
Bon, après pas mal de tâtonnement, je m'auto-réponds
Donc la solution que j'ai retenue et qui me semble pas mal : Code :
tFileList -- iterate --> tFileInputDelimited -- main --> tMap -- main --> tFileOutput
Le seul passage un peu compliqué, c'est dans le tMap : j'ai défini 2 booléens qui détectent quand je suis sur une ligne d'entête (4 champs) ou une ligne de données (3 champs). Puis j'ai 4 variables qui mémorisent les valeurs lues sur les lignes d'entête quand je suis sur une ligne d'entête ou qui réstituent ces valeurs mémorisées quand je suis sur une autre ligne (du type Var.headerRow?row4.col1:Var.headerData1). Ensuite, en sortie, j'ai quelques fonctions pour récupérer les données comme l'id du fichier (en utilisant (String)globalMap.get("tFileList_1_CURRENT_FILE")) et puis pour formater le tout... C'est pas mal Talend, c'est pas mal ! |
|
|
10
|
Copyright © 2000-2012 - www.developpez.com