|
Publicité ' | |||||||||||||||||||||||
|
|
#1 |
|
Invité régulier
![]() Inscription : janvier 2011 Messages : 22 ![]() |
Bonjour à tous,
Je vais essayer d'exposer au mieux mon problème qui me semblait "bâteau" à l'origine. Je possède un fichier CSV qui contient 5 champs : - project_id - project_name - release - date - nbre_pbm Voilà un exemple de mon fichier 10086 blabla 4.9 27/03/2009 10 10086 blabla 4.9 30/03/2009 22 10086 blabla 4.9 31/03/2009 31 10086 blabla 4.9 01/04/2009 3 10086 blabla 4.9 06/04/2009 2 10086 blabla 4.9 02/06/2009 13 10086 blabla 4.9 03/06/2009 3 10086 blabla 4.9 04/06/2009 8 10086 blabla 4.9 09/06/2009 3 10086 blabla 4.9 10/06/2009 3 10086 blabla 4.9 11/06/2009 1 A partir de ce fichier, je souhaite faire une courbe cumulée (en fonction de la date sur le nbre_pbm) pour obtenir un graphique de type S-Curve. J'ai donc, à partir de code Java, transformé mon fichier pour obtenir ceci : 10086 blabla 4.9 27/03/2009 10 10086 blabla 4.9 30/03/2009 32 10086 blabla 4.9 31/03/2009 63 10086 blabla 4.9 01/04/2009 66 10086 blabla 4.9 06/04/2009 68 10086 blabla 4.9 02/06/2009 81 10086 blabla 4.9 03/06/2009 84 10086 blabla 4.9 04/06/2009 92 10086 blabla 4.9 09/06/2009 95 10086 blabla 4.9 10/06/2009 98 10103 blabla2 1.0 16/01/2008 167 10103 blabla3 1.0 17/01/2008 216 10103 blabla4 1.0 18/01/2008 244 10103 blabla5 1.0 21/01/2008 269 10103 blabla6 1.0 22/01/2008 295 10103 blabla7 1.0 23/01/2008 314 10103 blabla8 1.0 24/01/2008 341 10103 blabla9 1.0 25/01/2008 352 Maintenant, ce que j'aimerai, c'est séparer ce fichier en sous fichier. Un fichier par version de projet. Comment faire pour séparer mon fichier en sous fichier ? L'autre solution que j'avais en tête c'était de créer plein de fichier. Un fichier par version de projet en passant dynamiquement le nom du fichier dans le composant. Mon job ressemble à cela : FichierCSV --> Code Java (transformation du fichier) --> FichierCSV Cumulé Dans le code Java, j'aimerai initialisé le nom de mon fichier de sortie en fonction des données que je lis. Mais je n'arrive pas à mettre le nom du fichier que je souhaite. J'ai utilisé les variable de context pour ça! Je sais pas si j'ai été clair. Merci d'avance |
|
|
00
|
|
|
#2 |
|
Membre Expert
![]() ![]() Mustapha EL HASSAKIngénieur développement logiciels Inscription : août 2009 Messages : 627 ![]() |
L'idée qui me vient à la tête c'est de mettre dans le nom du fichier de sortie un truc du genre
La partie "Nomfichier" étant statique et la partie row1.version étant dynamique et générée à partir de ton code JAVA et contenant la version de ton projet. Par exemple si on suppose les lignes suivantes : 10086 blabla 4.9 09/06/2009 95 ---> créera un fichier "Monfichier4.9" 10086 blabla 4.9 10/06/2009 98 ---> ne créera pas de fichier puisqu'il existe déjà, alors elle écrira à la fin du fichier "Monfichier4.9" 10103 blabla2 1.0 16/01/2008 167 ---> créera un fichier "Monfichier1.0" 10103 blabla3 1.0 17/01/2008 216 ---> ne créera pas de fichier puisqu'il existe déjà, alors elle écrira à la fin du fichier "Monfichier1.0" J'éspère que j'étais clair et que ça marchera.
__________________
Le savant qui enseigne le bien aux gens et ne le met pas en pratique, est semblable à la torche qui éclaire en se brûlant. "Mohammed le Messager d’Allah" (que la paix et le salut d'Allah soient sur lui) Mes articles publiés |
|
|
00
|
|
|
#3 |
|
Invité régulier
![]() Inscription : janvier 2011 Messages : 22 ![]() |
Dans le principe je suis totalement d'accord.
La seule différence avec ta proposition c'est que je veux même ajouter le N° de projet donc ça serait "MonFichier_IdProject_IdVersion" . Mais mon problème se trouve exactement là. Dans le composant tfileoutput, je n'arrive pas à créer "dynamiquement" le nom de mon fichier. si je met row.release, il me met null. Si j'utilise une variable globale, pareil et encore pareil pour une variable de context. à Quoi correspondont row1 pour toi ? Merci en tous cas d'avoir pris le temps de lire ! Edit : Si je met System.out.println(row1.release) dans mon composant Java, la valeur s'affiche correctement ! Est-ce que l'initialisation du nom du fichier se ferait avant mon code ? |
|
|
00
|
|
|
#4 | ||
|
Membre Expert
![]() ![]() Mustapha EL HASSAKIngénieur développement logiciels Inscription : août 2009 Messages : 627 ![]() |
Citation:
Citation:
que tu pourras après récupérer et mettre dans le champs correspondant au nom du fichier, comme ceci :
__________________
Le savant qui enseigne le bien aux gens et ne le met pas en pratique, est semblable à la torche qui éclaire en se brûlant. "Mohammed le Messager d’Allah" (que la paix et le salut d'Allah soient sur lui) Mes articles publiés |
||
|
|
00
|
|
|
#5 |
|
Invité régulier
![]() Inscription : janvier 2011 Messages : 22 ![]() |
Ce qui me fait plaisir quand je vois tes réponses, c'est que j'ai exactement testé toutes ces solutions.
Il n'y a rien à faire,ça ne fonctionne pas J'ai l'impression que l'initialisation du nom du fichier se fait avant tout traitement de mon job. donc si j'initialise pas mon nom de fichier avant mon job, ça ne marche pas... enfin c'est ce que j'en déduis. Si quelqu'un pouvait me confirmer ça ou m'indiquer ou trouver les informations sur "l'initialisation des composants de Talend" ! |
|
|
00
|
|
|
#6 |
|
Membre habitué
![]() Etienne MenuetInscription : mai 2010 Messages : 75 ![]() |
Bonjour,
Dans Talend, le fichier est ouvert avant le début du traitement. Donc il impossible de créer un fichier avec un nom dynamique en fonction des données sources ... sauf si on utilise un lien iterate pour "casser" le flux principale Je te renvois a un post précédent avec la même problématique et la solution qui va bien http://www.developpez.net/forums/d11...fichiers-flux/ |
|
|
00
|
|
|
#7 |
|
Invité régulier
![]() Inscription : janvier 2011 Messages : 22 ![]() |
Bonjour Emenuet,
J'ai testé la solution que tu m'as indiqué. Je confirme que cela fonctionne. Juste une question. Il n'y a pas un autre composant que le TFlowToIterate qui existe ? Je trouve que ce composant lent. En tous merci à toi et à haskhouse pour votre aide. |
|
|
00
|
|
|
#8 |
|
Membre habitué
![]() Etienne MenuetInscription : mai 2010 Messages : 75 ![]() |
Bonjour,
La méthode que je t'ai donnée est la seul existante avec des composants Talend standard a ma connaissance. Les performances sont inférieur car il y a plus d'ouverture et fermeture de fichier. Pour optimiser ce genre de traitement, il faudrait effectivement créer son propre composant qui gerere le code java spécifique a son besoin. Mais cela est d'un autre niveau |
|
|
00
|
|
|
#9 |
|
Invité régulier
![]() Inscription : janvier 2011 Messages : 22 ![]() |
Merci pour ta réponse.
Je me permets de poster un nouveau message dans cette discussion. J'ai regardé dans le forum et sur Internet, et plusieurs personnes rencontre le problème suivant : "For input string". J'ai cette erreur sur mon champ "project_id" qui est un Integer. Pourquoi cherche-t-il absolument à me le convertir en String. Surtout que du coup, mon job ne s'éxecute pas correctement. Mes fichiers sont correctements créés mais il est incapable de faire le filtre ! |
|
|
00
|
Copyright © 2000-2012 - www.developpez.com