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 :

Travailler sur un fichier Csv et remodeler les champs en colonnes


Sujet :

Développement de jobs

  1. #1
    Membre du Club
    Homme Profil pro
    PartNumber
    Inscrit en
    Octobre 2012
    Messages
    309
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

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

    Informations forums :
    Inscription : Octobre 2012
    Messages : 309
    Points : 65
    Points
    65
    Par défaut Travailler sur un fichier Csv et remodeler les champs en colonnes
    Bonjour ...

    J'ai un fichier Csv fait de la maniére suivante :

    Material;Description;Vendor material no
    11308782;ACCELERATOR PEDAL;
    Dispatch Date;Order No;Open Qty
    20131108;7100679672;1.000
    20131210;;1.000
    20140115;;1.000
    20140129;;1.000
    Material;Description;Vendor material no
    11308799;BRAKE VALVE;
    Dispatch Date;Order No;Open Qty
    20131108;7100679672;1.000
    20131210;;1.000
    20140115;;1.000
    20140129;;1.000
    20140205;;1.000


    et je souhaite le transformer de cette maniére :

    Materiel Descripion Date OrderNo Qty
    11308782 ACCELERATOR PEDAL 20131108 7100679672 1.000
    20131210 1.000
    20140115 1.000
    20140129 1.000
    11308799 BRAKE VALVE 20131108 7100679672 1.000
    20131210 1.000
    20140115 1.000
    20140129 1.000
    20140205 1.000

    Pour un prmeier essai j'ai utilisé ces composants :
    filterColumns ---> Tmap ----> Tnormalize ---> TextractFields

    Malheureusement le résultat n'est pas conforme.

    Merci à vous

  2. #2
    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,

    Pour ton problème, l'idée est d'écrire en sortie seulement les enregistrement du type 2 (Dispatch Date;Order No;Open Qty)
    Et de compléter le premier enregistrement par les informations de l'enregistrement du type 1 (Material;Description;Vendor material no)

    Pour ce faire tu utilises les composants suivant

    tFileInputDelimited --> tMemorizeRow -> tMap -> TfileOuputDelimited.

    Dans le tMemorizeRow, tu spécifies 3 lignes a sauvegarder (la courante, l'entête de type 2 et les données de type 1)

    Dans le tMap, tu crées des variables pour déterminer des indicateurs :
    Le type de donnée que tu vas lire (type 1 ou 2 ) que tu sauvegarde dans une variable global ,
    type de variable Object
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    "Material".equals(row2.newColumn)?globalMap.put("TYPE","1"):  "Dispatch Date".equals(row2.newColumn)?globalMap.put("TYPE","2"):""
    Une variable de type Boolean pour déterminer si c'est le label que tu lis :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     "Material".equals(row2.newColumn)||"Dispatch Date".equals(row2.newColumn)?true:false
    Et enfin une variable de type boolean pour connaitre si c'est la première ligne de type 2 que tu lis :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     "2".equals( (String)globalMap.get("TYPE") )  && Var.IsLabel ? true : false
    Attention, cette dernière variable est a déclarer en première position pour exploiter l'ordre de rafraichissement des variables dans le tMap ( la globalVariable et IsLabel contiennent la valeur calculer pour l enregistrement précedent - elles seront mise a jour juste après

    Ensuite en sortie du tMap, tu creer une 1ere sortie standard et une sortie "table join", tu as donc 2 zones de mapping, la première sera pour le 1er enregistrement, la seconde pour les enregistrements suivant

    Tu actives les filtres sur ces sorties
    filtre 1 :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     "2".equals( (String)globalMap.get("TYPE") )  && !Var.IsLabel  &&  Var.isFirstLine
    filtre 2 :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     "2".equals( (String)globalMap.get("TYPE") )  && !Var.IsLabel  &&  !Var.isFirstLine
    Pour le mapping tu sélectionnes les colonnes sources dont tu as besoin en fonction du premier enregistrement ou les autres.

    Pour terminer, dans le mapping du premier enregistrement, tu récupères les 2 variables du tMemorizeRow, elles sont de la forme :
    newColumn_tMemorizeRows_1[2]
    Le 2 correspond a l'indice du tableau, 0 est l'enregistrement courant, 2 les donnée de l enregistrement de type 1. Il n'y a pas d'aide pour récupérer cette variable, il faut aller dans le code pour la syntaxe exacte.

  3. #3
    Membre du Club
    Homme Profil pro
    PartNumber
    Inscrit en
    Octobre 2012
    Messages
    309
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

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

    Informations forums :
    Inscription : Octobre 2012
    Messages : 309
    Points : 65
    Points
    65
    Par défaut Bjr
    merci à vous, je teste .. avez vous reçu mon message en MP. Merci à vous

  4. #4
    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
    Voici quelques screenshot
    Images attachées Images attachées    

  5. #5
    Membre du Club
    Homme Profil pro
    PartNumber
    Inscrit en
    Octobre 2012
    Messages
    309
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

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

    Informations forums :
    Inscription : Octobre 2012
    Messages : 309
    Points : 65
    Points
    65
    Par défaut Hello
    Bonjour,

    désolé je travaillais sur autre choses, je met en place cette proposition et vous tiens au courant de la suite.

    Merci à vous

  6. #6
    Membre du Club
    Homme Profil pro
    PartNumber
    Inscrit en
    Octobre 2012
    Messages
    309
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

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

    Informations forums :
    Inscription : Octobre 2012
    Messages : 309
    Points : 65
    Points
    65
    Par défaut Hello
    Bonjour.

    * je ne comprend pas le sens des variables que vous avez ajouter: type1, type2 et calculeType.

    * pourquoi dans votre screenshot, dans le Map on row2, abscence des hamps e base du départ a savoir: Material, desccription et Vendor_material_no.

    * Pourquoi avoir utiliser le tfixedFlowinput sacahnt que a part d'un ichier délimité avec un ensemble de colonnes bien définit : Material, desccription et Vendor_material_no.


    Merci en tout cas .

    Cdt

  7. #7
    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,

    1) Type1 et Type2 corresponde au label contenu dans ton fichier permettant de distinguer les types d'enregistrements que le programme lira. Cela me permet d'éviter de retaper a chaque fois le text pour mes conditions.
    la variable calculType, de type Object ne sert a rien dans le programme, c'est une astuce pour alimenter une variable globale "TYPE" qui est utilisé pour sauvegarder le type d'enregistrement en cours de lecture
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Var.type1.equals(row2.newColumn)?globalMap.put("TYPE","1"):  Var.type2.equals(row2.newColumn)?globalMap.put("TYPE","2"):""
    2) je n'ai pas pris la peine de renommer les colonnes.
    Mais il faut savoir que ces colonnes vont contenir soit les libelles Material;Description;Vendor material no ou Dispatch Date;Order No;Open Qty soit les données de "type1" ou "type2" donc elles n ont pas de label spécifique. Suivant que c'est le premier enregistrement a écrire ou le reste a suivre, le mapping des colonnes sources est différent.

    3) J'ai utilisé un tFixedFlowInput en mode "use inline content" et j'ai copier coller ton exemple de donnée dans le composant. Cela me permet de me passer d'un support fichier pour mes tests. C'est bien pratique.
    Tu le remplaces évidement par un tFileInputDelimited et le tLogRow par un tFileOuptutDelimited

  8. #8
    Membre du Club
    Homme Profil pro
    PartNumber
    Inscrit en
    Octobre 2012
    Messages
    309
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

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

    Informations forums :
    Inscription : Octobre 2012
    Messages : 309
    Points : 65
    Points
    65
    Par défaut Bonjour
    Merci pour l'ensemble des ces informations.
    je suit votre raisonement que je trouve interessant.
    le dernier message d'erreur est :
    impossible de convertir le type object en booleen au niveau du tmap?
    avez vous une idée
    merci
    Images attachées Images attachées   

  9. #9
    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
    Je pense que tu as utilisé directement la variable calculType de type Object dans un filtre ( dont le résultat est de type boolean )
    Il faut utilisé a la place la variable global (String)globalMap.get("TYPE")

  10. #10
    Membre du Club
    Homme Profil pro
    PartNumber
    Inscrit en
    Octobre 2012
    Messages
    309
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

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

    Informations forums :
    Inscription : Octobre 2012
    Messages : 309
    Points : 65
    Points
    65
    Par défaut Re
    je suis navrée mais j'arrive pas a cerner la problématique ...
    j'ai changé mais toujours le meme message d'erreurs
    Merci à vous

  11. #11
    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
    Excuse moi, j'ai répondu sans regarder tes captures d'écrans

    Cela ressemble a une erreur de compilation, donc tu cliques sur l'onglet code du designer et tu verras le code java. Il devrait avoir un tag rouge qui te permet de te positionner sur l'erreur. tu peux ainsi déterminer ton problème.

  12. #12
    Membre du Club
    Homme Profil pro
    PartNumber
    Inscrit en
    Octobre 2012
    Messages
    309
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

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

    Informations forums :
    Inscription : Octobre 2012
    Messages : 309
    Points : 65
    Points
    65
    Par défaut hello
    c'est pas grave

    ci _joint le code .

    Var.IsLabel = Var.type1.equals(row2.newColumn1) ? globalMap.put("TYPE", "1") : Var.type2.equals(row2.newColumn1) ? globalMap.put("TYPE", "2") : "";

    Au fait la variable object n'est pas liée au filtre.

    Merci à vous

  13. #13
    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
    utilises plutôt cela pour la variable IsLabel :

    Var.IsLabel =
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Var.type1.equals(row2.newColumn)||Var.type2.equals(row2.newColumn)?true:false

  14. #14
    Membre du Club
    Homme Profil pro
    PartNumber
    Inscrit en
    Octobre 2012
    Messages
    309
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

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

    Informations forums :
    Inscription : Octobre 2012
    Messages : 309
    Points : 65
    Points
    65
    Par défaut Hi
    Cool merci bcp pour tous, le job fonctionne sans message d'erreurs par contre aucun resultat sur le tlogrow !
    ci joint les deux captures

    Merci bcp
    Images attachées Images attachées   

  15. #15
    Membre du Club
    Homme Profil pro
    PartNumber
    Inscrit en
    Octobre 2012
    Messages
    309
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

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

    Informations forums :
    Inscription : Octobre 2012
    Messages : 309
    Points : 65
    Points
    65
    Par défaut Bonjour
    J'ai pu générer des données qui me paraissent très bien par contre, a la sortie je n'ai pas tous les données en colonnes séparées et ça poseras tjs un problème lors du traitement suivant pour le job de migration.

    Je vous envoi une capture d’écran ..

    Mon souhait est d'avoir les 5 colonnes bien distinctes :

    Material ---- Desciption ------ Vendor Material no ----- Dispatche Date ------ Order No ------- Open Qty


    Qu'en pensez vous ?
    Merci bcp
    Images attachées Images attachées  

  16. #16
    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
    tu obtiens exactement ce que tu as présenté dans le premier message.


    Maintenant si tu veux un format différent en sortie ( 6 colonnes ) en gardant la logique actuel, il suffit de changer le schéma de sortie du tMaps et déclarer les 6 colonnes Material ---- Desciption ------ Vendor Material no ----- Dispatche Date ------ Order No ------- Open Qty dans le schema

    Puis dans le tMap toujours, tu fais évoluer ton mapping pour envoyer les bonnes colonnes sources dans les bonnes colonnes cibles comme tu le souhaites. Tu as tous les éléments pour faire ce que tu veux.

  17. #17
    Membre du Club
    Homme Profil pro
    PartNumber
    Inscrit en
    Octobre 2012
    Messages
    309
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

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

    Informations forums :
    Inscription : Octobre 2012
    Messages : 309
    Points : 65
    Points
    65
    Par défaut Merci beaucoups
    Merci beaucoup pour votre soutien, vous m'avez été ressource.
    Mille fois merci

  18. #18
    Membre du Club
    Homme Profil pro
    PartNumber
    Inscrit en
    Octobre 2012
    Messages
    309
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

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

    Informations forums :
    Inscription : Octobre 2012
    Messages : 309
    Points : 65
    Points
    65
    Par défaut Problème résolu
    Problème résolu, merci pour tous le soutien.

    Cdt

  19. #19
    Membre du Club
    Homme Profil pro
    PartNumber
    Inscrit en
    Octobre 2012
    Messages
    309
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

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

    Informations forums :
    Inscription : Octobre 2012
    Messages : 309
    Points : 65
    Points
    65
    Par défaut Re bonjour
    Je revient vers vous pou un léger problème auquel on a pas pensée.
    au fait sur le fichier csv, le Material est affiché une fois mais malheureusement il ne se répète pas sur les lignes suivantes, et pour mon job, il me faut impérativement une lecture de ces lignes..? avez vous une idée comment dupliquer ces lignes quand je suis sur le même material.?

    Screen pour plus de compréhension.


    merci
    Images attachées Images attachées  

  20. #20
    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
    Pour la colonne Material, il suffit de sauvegarder la bonne valeur dans une variable global que tu utiliseras pour le mapping dans le tMap.
    c'est le même principe que ce tu as déjà réalisé

Discussions similaires

  1. Réponses: 0
    Dernier message: 11/08/2012, 12h33
  2. [CSV] Travailler sur un fichier temporaire?
    Par toniodp dans le forum Langage
    Réponses: 3
    Dernier message: 16/05/2007, 11h59
  3. travailler sur un fichier csv
    Par james2606 dans le forum Langage
    Réponses: 3
    Dernier message: 24/01/2007, 10h27
  4. Réponses: 7
    Dernier message: 23/03/2005, 22h23
  5. [Excel] Travailler sur un fichier excel existant
    Par scoder dans le forum Bibliothèques et frameworks
    Réponses: 2
    Dernier message: 26/10/2004, 12h54

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