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 :

Conversion string Talend


Sujet :

Développement de jobs

  1. #1
    Membre à l'essai

    Homme Profil pro
    Consultant en Business Intelligence
    Inscrit en
    Janvier 2016
    Messages
    16
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Consultant en Business Intelligence

    Informations forums :
    Inscription : Janvier 2016
    Messages : 16
    Points : 20
    Points
    20
    Billets dans le blog
    1
    Par défaut Conversion string Talend
    Bonjour à tous,

    je travaille actuellement sur un projet avec Talend et je rencontre un problème avec des chaines de caractères.

    J'ai une table qui est alimentée avec un select que je fais sur une autre table. Dans cette table j'ai un champ X qui contient une chaine de 29 caractères :

    ISS 024 60020

    Des espaces sont donc présents, à partir de ça j'utilise la fonction SUBSTR(25,5) pour ne pas récupérer ce qui m'intéresse à savoir les chiffres qui sont présents de la position 25 à la position 30 ==> 60020 dans l'exemple.

    Lorsque je rencontre ce type de cas aucun problème je prends mes données et je charge ma table de destination. Seulement si le champ X ne contient que la chaine ISS (donc sans les chiffres) ma fonction SUBSTR(25,5) s'exécute quand même et j'aurais alors dans ma table destination un enregistrement du type :

    ' '

    (avec que des espaces) ce qui me pose des soucis pour des traitements ultérieurs.


    Ma question est la suivante, comment dire à Talend ne ne pas appliquer la fonction sur la chaine si il n'y as pas de chiffres (à partir de la position 25) ?

    Si j'arrive à isoler ces cas je pourrais alors remplacer la chaine par "CE QUE JE VEUT" , ce que j'arrive déjà a faire quand les données dans la source sont null.

    Merci pour votre aide.


    Merci d'avance.

  2. #2
    Membre éprouvé
    Avatar de ce.moi7
    Homme Profil pro
    Ingénieur d'études en développement et déploiement d'applications
    Inscrit en
    Mars 2004
    Messages
    164
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Ingénieur d'études en développement et déploiement d'applications
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2004
    Messages : 164
    Points : 1 023
    Points
    1 023
    Par défaut
    Citation Envoyé par JérémyBI Voir le message
    Bonjour à tous,

    je travaille actuellement sur un projet avec Talend et je rencontre un problème avec des chaines de caractères.

    J'ai une table qui est alimentée avec un select que je fais sur une autre table. Dans cette table j'ai un champ X qui contient une chaine de 29 caractères :

    ISS 024 60020

    Des espaces sont donc présents, à partir de ça j'utilise la fonction SUBSTR(25,5) pour ne pas récupérer ce qui m'intéresse à savoir les chiffres qui sont présents de la position 25 à la position 30 ==> 60020 dans l'exemple.

    Lorsque je rencontre ce type de cas aucun problème je prends mes données et je charge ma table de destination. Seulement si le champ X ne contient que la chaine ISS (donc sans les chiffres) ma fonction SUBSTR(25,5) s'exécute quand même et j'aurais alors dans ma table destination un enregistrement du type :

    ' '

    (avec que des espaces) ce qui me pose des soucis pour des traitements ultérieurs.


    Ma question est la suivante, comment dire à Talend ne ne pas appliquer la fonction sur la chaine si il n'y as pas de chiffres (à partir de la position 25) ?

    Si j'arrive à isoler ces cas je pourrais alors remplacer la chaine par "CE QUE JE VEUT" , ce que j'arrive déjà a faire quand les données dans la source sont null.

    Merci pour votre aide.


    Merci d'avance.

    Bonjour,

    Est-ce que tu utilises le substring dans une requête SELECT (si oui, sur quelle base de données) ou est-ce que tu utilises les fonctions de Talend?

    Bonne après-midi.

  3. #3
    Membre à l'essai

    Homme Profil pro
    Consultant en Business Intelligence
    Inscrit en
    Janvier 2016
    Messages
    16
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Consultant en Business Intelligence

    Informations forums :
    Inscription : Janvier 2016
    Messages : 16
    Points : 20
    Points
    20
    Billets dans le blog
    1
    Par défaut
    Bonjour, merci de ta réponse actuellement j'utilise la fonction SUBSTR via ma requête SQL. Je pourrais très bien le faire avec Talend mais comment appliquer une fonction que sur certaines conditions ?.

  4. #4
    Nouveau membre du Club
    Homme Profil pro
    Inscrit en
    Mai 2012
    Messages
    17
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mai 2012
    Messages : 17
    Points : 25
    Points
    25
    Par défaut
    Bonjour,

    t'a 2 solutions :
    1- continuer à faire ton SUBSTR coté BDD et ajouter la fonction decode pour les cas cette fonctionne te retourne ' '
    exemple select decode (SUBSTR('ISS 0000000000000000024 60020',25,5), ' ', 'CE QUE JE VEUX', SUBSTR('ISS 0000000000000000024 60020',25,5)) from dual
    ca va te retourner 'CE QUE JE VEUX' si ton substr renvoie ' ' ou la valeur renvoyé par substr sinon.

    2-le faire sur Talend : tu récupère ton champ X initial renvoyé par la requete et faire (dans un tMap par exemple)
    row1.champX.length() ==29 ?row1.champX.substring(24) : "CE QUE JE VEUX"

  5. #5
    Membre à l'essai

    Homme Profil pro
    Consultant en Business Intelligence
    Inscrit en
    Janvier 2016
    Messages
    16
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Consultant en Business Intelligence

    Informations forums :
    Inscription : Janvier 2016
    Messages : 16
    Points : 20
    Points
    20
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par yan81 Voir le message
    Bonjour,

    t'a 2 solutions :
    1- continuer à faire ton SUBSTR coté BDD et ajouter la fonction decode pour les cas cette fonctionne te retourne ' '
    exemple select decode (SUBSTR('ISS 0000000000000000024 60020',25,5), ' ', 'CE QUE JE VEUX', SUBSTR('ISS 0000000000000000024 60020',25,5)) from dual
    ca va te retourner 'CE QUE JE VEUX' si ton substr renvoie ' ' ou la valeur renvoyé par substr sinon.

    2-le faire sur Talend : tu récupère ton champ X initial renvoyé par la requete et faire (dans un tMap par exemple)
    row1.champX.length() ==29 ?row1.champX.substring(24) : "CE QUE JE VEUX"
    Merci pour ta réponse j'utilise postegre je dois donc utiliser un CASE. J'aimerais pouvoir définir le champ à NULL si je ne trouve pas le groupe de chiffre à partir de la position 25.

  6. #6
    Nouveau membre du Club
    Homme Profil pro
    Inscrit en
    Mai 2012
    Messages
    17
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mai 2012
    Messages : 17
    Points : 25
    Points
    25
    Par défaut
    Bonjour,

    L'idéal c'est de faire une requête simple côté postegre pour récupérer le champ et faire le traitement côté Talend.

    Par exemple : créer dans tes routines une méthode simple genre :
    public static Integer test(String str){
    if(str.length() ==29){
    try{
    return Integer.parseInt(str.substring(24));
    }catch(Exception e)
    {
    return null;
    }
    }else
    {
    return null;
    }
    }

    Appliquer cette méthode à ton champ et ca va te retourner null si il arrive pas à parser ton champ en Integer.

    Cordialement

Discussions similaires

  1. conversion string--> blob
    Par zimzoum10 dans le forum Débuter
    Réponses: 13
    Dernier message: 23/02/2005, 16h41
  2. [Conversion] String en InputStream
    Par canou94 dans le forum Langage
    Réponses: 5
    Dernier message: 22/02/2005, 15h04
  3. [CONVERSION] String -> HEXADECIMAL ...
    Par tripop dans le forum Langage
    Réponses: 9
    Dernier message: 13/01/2005, 09h42
  4. conversion String en Date (parse trop permissif)
    Par ciloulou dans le forum Collection et Stream
    Réponses: 2
    Dernier message: 13/09/2004, 18h36
  5. [FLASH MX 2004] conversion string en int.
    Par calfater dans le forum Flash
    Réponses: 3
    Dernier message: 26/05/2004, 15h00

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