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 :

Fabrication de plusieurs fichiers en output d'un job.


Sujet :

Développement de jobs

  1. #1
    Futur Membre du Club
    Profil pro
    Inscrit en
    Février 2009
    Messages
    9
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2009
    Messages : 9
    Points : 6
    Points
    6
    Par défaut Fabrication de plusieurs fichiers en output d'un job.
    Bonjour,

    Je veux créer un job qui parcourt en input une table d'une base de données, et qui va créer en output un fichier pour chaque ligne lue dans cette table.
    Je ne sais pas quelle méthode et quels composants utiliser pour réaliser ce Job.

    Merci de m'aider à trouver une idée qui me permettra d'éviter une solution java classique.

    Cordialement.

  2. #2
    Membre actif
    Profil pro
    Inscrit en
    Janvier 2008
    Messages
    247
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2008
    Messages : 247
    Points : 277
    Points
    277
    Par défaut
    Bonjour,

    Tu devrais très bien t'en sortir avec un tMap.

  3. #3
    Rédacteur
    Avatar de jsd03
    Homme Profil pro
    Conseil - Consultant en systèmes d'information
    Inscrit en
    Août 2008
    Messages
    1 221
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Indre et Loire (Centre)

    Informations professionnelles :
    Activité : Conseil - Consultant en systèmes d'information

    Informations forums :
    Inscription : Août 2008
    Messages : 1 221
    Points : 6 506
    Points
    6 506
    Par défaut
    bonjour,

    Pour bien débuter avec Talend est des choses simples comme celles-ci, visitez le lien suivant qui vous donnera toutes les indications nécessaire pour une bonne méthode de travail.

    Bonne continuation.

  4. #4
    Futur Membre du Club
    Profil pro
    Inscrit en
    Février 2009
    Messages
    9
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2009
    Messages : 9
    Points : 6
    Points
    6
    Par défaut
    Merci pour vos réponses rapides.
    Il est vrai que ma question n'est pas trop précise au niveau de la problématique.

    Mon soucis est relatif à la fabrication des fichiers en output.

    Je sais très bien comment accéder avec les composants Talend à la table de ma base de données, et je sais également parcourir ses éléments: le problème concerne la génération de fichiers (aux pluriels) en sortie.

    Je sais comment générer un seul fichier en sortie, mais mon besoin c'est de créer un fichier pour chaque ligne lue dans la table de l'input.

    Est-ce qu'il existe un composant Talend qui permet de créer dynamiquement un fichier pour chaque itération de lecture dans la table de base de données?

    Ou bien, au cas où Talend n'a pas prévu ce type de composant, est ce qu'il est possible de rajouter un composant Tjava dans lequel je code à la main mon besoin?

    Citation Envoyé par TeamArkadia Voir le message
    Bonjour,

    Tu devrais très bien t'en sortir avec un tMap.
    J'ai essayé de voir ce que je peux faire avec le TMap, mais je n'arrive même pas à me rapprocher de ce que je veux.

    Citation Envoyé par jsd03 Voir le message
    bonjour,

    Pour bien débuter avec Talend est des choses simples comme celles-ci, visitez le lien suivant qui vous donnera toutes les indications nécessaire pour une bonne méthode de travail.

    Bonne continuation.
    C'est gentil de me donner ce lien que je connais déjà . Je ne suis pas tout à fait débutant sur Talend. Donc vous pouvez me donner des réponses techniquement poussées: je les comprendrais .

    Merci de votre aide

  5. #5
    Membre actif
    Profil pro
    Inscrit en
    Janvier 2008
    Messages
    247
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2008
    Messages : 247
    Points : 277
    Points
    277
    Par défaut
    Donc si je comprends bien, tu veux générer autant de fichiers que tu as de lignes en entrée !?!


    Exemple :
    Ligne1 = Fichier1
    Ligne2 = Fichier2
    Etc
    LigneN = FichierN


    Si tel est le cas, tu vas avoir besoin de passer par un tJava ou un tJavaFlex. Ainsi, tu pourras générer de façon dynamique des noms pour tes fichiers, par exemple par rapport à une donnée contenue dans la source, et en le passant en sortie par une variable globale (globalMap.put("MonFichier", "LeNomChoisi")), qui te servira dans le composant tFileOutputDelimited.

  6. #6
    Futur Membre du Club
    Profil pro
    Inscrit en
    Février 2009
    Messages
    9
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2009
    Messages : 9
    Points : 6
    Points
    6
    Par défaut
    Citation Envoyé par TeamArkadia Voir le message
    Donc si je comprends bien, tu veux générer autant de fichiers que tu as de lignes en entrée !?!


    Exemple :
    Ligne1 = Fichier1
    Ligne2 = Fichier2
    Etc
    LigneN = FichierN


    Si tel est le cas, tu vas avoir besoin de passer par un tJava ou un tJavaFlex. Ainsi, tu pourras générer de façon dynamique des noms pour tes fichiers, par exemple par rapport à une donnée contenue dans la source, et en le passant en sortie par une variable globale (globalMap.put("MonFichier", "LeNomChoisi")), qui te servira dans le composant tFileOutputDelimited.
    Merci pour ta réponse.

    Tu as très bien compris le problème.
    Je suis en train de mettre en pratique ta piste: je te tiens au courant de ce que ça donne.

  7. #7
    Membre actif
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    465
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France

    Informations forums :
    Inscription : Mai 2005
    Messages : 465
    Points : 287
    Points
    287
    Par défaut
    J'aurais une solution sans tJava ni tJavaFlex..

    considérant une table de base de données, chaque entrée devient une itération. Tu récupères une colonne de ton entrée pour créer le nom de fichier. Les autres colonnes deviennent le contenu de ce fichier.

    Tu pourrais procéder comme ceci:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    (1)tBDDInput-[iterate]->(2)tIterateToFlow-[main]->(3)tFileOutput
    (1) ton composant de base de données
    (2) dans ce composant, décoche l'option cochée par défaut. Cela va te permettre de personnaliser tes variables globales, notamment leurs noms.
    Par exemple, si ta colonne1 représente le nom du fichier, alors tu crées une clé "nomFichier" avec comme valeur "colonne1"
    (3) dans les propriétés du composant de sortie, en lieu et place du nom de fichier, tu écris ((String)globalMap.get("nomFichier")). Tu synchronises les colonnes mais tu enlèves la colonne1 dans la mesure où elle apparaît déjà dans le nom du fichier.

    Cela répond-il à ta question?

  8. #8
    Futur Membre du Club
    Profil pro
    Inscrit en
    Février 2009
    Messages
    9
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2009
    Messages : 9
    Points : 6
    Points
    6
    Par défaut
    Citation Envoyé par mathieu_r Voir le message
    J'aurais une solution sans tJava ni tJavaFlex..

    considérant une table de base de données, chaque entrée devient une itération. Tu récupères une colonne de ton entrée pour créer le nom de fichier. Les autres colonnes deviennent le contenu de ce fichier.

    Tu pourrais procéder comme ceci:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    (1)tBDDInput-[iterate]->(2)tIterateToFlow-[main]->(3)tFileOutput
    (1) ton composant de base de données
    (2) dans ce composant, décoche l'option cochée par défaut. Cela va te permettre de personnaliser tes variables globales, notamment leurs noms.
    Par exemple, si ta colonne1 représente le nom du fichier, alors tu crées une clé "nomFichier" avec comme valeur "colonne1"
    (3) dans les propriétés du composant de sortie, en lieu et place du nom de fichier, tu écris ((String)globalMap.get("nomFichier")). Tu synchronises les colonnes mais tu enlèves la colonne1 dans la mesure où elle apparaît déjà dans le nom du fichier.

    Cela répond-il à ta question?


    J'ai déjà pensé à cette solution, mais il me manquait la connaissance des composants nécessaires pour sa réalisation. J'ai fait exactement ce que tu m'as dit, mais j'ai été bloqué au niveau de la récupération des données de mes colonnes récupérées à chaque itération dans le composant tIterateToFlow. L'auto complétion ne m'aide pas trop car elle me propose toujours les mêmes variables. J'ai l'impression que l'autocomplétion ne se met pas à jour quand le développeur rajoute d'autres variables..
    L'autre problème est relatif au nom du fichier: si j'utilise un composant de type "tFileOutput" et quand je regarde le code java généré par Talend, je vois que le programme commence par créer le fichier en lui indiquant son nom et toutes ses propriétés, ce qui est embêtant pour mon cas: j'ai besoin de définir le nom du fichier après récupération de son contenu dans la base de données. Donc même l'utilisation de la globalMap ne m'aide pas trop car dans le code java le fichier est créer avant même de parcourir ma base de données.

    J'espère que c'est clair ce que je dis.

    Citation Envoyé par TeamArkadia Voir le message
    Donc si je comprends bien, tu veux générer autant de fichiers que tu as de lignes en entrée !?!


    Exemple :
    Ligne1 = Fichier1
    Ligne2 = Fichier2
    Etc
    LigneN = FichierN


    Si tel est le cas, tu vas avoir besoin de passer par un tJava ou un tJavaFlex. Ainsi, tu pourras générer de façon dynamique des noms pour tes fichiers, par exemple par rapport à une donnée contenue dans la source, et en le passant en sortie par une variable globale (globalMap.put("MonFichier", "LeNomChoisi")), qui te servira dans le composant tFileOutputDelimited.
    Même problème qu'au dessus: incapacité de définir dynamiquement le nom de mon fichier.

    Citation Envoyé par TeamArkadia Voir le message
    Bonjour,

    Tu devrais très bien t'en sortir avec un tMap.
    Après avoir testé les différentes solutions qu'on m'avait proposées, je trouve que la plus simple est avec un simple tMap, mais j'ai toujours le problème relatif au nommage de mes fichiers.

    La solution avec le tMap est la suivante:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    (1)tBDDInput-[main]->(2)tMap-[main]->(3)tFileOutput
    Le composant 'tBDDInput' boucle sur les lignes de données de ma base de données.
    Dans le 'tFileOutput' je défini un schéma avec une seule colonne (chaine de caractères qui va recevoir les données de ma colonne de base de données), et je mets des chaines de caractères vides pour le saut de ligne et le séparateur.
    Dans la 'tMap', je mappe directement la colonne qui contient les données que je souhaite mettre dans mon fichier sur la colonne définie dans le schéma du 'tFileOutput'.

    Il me reste juste de trouver l'astuce qui me permettrait de nommer dynamiquement mes fichiers de sortie.


    Quelq'un aurait une idée ?

  9. #9
    Membre actif
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    465
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France

    Informations forums :
    Inscription : Mai 2005
    Messages : 465
    Points : 287
    Points
    287
    Par défaut
    salut,

    avec ton schéma, il me semble que tu ne génères pas autant de fichiers qu'il y a de lignes de ta BDD.
    Il faut utiliser un lien d'itération pour cela...

    Par contre, j'ai oublié d'inclure un tFlowToIterate juste après le tIterateToFlow. C'est dans ce composant que tu définis tes variables globales, je crois. Je n'ai pas Talend sous la main pour vérifier..
    Quant à l'accès à ces variables globales créées, on ne les obtient pas par le ctrl+TAB. Il faut écrire soi-même le nom de la variable...

    Aussi, le fichier en output dans le schéma proposé est généré à partir du contenu de ta BDD puis nommé...
    Ca ne pose aucun problème.

  10. #10
    Futur Membre du Club
    Profil pro
    Inscrit en
    Février 2009
    Messages
    9
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2009
    Messages : 9
    Points : 6
    Points
    6
    Par défaut
    Citation Envoyé par mathieu_r Voir le message
    salut,

    avec ton schéma, il me semble que tu ne génères pas autant de fichiers qu'il y a de lignes de ta BDD.
    Il faut utiliser un lien d'itération pour cela...

    Par contre, j'ai oublié d'inclure un tFlowToIterate juste après le tIterateToFlow. C'est dans ce composant que tu définis tes variables globales, je crois. Je n'ai pas Talend sous la main pour vérifier..
    Quant à l'accès à ces variables globales créées, on ne les obtient pas par le ctrl+TAB. Il faut écrire soi-même le nom de la variable...

    Aussi, le fichier en output dans le schéma proposé est généré à partir du contenu de ta BDD puis nommé...
    Ca ne pose aucun problème.
    Bonjour,

    J'ai passé toute la journée d'hier à tester ton schéma et je n'ai vraiment pas compris comment tu fais pour récupérer les résultats de la requête passée à la BDD et les utiliser dans tes composants 'tFlowToIterate' et 'tIterateToFlow'. J'ai même regardé dans le code java généré par Talend, la requête n'est exécutée à aucun moment du programme!!! je ne suis pas si je dois ajouter un nouveau composant pour m'assurer de son exécution...

    Aussi le problème du nommage du fichier en output: je t'assure que Talend crée le fichier en premier avant de faire quoique ce soit, et si jamais le nom du fichier n'est pas définit au préalable dans le programme, il affiche un erreur. J'ai utilisé aussi les variables globales en invoquant la globalMap, et il me retourne null car au moment où il nomme le fichier, mon couple (clé, valeur) n'est pas encore setté dans la globalMap.
    Donc pour récapituler: sur la perspective 'design' de Talend on voit bien que le fichier se génère à la fin du job, et malgré ça le code java généré, crée le fichier tout au début du programme. ==> décalage entre ce qu'on voit graphiquement et ce qui est généré dans le code.

    Je me demande s'il n'y a pas des composants à ajouter sur le job pour qu'il respecte bien l'ordonnancement imposé dans schéma...

    Je vais encore essayé aujourd'hui et demain, et je ne trouve pas de solution, je passerais à un programme classique en java.

    Je n'oublie pas de remercier tous ceux qui ont essayé de m'aider.

  11. #11
    Membre actif
    Profil pro
    Inscrit en
    Janvier 2008
    Messages
    247
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2008
    Messages : 247
    Points : 277
    Points
    277
    Par défaut
    Bonjour,

    Tu peux poster une capture de ton job stp ?

    Je pense qu'on peut résoudre ton problème, mais je préfèrerais voir avant de me prononcer.

    A+

  12. #12
    Futur Membre du Club
    Profil pro
    Inscrit en
    Février 2009
    Messages
    9
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2009
    Messages : 9
    Points : 6
    Points
    6
    Par défaut
    Citation Envoyé par TeamArkadia Voir le message
    Bonjour,

    Tu peux poster une capture de ton job stp ?

    Je pense qu'on peut résoudre ton problème, mais je préfèrerais voir avant de me prononcer.

    A+
    J'ai fais plusieurs tests avec plusieurs schémas. Je mets celui qui me semble le plus simple à comprendre.
    J'ai mis les propriétés de chaque composants du schéma.
    Problèmes:
    1) dans le composant "tIterateToFlow": je suis incapable de récupérer les données de mes colonnes de la BDD dans la colonne "valeur" du composant (cf fichier joint). Dans mon exemple j'ai mis les chaines de caractères ("toto" et "contenu") pour ne pas avoir d'erreur de compilation, mais si jamais j'essaye de récupérer une donnée du premier composant de BDD il me génère une erreur de compilation.
    2) dans le composant "tFileOutputDelimited": impossibilité de nommer dynamiquement mon fichier en fonction des données que je récupère de la BDD (cf fichier joint). champ entouré en rouge.

    Merci pour ton aide.
    Images attachées Images attachées  

  13. #13
    Rédacteur
    Avatar de jsd03
    Homme Profil pro
    Conseil - Consultant en systèmes d'information
    Inscrit en
    Août 2008
    Messages
    1 221
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Indre et Loire (Centre)

    Informations professionnelles :
    Activité : Conseil - Consultant en systèmes d'information

    Informations forums :
    Inscription : Août 2008
    Messages : 1 221
    Points : 6 506
    Points
    6 506
    Par défaut
    Bon on va essayé de mettre de l'ordre dans cette discussion

    Ce que tu veux faire c'est mettre chaque ligne d'une source de données dans un fichier propre à chaque ligne. Soit une ligne par fichier.

    Le problème le plus important qui ce pose c'est de changer de nom de fichier pour chaque ligne.

    J'ai déjà dû faire cela et entre nous ça n'est pas le plus simple je m'explique :
    il faut savoir que le nom du fichier de sortie est définie dans une variable en début de job et même si dans ton tFileOut.. tu définis un nouveau nom en utilisant (String)globalMap.("nomFichier") (par exemple) cela ne changera rien. Chaque lignes seront chargées dans le nom de fichier par défaut (soit null).

    La méthode consiste donc à fermer le fichier ouvert et changer la valeur de la variable du nom du fichier de sortie. Certaines variable de tFileOutput sont défini en FINAL en début de job et donc tu ne pourras pas redéfinir ce nom à moins de redévelopper ce tFileOutput en enlevant FINAL devant le nom de la variable de fichier de sortie.
    Par contre, pour un tFileOuputDelimited c'est possible (ouff ).

    La méthode est la suivante :

    1. Source de données --> tJavaRow --> tFileOutputDelimited

    Admettons que mon schéma pour ma source de données et tJavaRow Input soit le suivant :
    nomfichier (String) | col1 (String) | col2 (String)

    Et que tJavaRow Ouput et tFIleOutputDelimited
    col1 (String) | col2 (String)

    Dans le tJavaRow, on pourra indiquer :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    output_row.col1 = input_row.col1;
    output_row.col2 = input_row.col2;

    Puis avant ce code il faut maintenant fermer le fichier précédent ouvert et redéfinir les variables du nouveau fichier. Pour cela il faut regarder dans l'onglet code du designer et là on voit ceci :


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    fileName_tFileOutputDelimited_1 = (new java.io.File(
    					"C:/Documents and Settings/jsd03/Bureau/out/"
    							+ context.getProperty("NomFichier")))
    					.getAbsolutePath().replace("\\", "/");
    			String fullName_tFileOutputDelimited_1 = null;
    			String extension_tFileOutputDelimited_1 = null;
    			String directory_tFileOutputDelimited_1 = null;
    			if ((fileName_tFileOutputDelimited_1.indexOf("/") != -1)) {
    				if (fileName_tFileOutputDelimited_1.lastIndexOf(".") < fileName_tFileOutputDelimited_1
    						.lastIndexOf("/")) {
    					fullName_tFileOutputDelimited_1 = fileName_tFileOutputDelimited_1;
    					extension_tFileOutputDelimited_1 = "";
    				} else {
    					fullName_tFileOutputDelimited_1 = fileName_tFileOutputDelimited_1
    							.substring(0, fileName_tFileOutputDelimited_1
    									.lastIndexOf("."));
    					extension_tFileOutputDelimited_1 = fileName_tFileOutputDelimited_1
    							.substring(fileName_tFileOutputDelimited_1
    									.lastIndexOf("."));
    				}
    				directory_tFileOutputDelimited_1 = fileName_tFileOutputDelimited_1
    						.substring(0, fileName_tFileOutputDelimited_1
    								.lastIndexOf("/"));
    			} else {
    				if (fileName_tFileOutputDelimited_1.lastIndexOf(".") != -1) {
    					fullName_tFileOutputDelimited_1 = fileName_tFileOutputDelimited_1
    							.substring(0, fileName_tFileOutputDelimited_1
    									.lastIndexOf("."));
    					extension_tFileOutputDelimited_1 = fileName_tFileOutputDelimited_1
    							.substring(fileName_tFileOutputDelimited_1
    									.lastIndexOf("."));
    				} else {
    					fullName_tFileOutputDelimited_1 = fileName_tFileOutputDelimited_1;
    					extension_tFileOutputDelimited_1 = "";
    				}
    				directory_tFileOutputDelimited_1 = "";
    			}
     
    			int nb_line_tFileOutputDelimited_1 = 0;
    			int splitEvery_tFileOutputDelimited_1 = 1000;
    			int splitedFileNo_tFileOutputDelimited_1 = 0;
    			int currentRow_tFileOutputDelimited_1 = 0;
     
    			final String OUT_DELIM_tFileOutputDelimited_1 = /**
    			 * Start field
    			 * tFileOutputDelimited_1:FIELDSEPARATOR
    			 */
    			";"/** End field tFileOutputDelimited_1:FIELDSEPARATOR */
    			;
     
    			final String OUT_DELIM_ROWSEP_tFileOutputDelimited_1 = /**
    			 * Start field
    			 * tFileOutputDelimited_1:ROWSEPARATOR
    			 */
    			"\n"/** End field tFileOutputDelimited_1:ROWSEPARATOR */
    			;
     
    			// create directory only if not exists
    			if (directory_tFileOutputDelimited_1 != null
    					&& directory_tFileOutputDelimited_1.trim().length() != 0) {
    				java.io.File dir_tFileOutputDelimited_1 = new java.io.File(
    						directory_tFileOutputDelimited_1);
    				if (!dir_tFileOutputDelimited_1.exists()) {
    					dir_tFileOutputDelimited_1.mkdirs();
    				}
    			}
     
    			// routines.system.Row
    			java.io.Writer outtFileOutputDelimited_1 = new java.io.BufferedWriter(
    					new java.io.OutputStreamWriter(
    							new java.io.FileOutputStream(
    									fileName_tFileOutputDelimited_1, false),
    							"ISO-8859-15"));
    			java.io.File filetFileOutputDelimited_1 = new java.io.File(
    					fileName_tFileOutputDelimited_1);



    Je vais pas tout faire mais l'idée et de faire cela :


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
     
     
    // Fermer le fichier
    outtFileOutputDelimited_1.close();
     
    // Renommer les variables
    fileName_tFileOutputDelimited_1 = (new java.io.File(
    					"C:/Documents and Settings/jsd03/Bureau/out/"
    							+ input_row.nomfichier))
    					.getAbsolutePath().replace("\\", "/");
    			fullName_tFileOutputDelimited_1 = null;
    			extension_tFileOutputDelimited_1 = null;
    			directory_tFileOutputDelimited_1 = null;
    			if ((fileName_tFileOutputDelimited_1.indexOf("/") != -1)) {
    				if (fileName_tFileOutputDelimited_1.lastIndexOf(".") < fileName_tFileOutputDelimited_1
    						.lastIndexOf("/")) {
    					fullName_tFileOutputDelimited_1 = fileName_tFileOutputDelimited_1;
    					extension_tFileOutputDelimited_1 = "";
    				} else {
    					fullName_tFileOutputDelimited_1 = fileName_tFileOutputDelimited_1
    							.substring(0, fileName_tFileOutputDelimited_1
    									.lastIndexOf("."));
    					extension_tFileOutputDelimited_1 = fileName_tFileOutputDelimited_1
    							.substring(fileName_tFileOutputDelimited_1
    									.lastIndexOf("."));
    				}
    				directory_tFileOutputDelimited_1 = fileName_tFileOutputDelimited_1
    						.substring(0, fileName_tFileOutputDelimited_1
    								.lastIndexOf("/"));
    			} else {
    				if (fileName_tFileOutputDelimited_1.lastIndexOf(".") != -1) {
    					fullName_tFileOutputDelimited_1 = fileName_tFileOutputDelimited_1
    							.substring(0, fileName_tFileOutputDelimited_1
    									.lastIndexOf("."));
    					extension_tFileOutputDelimited_1 = fileName_tFileOutputDelimited_1
    							.substring(fileName_tFileOutputDelimited_1
    									.lastIndexOf("."));
    				} else {
    					fullName_tFileOutputDelimited_1 = fileName_tFileOutputDelimited_1;
    					extension_tFileOutputDelimited_1 = "";
    				}
    				directory_tFileOutputDelimited_1 = "";
    			}
     
    			nb_line_tFileOutputDelimited_1 = 0;
    			splitEvery_tFileOutputDelimited_1 = 1000;
    			splitedFileNo_tFileOutputDelimited_1 = 0;
    			currentRow_tFileOutputDelimited_1 = 0;
     
     
    			// create directory only if not exists
    			if (directory_tFileOutputDelimited_1 != null
    					&& directory_tFileOutputDelimited_1.trim().length() != 0) {
    				java.io.File dir_tFileOutputDelimited_1 = new java.io.File(
    						directory_tFileOutputDelimited_1);
    				if (!dir_tFileOutputDelimited_1.exists()) {
    					dir_tFileOutputDelimited_1.mkdirs();
    				}
    			}
     
    			// routines.system.Row
    			java.io.Writer outtFileOutputDelimited_1 = new java.io.BufferedWriter(
    					new java.io.OutputStreamWriter(
    							new java.io.FileOutputStream(
    									fileName_tFileOutputDelimited_1, false),
    							"ISO-8859-15"));
    			java.io.File filetFileOutputDelimited_1 = new java.io.File(
    					fileName_tFileOutputDelimited_1);
    Voilà j'espère t'avoir mis sur une piste mais l'idée est là. Elle n'est pas simple mais c'est comme ça.

    Si c'était simple on servirait à rien lol

    PS : après on peut surement faire cela dans un tJavaFlex ou autre mais c'est une méthode parmi tant d'autre pour pouvoir modifier ce nom de fichier.

  14. #14
    Futur Membre du Club
    Profil pro
    Inscrit en
    Février 2009
    Messages
    9
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2009
    Messages : 9
    Points : 6
    Points
    6
    Par défaut
    Salut jsd03,

    Je ne sais pas comment te remercier pour tout cet effort.
    J'ai lu ta réponse avec beaucoup d'attention, et j'ai essayé d'appliquer tout ce que j'ai compris, et j'ai fait des tests en mode debug pour m'assurer de ce que j'ai compris.

    Je te fais un retour de ce que j'ai observé:

    1) Le problème de nommage de fichier n'est pas relatif à l'ouverture ou à la fermeture des files comme tu le disais. En effectuant une exécution en mode debug, j'ai vu dans le code, que la création du fichier (avec l'initialisation de tous ses attributs, y compris son nom) se faisait avant la récupération des données de l'input. Donc actuellement je me trouve dans l'impossibilité d'utiliser les variables récupérées de ma base de données en input dans la définition du nom de mon fichier en output...
    Pour appuyer cette constatation je te fais coller ci-dessous la méthode (tPostgresqlInput_1Process) dans laquelle se déroule, et la définition du fichier et la récupération des données de la base de données et tu verra que cela s'effectue dans l'ordre qui ne m'arrange pas.

    public void tPostgresqlInput_1Process(
    final java.util.Map<String, Object> globalMap)
    throws TalendException {
    globalMap.put("tPostgresqlInput_1_SUBPROCESS_STATE", 0);

    String currentComponent = "";

    try {

    row1Struct row1 = new row1Struct();
    row2Struct row2 = new row2Struct();

    /**
    * [tFileOutputDelimited_1 begin ] start
    */

    ok_Hash.put("tFileOutputDelimited_1", false);
    start_Hash
    .put("tFileOutputDelimited_1", System.currentTimeMillis());
    currentComponent = "tFileOutputDelimited_1";

    int tos_count_tFileOutputDelimited_1 = 0;

    String fileName_tFileOutputDelimited_1 = (new java.io.File(
    "C:/Documents and Settings/kcherifi/Bureau/test/"
    + row2.nomFichier + ".xml")).getAbsolutePath()
    .replace("\\", "/");
    String fullName_tFileOutputDelimited_1 = null;
    String extension_tFileOutputDelimited_1 = null;
    String directory_tFileOutputDelimited_1 = null;
    if ((fileName_tFileOutputDelimited_1.indexOf("/") != -1)) {
    if (fileName_tFileOutputDelimited_1.lastIndexOf(".") < fileName_tFileOutputDelimited_1
    .lastIndexOf("/")) {
    fullName_tFileOutputDelimited_1 = fileName_tFileOutputDelimited_1;
    extension_tFileOutputDelimited_1 = "";
    } else {
    fullName_tFileOutputDelimited_1 = fileName_tFileOutputDelimited_1
    .substring(0, fileName_tFileOutputDelimited_1
    .lastIndexOf("."));
    extension_tFileOutputDelimited_1 = fileName_tFileOutputDelimited_1
    .substring(fileName_tFileOutputDelimited_1
    .lastIndexOf("."));
    }
    directory_tFileOutputDelimited_1 = fileName_tFileOutputDelimited_1
    .substring(0, fileName_tFileOutputDelimited_1
    .lastIndexOf("/"));
    } else {
    if (fileName_tFileOutputDelimited_1.lastIndexOf(".") != -1) {
    fullName_tFileOutputDelimited_1 = fileName_tFileOutputDelimited_1
    .substring(0, fileName_tFileOutputDelimited_1
    .lastIndexOf("."));
    extension_tFileOutputDelimited_1 = fileName_tFileOutputDelimited_1
    .substring(fileName_tFileOutputDelimited_1
    .lastIndexOf("."));
    } else {
    fullName_tFileOutputDelimited_1 = fileName_tFileOutputDelimited_1;
    extension_tFileOutputDelimited_1 = "";
    }
    directory_tFileOutputDelimited_1 = "";
    }

    int nb_line_tFileOutputDelimited_1 = 0;
    int splitEvery_tFileOutputDelimited_1 = 1000;
    int splitedFileNo_tFileOutputDelimited_1 = 0;
    int currentRow_tFileOutputDelimited_1 = 0;

    final String OUT_DELIM_tFileOutputDelimited_1 = /**
    * Start field
    * tFileOutputDelimited_1:FIELDSEPARATOR
    */
    ""/** End field tFileOutputDelimited_1:FIELDSEPARATOR */
    ;

    final String OUT_DELIM_ROWSEP_tFileOutputDelimited_1 = /**
    * Start
    * field
    * tFileOutputDelimited_1:ROWSEPARATOR
    */
    ""/** End field tFileOutputDelimited_1:ROWSEPARATOR */
    ;

    // create directory only if not exists
    if (directory_tFileOutputDelimited_1 != null
    && directory_tFileOutputDelimited_1.trim().length() != 0) {
    java.io.File dir_tFileOutputDelimited_1 = new java.io.File(
    directory_tFileOutputDelimited_1);
    if (!dir_tFileOutputDelimited_1.exists()) {
    dir_tFileOutputDelimited_1.mkdirs();
    }
    }

    // routines.system.Row
    java.io.Writer outtFileOutputDelimited_1 = new java.io.BufferedWriter(
    new java.io.OutputStreamWriter(
    new java.io.FileOutputStream(
    fileName_tFileOutputDelimited_1, false),
    "ISO-8859-15"));
    java.io.File filetFileOutputDelimited_1 = new java.io.File(
    fileName_tFileOutputDelimited_1);

    /**
    * [tFileOutputDelimited_1 begin ] stop
    */

    /**
    * [tJavaRow_1 begin ] start
    */

    ok_Hash.put("tJavaRow_1", false);
    start_Hash.put("tJavaRow_1", System.currentTimeMillis());
    currentComponent = "tJavaRow_1";

    int tos_count_tJavaRow_1 = 0;

    int nb_line_tJavaRow_1 = 0;

    /**
    * [tJavaRow_1 begin ] stop
    */

    /**
    * [tPostgresqlInput_1 begin ] start
    */

    ok_Hash.put("tPostgresqlInput_1", false);
    start_Hash.put("tPostgresqlInput_1", System.currentTimeMillis());
    currentComponent = "tPostgresqlInput_1";

    int tos_count_tPostgresqlInput_1 = 0;

    int nb_line_tPostgresqlInput_1 = 0;
    java.sql.Connection conn_tPostgresqlInput_1 = null;

    java.lang.Class.forName("org.postgresql.Driver");
    String url_tPostgresqlInput_1 = "jdbc:postgresql://"
    + "172.30.1.13:5432/baserepoposlogmom" + ":" + "5432" + "/"
    + "";
    String dbUser_tPostgresqlInput_1 = "postgres";
    String dbPwd_tPostgresqlInput_1 = "postgres";
    conn_tPostgresqlInput_1 = java.sql.DriverManager.getConnection(
    url_tPostgresqlInput_1, dbUser_tPostgresqlInput_1,
    dbPwd_tPostgresqlInput_1);
    conn_tPostgresqlInput_1.setAutoCommit(false);

    java.sql.Statement stmt_tPostgresqlInput_1 = conn_tPostgresqlInput_1
    .createStatement();
    java.sql.ResultSet rs_tPostgresqlInput_1 = stmt_tPostgresqlInput_1
    .executeQuery("select \"dt_dwglposlog_actif\".\"c_idenseigne\",\"dt_dwglposlog_actif\".\"c_idstore\", \"dt_dwglposlog_actif\".\"c_ncaisse\",\"dt_dwglposlog_actif\".\"c_poslogdata\", \"dt_dwglposlog_actif\".\"c_numtrx\",\"dt_dwglposlog_actif\".\"c_datetrx\" from \"public\".\"dt_dwglposlog_actif\"");
    java.sql.ResultSetMetaData rsmd_tPostgresqlInput_1 = rs_tPostgresqlInput_1
    .getMetaData();
    int colQtyInRs_tPostgresqlInput_1 = rsmd_tPostgresqlInput_1
    .getColumnCount();
    globalMap
    .put(
    "tPostgresqlInput_1_QUERY",
    "select \"dt_dwglposlog_actif\".\"c_idenseigne\",\"dt_dwglposlog_actif\".\"c_idstore\", \"dt_dwglposlog_actif\".\"c_ncaisse\",\"dt_dwglposlog_actif\".\"c_poslogdata\", \"dt_dwglposlog_actif\".\"c_numtrx\",\"dt_dwglposlog_actif\".\"c_datetrx\" from \"public\".\"dt_dwglposlog_actif\"");
    String tmpContent_tPostgresqlInput_1 = null;
    while (rs_tPostgresqlInput_1.next()) {
    nb_line_tPostgresqlInput_1++;
    if (colQtyInRs_tPostgresqlInput_1 < 1) {
    row1.c_idenseigne = null;
    } else {
    tmpContent_tPostgresqlInput_1 = rs_tPostgresqlInput_1
    .getString(1);
    if (tmpContent_tPostgresqlInput_1 != null) {
    row1.c_idenseigne = tmpContent_tPostgresqlInput_1;
    } else {
    row1.c_idenseigne = null;
    }
    }
    if (colQtyInRs_tPostgresqlInput_1 < 2) {
    row1.c_idstore = null;
    } else {
    if (rs_tPostgresqlInput_1.getObject(2) != null) {
    row1.c_idstore = rs_tPostgresqlInput_1.getDouble(2);
    } else {
    row1.c_idstore = null;
    }
    }
    if (colQtyInRs_tPostgresqlInput_1 < 3) {
    row1.c_ncaisse = null;
    } else {
    tmpContent_tPostgresqlInput_1 = rs_tPostgresqlInput_1
    .getString(3);
    if (tmpContent_tPostgresqlInput_1 != null) {
    row1.c_ncaisse = tmpContent_tPostgresqlInput_1;
    } else {
    row1.c_ncaisse = null;
    }
    }
    if (colQtyInRs_tPostgresqlInput_1 < 4) {
    row1.c_poslogdata = null;
    } else {
    tmpContent_tPostgresqlInput_1 = rs_tPostgresqlInput_1
    .getString(4);
    if (tmpContent_tPostgresqlInput_1 != null) {
    row1.c_poslogdata = tmpContent_tPostgresqlInput_1;
    } else {
    row1.c_poslogdata = null;
    }
    }
    if (colQtyInRs_tPostgresqlInput_1 < 5) {
    row1.c_numtrx = null;
    } else {
    tmpContent_tPostgresqlInput_1 = rs_tPostgresqlInput_1
    .getString(5);
    if (tmpContent_tPostgresqlInput_1 != null) {
    row1.c_numtrx = tmpContent_tPostgresqlInput_1;
    } else {
    row1.c_numtrx = null;
    }
    }
    if (colQtyInRs_tPostgresqlInput_1 < 6) {
    row1.c_datetrx = null;
    } else {
    tmpContent_tPostgresqlInput_1 = rs_tPostgresqlInput_1
    .getString(6);
    if (tmpContent_tPostgresqlInput_1 != null) {
    row1.c_datetrx = tmpContent_tPostgresqlInput_1;
    } else {
    row1.c_datetrx = null;
    }
    }

    /**
    * [tPostgresqlInput_1 begin ] stop
    */
    /**
    * [tPostgresqlInput_1 main ] start
    */

    currentComponent = "tPostgresqlInput_1";

    tos_count_tPostgresqlInput_1++;

    /**
    * [tPostgresqlInput_1 main ] stop
    */

    /**
    * [tJavaRow_1 main ] start
    */

    currentComponent = "tJavaRow_1";

    // Code generate according to input schema and output schema
    row2.contenu = row1.c_poslogdata;

    nb_line_tJavaRow_1++;

    tos_count_tJavaRow_1++;

    /**
    * [tJavaRow_1 main ] stop
    */

    /**
    * [tFileOutputDelimited_1 main ] start
    */

    currentComponent = "tFileOutputDelimited_1";

    StringBuilder sb_tFileOutputDelimited_1 = new StringBuilder();

    if (row2.contenu != null) {

    sb_tFileOutputDelimited_1.append(

    row2.contenu

    );

    }

    sb_tFileOutputDelimited_1
    .append(OUT_DELIM_tFileOutputDelimited_1);

    if (row2.nomFichier != null) {

    sb_tFileOutputDelimited_1.append(

    row2.nomFichier

    );

    }

    sb_tFileOutputDelimited_1
    .append(OUT_DELIM_ROWSEP_tFileOutputDelimited_1);

    outtFileOutputDelimited_1.write(sb_tFileOutputDelimited_1
    .toString());

    nb_line_tFileOutputDelimited_1++;

    tos_count_tFileOutputDelimited_1++;

    /**
    * [tFileOutputDelimited_1 main ] stop
    */

    /**
    * [tPostgresqlInput_1 end ] start
    */

    currentComponent = "tPostgresqlInput_1";

    }
    stmt_tPostgresqlInput_1.close();

    conn_tPostgresqlInput_1.commit();
    conn_tPostgresqlInput_1.close();

    globalMap.put("tPostgresqlInput_1_NB_LINE",
    nb_line_tPostgresqlInput_1);

    ok_Hash.put("tPostgresqlInput_1", true);
    end_Hash.put("tPostgresqlInput_1", System.currentTimeMillis());

    /**
    * [tPostgresqlInput_1 end ] stop
    */

    /**
    * [tJavaRow_1 end ] start
    */

    currentComponent = "tJavaRow_1";

    globalMap.put("tJavaRow_1_NB_LINE", nb_line_tJavaRow_1);

    ok_Hash.put("tJavaRow_1", true);
    end_Hash.put("tJavaRow_1", System.currentTimeMillis());

    /**
    * [tJavaRow_1 end ] stop
    */

    /**
    * [tFileOutputDelimited_1 end ] start
    */

    currentComponent = "tFileOutputDelimited_1";

    outtFileOutputDelimited_1.close();
    globalMap.put("tFileOutputDelimited_1_NB_LINE",
    nb_line_tFileOutputDelimited_1);

    ok_Hash.put("tFileOutputDelimited_1", true);
    end_Hash.put("tFileOutputDelimited_1", System.currentTimeMillis());

    /**
    * [tFileOutputDelimited_1 end ] stop
    */

    } catch (Exception e) {

    throw new TalendException(e, currentComponent, globalMap);

    }

    globalMap.put("tPostgresqlInput_1_SUBPROCESS_STATE", 1);
    }
    Donc pour récapituler: le programme créer autant de fichiers que de lignes lues dans le input de la BDD, mais comme (row2.nomFichier) n'est pas encore initialisé au moment de la création du fichier, le nom va être égale à null.
    Et comme à chaque création, on récupère toujours null, le programme ouvre à chaque fois le même fichier (pour mon cas: "null.xml") dans lequel il va insérer les données que je veux lui mettre en contenu (ceci se passe merveilleusement bien), et donc à la fin de l'exécution du job, je n'aurais qu'un seul fichier produit qui porte le nom "null.xml" et qui va contenir la concaténation de toutes lignes lues depuis le début de l'exécution du programme (Je dis concaténation parce que c'est ce que j'ai observé après mes tests, et j'explique cela par le fait que Talend doit concaténer les écritures s'il manipule un même fichier. A confirmer...).

    Mon problème est donc relatif à l'ordre d'exécution des tâches dans le code java généré par Talend==> je veux que la lecture des données en input s'effectue avant la création du fichier output.

    2) Supposons maintenant que le problème est dû la non fermeture du flux dans le code généré (ce qui à vrai dire m'étonnerait). Peux-tu me dire comment faire pour insérer le bout de code dans lequel tu voulais que je ferme le fichier. Je sais que c'est une question d'usage, mais je ne parviens pas à le faire. Quand je me mets sur le code généré, Talend ne me donne pas l'autorisation d'écrire (je travaille avec la version TOS-Win32-r28760-V3.2.0M3). Je me souviens qu'au début de l'année, j'ai travaillé avec une version plus ancienne, qui me donnais le droit d'écriture sur le code généré, mais je perdais tout ce que je rajouter à la moindre modification dans le design du job...Ça m'intéresse donc de savoir comment faire pour personnaliser un peu le code généré par Talend.

    Merci à toi jsd03 et merci pour tous les autres qui peuvent m'apporter leur aide.

  15. #15
    Rédacteur
    Avatar de jsd03
    Homme Profil pro
    Conseil - Consultant en systèmes d'information
    Inscrit en
    Août 2008
    Messages
    1 221
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Indre et Loire (Centre)

    Informations professionnelles :
    Activité : Conseil - Consultant en systèmes d'information

    Informations forums :
    Inscription : Août 2008
    Messages : 1 221
    Points : 6 506
    Points
    6 506
    Par défaut
    Je vais faire un schéma pour illustrer ce que la méthode que je t'avais proposer.

    Actuellement le job ce comporte ainsi :

    [création des variables du job (SourceDeDonnées, FichierDeSortie dont son nom)]
    |
    |
    [ouverture de la source de données]
    |
    |
    [lecture - transformation]
    |
    |
    [chargement des lignes dans le fichier]
    |
    |
    [Fermeture du fichier]

    Ca c'est ce que tu as pu remarqué et c'est donc pour cela qu'on ne peut pas créer un fichier pour chaque ligne.

    Maintenant si tu mets en place ma solution (avec un tJavaRow comme je l'ai expliqué) ça te donnera ceci :

    [création des variables du job (SourceDeDonnées, FichierDeSortie dont son nom)]
    |
    |
    [ouverture de la source de données]
    |
    |
    [lecture - transformation]
    |
    |
    [tJavaRow avec
    ......................1-[Fermeture du fichier]
    ......................2- redéfinition des variables du fichier de sortie
    ......................3- création des lignes de sortie
    ]

    |
    |
    [chargement des lignes dans le fichier]
    |
    |
    [Fermeture du fichier]

    Du coup maintenant le fichier de sortie sera différent pour chaque ligne.

    C'est mieux là ? Si ce n'est pas le cas j'essaierai de t'envoyer un job avec la méthode. Mais pour le moment je n'ai pas de TOS sous la main..

  16. #16
    Futur Membre du Club
    Profil pro
    Inscrit en
    Février 2009
    Messages
    9
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2009
    Messages : 9
    Points : 6
    Points
    6
    Par défaut
    J'ai testé et ça marche. Mille mercis pour toi jsd03 et pour tous les autres.

    Schéma de la solution


    (1)tBDDInput-[main]->(2)tJavaRow-[main]->(3)tFileOutputDelimited
    Contenu du tJavaRow

    //Fermeture du fichier
    outtFileOutputDelimited_1.close();



    //Code generate according to input schema and output schema
    output_row.contenu = input_row.c_poslogdata;
    String nomFichier = input_row.c_idstore.intValue() + input_row.c_ncaisse + input_row.c_numtrx;


    //redéfinition des variables du fichier de sortie
    fileName_tFileOutputDelimited_1 = (new java.io.File(
    "C:/Documents and Settings/kcherifi/Bureau/test/"
    + nomFichier + ".xml")).getAbsolutePath()
    .replace("\\", "/");
    outtFileOutputDelimited_1 = new java.io.BufferedWriter(
    new java.io.OutputStreamWriter(
    new java.io.FileOutputStream(
    fileName_tFileOutputDelimited_1, false),
    "ISO-8859-15"));

    Vous trouverez le détail de la solution dans le fichier joint.

    Encore merci pour vous tous et au plaisir de vous revoir pour un autre problème Talend.
    Images attachées Images attachées  

  17. #17
    Rédacteur
    Avatar de jsd03
    Homme Profil pro
    Conseil - Consultant en systèmes d'information
    Inscrit en
    Août 2008
    Messages
    1 221
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Indre et Loire (Centre)

    Informations professionnelles :
    Activité : Conseil - Consultant en systèmes d'information

    Informations forums :
    Inscription : Août 2008
    Messages : 1 221
    Points : 6 506
    Points
    6 506
    Par défaut
    Super ! on y est arrivé

    Par contre je ne vois pas ta pièce jointe pour ceux qui voudraient y jetter un coup d'oeil.

    Par contre pour le code moi j'aurai mis cela :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    nomFichier = input_row.c_idstore.intValue() + input_row.c_ncaisse + input_row.c_numtrx;
    ...
    à la place de

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    String nomFichier = input_row.c_idstore.intValue() + input_row.c_ncaisse + input_row.c_numtrx;
    ...
    Bonne continuation à toi

    ED : je la vois maintenant ta pièce jointe

  18. #18
    Candidat au Club
    Profil pro
    Inscrit en
    Avril 2012
    Messages
    7
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2012
    Messages : 7
    Points : 4
    Points
    4
    Par défaut
    je viens d'utilsié ce post pour effectué la céation de plusieur fichiers, mais il me fait une exception bizarre.

    Voici la log

    Démarrage du jobGENERATION_XML a 11:24 25/04/2012.

    [statistics] connecting to socket on port 4304
    [statistics] connected

    Date : 25-04-2012 Heure : 11:24:09
    =====================================================
    Job : GENERATION_XML Projet : BI_DICODON
    User : S31784
    Environnement : DEV
    TempBasePathLocal : null
    =====================================================
    Exception in component tJavaRow_1
    java.io.FileNotFoundException: C:\Code derogation commission (O\N).xml (Le chemin d'accès spécifié est introuvable)
    at java.io.FileOutputStream.open(Native Method)
    at java.io.FileOutputStream.<init>(Unknown Source)
    at java.io.FileOutputStream.<init>(Unknown Source)
    at bi_dicodon.generation_xml_0_2.GENERATION_XML.tMSSqlInput_1Process(GENERATION_XML.java:3036)
    at bi_dicodon.generation_xml_0_2.GENERATION_XML.Cartouche_Debut_JOB_1_tJava_1Process(GENERATION_XML.java:690)
    at bi_dicodon.generation_xml_0_2.GENERATION_XML.runJobInTOS(GENERATION_XML.java:3752)
    at bi_dicodon.generation_xml_0_2.GENERATION_XML.main(GENERATION_XML.java:3461)
    [statistics] disconnected
    Job GENERATION_XML terminé à 11:24 25/04/2012. [Code sortie=1]

  19. #19
    Candidat au Club
    Profil pro
    Inscrit en
    Avril 2012
    Messages
    7
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2012
    Messages : 7
    Points : 4
    Points
    4
    Par défaut
    Problème résolu

  20. #20
    Nouveau Candidat au Club
    Homme Profil pro
    urbaniste
    Inscrit en
    Novembre 2013
    Messages
    1
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : urbaniste
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Novembre 2013
    Messages : 1
    Points : 1
    Points
    1
    Par défaut redéfinition des variables du fichier de sortie
    Bonjour à tous.
    Grâce à ce forum j'ai pu générer un fichier par ligne de sortie sans soucis. Je galerais car je ne fermais ni redéfinissait les variables.
    Mes contextes étaient corrects mais au final chaque fichier se nommait null !!!
    Je nomme mes fichiers selon un champ contenu dans chaque ligne.
    Je passe le tout à un autre flux qui exécute une requête avec en critère ce fameux champ.
    A l'exécution tout se passe bien, je vois défiler toutes mes valeurs.
    Par contre dans le tfileoutputlimited j'aimerai y redéfinir les variables __INCLUDEHEADER__ et surtout __APPEND__.
    Sans cela tous mes fichiers comporte une seule ligne, la dernière de la requête paramétrée...

    Quelqu'un pourrait il m'aider à redéfinir ces deux variables dans le tja varow ?

    Merci d'avance

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 2 12 DernièreDernière

Discussions similaires

  1. Makefile avec plusieurs fichiers output
    Par virtuadrack dans le forum Systèmes de compilation
    Réponses: 4
    Dernier message: 29/10/2007, 23h48
  2. [struts] utilisation de plusieurs fichiers de config
    Par Boosters dans le forum Struts 1
    Réponses: 4
    Dernier message: 25/03/2004, 11h04
  3. Tester la presence de plusieurs fichiers
    Par Little_Goldo dans le forum Linux
    Réponses: 4
    Dernier message: 17/03/2004, 12h34
  4. [struts] utiliser plusieurs fichiers properties
    Par jaimepasteevy dans le forum Struts 1
    Réponses: 7
    Dernier message: 03/10/2003, 18h02
  5. Génerer automatiquement plusieurs fichier .doc
    Par brunovitch dans le forum QuickReport
    Réponses: 3
    Dernier message: 09/07/2002, 09h19

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