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 :

Concaténer plusieurs lignes suivant un pattern


Sujet :

Développement de jobs

  1. #1
    Nouveau Candidat au Club
    Homme Profil pro
    Développeur décisionnel
    Inscrit en
    Décembre 2023
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur décisionnel
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Décembre 2023
    Messages : 2
    Points : 1
    Points
    1
    Par défaut Concaténer plusieurs lignes suivant un pattern
    Bonjour à tous, j'ai actuellement un blocage.
    J'ai dans mon job un schéma d'entrée qui contient la colonne "valeur" qui ressemble à ceci :

    blablablabla
    [blablabla]:
    test tost * tast
    [
    aaaaaaaa
    bbbbbbb
    cccccccc
    dddddddd
    eeeeeeee
    ]
    gergeres
    sergresges
    jh,ggukyu
    kuykuyg
    [blablo]:
    test tost * tast
    [
    fffffffff
    gggggggg
    hhhhhhhhhhh
    ]


    je souhaite récupérer en sortie dans une colonne de mon schéma un string qui concatène comme ceci les lignes présentes entre une ligne égale à "[" et une égale à "]":
    [ aaaaaaaa bbbbbbb cccccccc dddddddd eeeeeeee ]
    [ fffffffff gggggggg hhhhhhhhhhh ]

    J'imagine que je dois passer par un composant java tel que TJavaFlex mais je n'arrive pas à le manipuler. J'ai aussi étudié la piste d'utiliser TmemorizeRows sans succès
    J'espère avoir été clair dans mes propos.
    Merci à ceux qui pourront m'aider.
    Je reste disponible pour plus d'informations.

  2. #2
    Membre expérimenté Avatar de supergeoffrey
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Octobre 2010
    Messages
    802
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2010
    Messages : 802
    Points : 1 698
    Points
    1 698
    Par défaut
    Bonjour,

    C'est pas clair pour moi !

    Citation Envoyé par zilba9
    blablablabla
    [blablabla]:
    test tost * tast
    [
    aaaaaaaa
    bbbbbbb
    cccccccc
    dddddddd
    eeeeeeee
    ]
    gergeres
    sergresges
    jh,ggukyu
    kuykuyg
    [blablo]:
    test tost * tast
    [
    fffffffff
    gggggggg
    hhhhhhhhhhh
    ]
    C'est une ligne de ton entrée ou 17 lignes ?


    Si c'est une ligne tu peux utiliser tJavaRow

    Code java : 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
     
    StringBuilder sb = new StringBuilder();
    String[] inputLines = input_row.valeur.split("\n", -1);
     
    /*
     accumulator == null implique hors de []
     accumulator != null implique dans []
    */
    java.util.List<String> accumulator = null; 
     
    for (String line : inputLines) {
      if (accumulator != null) {
        if ( "]".equals(line)) {
          // flush
          if (sb.length() > 0) {
            sb.add("\n");
          }
          sb.append("[");
          for (String s : accumulator) {
            sb.append(" ").append(s);
          }
          sb.append(" ]");
          accumulator = null;
        } else {
          accumulator.add(line);
        }
      } else {
        if("[".equals(line)) {
           accumulator = new java.util.ArrayList<String>();
        }
      }
    }
     
    if (accumulator != null) {
     // A toi de voir si tu souhaite flush dans le cas ou un [ n'est pas fermé
    }
     
    output_row.valeur = sb.toString();

    Si c'est 17 lignes c'est presque la même chose il te faudra un tJavaFlex et un tFilterRow mais tu ne pourra pas gérer le cas "[" non fermé. Ou peut-être avec un tMerge (il me semble) en harcodant un "]" supplémentaire dans un TfixedFlowInput

    Code java : 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
     
    /* Code de début */
     
    /*
     accumulator == null implique hors de []
     accumulator != null implique dans []
    */
    java.util.List<String> accumulator = null; 
     
    /* Code Main */
    // Remplacer X par le numéro 
    rowXStruct input_row = rowX;
    // Remplacer Y par le numéro 
    rowYStruct output_row = rowY;
     
    String line = input_row.valeur;
    output_row.valeur = null;
     
      if (accumulator != null) {
        if ( "]".equals(line)) {
          // flush
          StringBuilder sb = new StringBuilder();
          sb.append("[");
          for (String s : accumulator) {
            sb.append(" ").append(s);
          }
          sb.append(" ]");
          accumulator = null;
          output_row.valeur = sb.toString();
        } else {
          accumulator.add(line);
        }
      } else {
        if("[".equals(line)) {
           accumulator = new java.util.ArrayList<String>();
        }
      }
     
    /* Code de fin */
    // vide


    Et dans le tFilterRow qui suit le tJavaFlex tu peut mettre une custom condition telle que input_row.valeur != null

  3. #3
    Nouveau Candidat au Club
    Homme Profil pro
    Développeur décisionnel
    Inscrit en
    Décembre 2023
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur décisionnel
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Décembre 2023
    Messages : 2
    Points : 1
    Points
    1
    Par défaut
    Effectivement ce n'était pas clair, c'est bien 17 lignes.
    J'ai une solution qui semble fonctionner en utilisant un buffer pour sauvegarder l'information et un stringbuilder pour concaténer dans mon tjavaflex.

  4. #4
    Membre expérimenté Avatar de supergeoffrey
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Octobre 2010
    Messages
    802
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2010
    Messages : 802
    Points : 1 698
    Points
    1 698
    Par défaut
    Cool alors si tu as résolu ton problème.

    ça doit se rapprocher de ma solution !

Discussions similaires

  1. Concaténation plusieurs lignes
    Par mr_keyser dans le forum Langage SQL
    Réponses: 7
    Dernier message: 17/02/2009, 16h24
  2. concaténer plusieurs lignes dans un champs
    Par papoulouis dans le forum SQL
    Réponses: 10
    Dernier message: 30/01/2009, 21h08
  3. "concaténer" plusieurs lignes dans un seul champ
    Par djobert dans le forum Langage SQL
    Réponses: 3
    Dernier message: 02/12/2008, 19h00
  4. Concaténer plusieurs ligne d'une m^me table
    Par bobosh dans le forum Requêtes et SQL.
    Réponses: 1
    Dernier message: 11/08/2008, 17h13
  5. Reporter valeur enregistrement sur plusieurs lignes suivantes
    Par oarnold dans le forum Requêtes et SQL.
    Réponses: 8
    Dernier message: 06/03/2008, 18h52

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