IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Développement de jobs Discussion :

Création d'un nom de fichier dynamiquement


Sujet :

Développement de jobs

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Janvier 2011
    Messages
    22
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2011
    Messages : 22
    Points : 12
    Points
    12
    Par défaut Création d'un nom de fichier dynamiquement
    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

  2. #2
    Membre émérite
    Avatar de haskouse
    Homme Profil pro
    Salesforce
    Inscrit en
    Août 2009
    Messages
    923
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : Maroc

    Informations professionnelles :
    Activité : Salesforce
    Secteur : Conseil

    Informations forums :
    Inscription : Août 2009
    Messages : 923
    Points : 2 684
    Points
    2 684
    Par défaut
    L'idée qui me vient à la tête c'est de mettre dans le nom du fichier de sortie un truc du genre
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    "Monfichier" + row1.version
    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)

    Tutoriels Talend
    Mes articles publiés
    Mon CV en-ligne

  3. #3
    Membre à l'essai
    Profil pro
    Inscrit en
    Janvier 2011
    Messages
    22
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2011
    Messages : 22
    Points : 12
    Points
    12
    Par défaut
    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 ?

  4. #4
    Membre émérite
    Avatar de haskouse
    Homme Profil pro
    Salesforce
    Inscrit en
    Août 2009
    Messages
    923
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : Maroc

    Informations professionnelles :
    Activité : Salesforce
    Secteur : Conseil

    Informations forums :
    Inscription : Août 2009
    Messages : 923
    Points : 2 684
    Points
    2 684
    Par défaut
    à Quoi correspondont row1 pour toi ?
    C'est juste une façon de dire que ça arrive du flux précédent le tFileOutput.

    Si je met System.out.println(row1.release) dans mon composant Java, la valeur s'affiche correctement !
    Pourquoi ne pas profiter de ceci. Dans ton tJava stocke le row1.release dans une variable global ne utilisant le code suivant :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    globalMap.put("toto", row1.release)
    que tu pourras après récupérer et mettre dans le champs correspondant au nom du fichier, comme ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    (String)globalMap.get("toto")
    "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)

    Tutoriels Talend
    Mes articles publiés
    Mon CV en-ligne

  5. #5
    Membre à l'essai
    Profil pro
    Inscrit en
    Janvier 2011
    Messages
    22
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2011
    Messages : 22
    Points : 12
    Points
    12
    Par défaut
    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" !

  6. #6
    Membre éclairé
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Mai 2010
    Messages
    343
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2010
    Messages : 343
    Points : 653
    Points
    653
    Par défaut
    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/

  7. #7
    Membre à l'essai
    Profil pro
    Inscrit en
    Janvier 2011
    Messages
    22
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2011
    Messages : 22
    Points : 12
    Points
    12
    Par défaut
    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.

  8. #8
    Membre éclairé
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Mai 2010
    Messages
    343
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2010
    Messages : 343
    Points : 653
    Points
    653
    Par défaut
    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

  9. #9
    Membre à l'essai
    Profil pro
    Inscrit en
    Janvier 2011
    Messages
    22
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2011
    Messages : 22
    Points : 12
    Points
    12
    Par défaut
    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 ! du coup je me retrouve avec des fichiers vides.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [log4net] nom du fichier dynamique
    Par bossun dans le forum C#
    Réponses: 0
    Dernier message: 01/06/2010, 15h42
  2. Fichier batch et nom de fichier dynamique avec date
    Par ZIED dans le forum Scripts/Batch
    Réponses: 1
    Dernier message: 20/04/2009, 15h38
  3. Réponses: 2
    Dernier message: 26/09/2007, 07h49
  4. Création fichier dynamique
    Par delavega dans le forum ASP
    Réponses: 7
    Dernier message: 22/09/2006, 10h02
  5. nom de fichier dynamique
    Par F.Victoire dans le forum Delphi
    Réponses: 5
    Dernier message: 23/06/2006, 14h31

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo