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 :

Contrôler type de champ


Sujet :

Développement de jobs

  1. #1
    Membre averti
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2011
    Messages
    22
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Septembre 2011
    Messages : 22
    Par défaut Contrôler type de champ
    Bonjour à tous,

    J'ai un petit problème que je n'arrive pas à régler tout seul

    Voilà, pour commencer, j'ai un fichier CSV en entrer de ce type :
    LIGNE;PRIX MOYEN;EFFECTIF;POIDS
    1;4,03;45;6910
    2;3,15;3;1188
    3;3,73;7;2619

    J'aimerais tester chaque ligne du fichier et vérifier si ils sont bien de type numérique.

    Donc, voici mon job :
    tFileInputDelimited --row(main)--> tMap --out(main)--> tLogRow

    Et voici ce qu'il y a dans mon tMap :


    Comme vous pouvez le voir, mes tests sur les colonnes "LIGNE", "EFFECTIF" et "POIDS" fonctionne bien. En retour, j'ai 1 pour true et 0 pour false.
    Mais mon soucis, c'est sur le champ "PRIX MOYEN", étant donnée que c'est un décimal, ce test ne fonctionne pas.

    Y-a-t-il un moyen de tester si ce champ est bien un décimal?

    Merci pour votre aide.

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

    Informations professionnelles :
    Activité : Salesforce
    Secteur : Conseil

    Informations forums :
    Inscription : Août 2009
    Messages : 923
    Par défaut
    Salut,

    Essai avec ce bout de code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Math.floor(row1.prix_moyen) != row1.prix_moyen
    "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 averti
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2011
    Messages
    22
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Septembre 2011
    Messages : 22
    Par défaut
    Merci pour ton aide

    Donc, j'ai dû appliquer ce code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Math.floor(Double.parseDouble(row1.prix_moyen))!=Double.parseDouble(row1.prix_moyen)
    Mais j'ai une erreur java :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    Exception in component tMap_1
    java.lang.NumberFormatException: For input string: "gh"
    	at sun.misc.FloatingDecimal.readJavaFormatString(Unknown Source)
    	at java.lang.Double.parseDouble(Unknown Source)
    	at test_champ_type.type_champ_0_1.type_champ.tFileInputDelimited_1Process(type_champ.java:818)
    	at test_champ_type.type_champ_0_1.type_champ.runJobInTOS(type_champ.java:1154)
    	at test_champ_type.type_champ_0_1.type_champ.main(type_champ.java:1022)
    J'ai volontairement faire une erreur dans mon fichier CSV comme on peut le voir ; au lieu de me sortir "true" ou "false", j'ai cette erreur java!
    Comment régler ce problème?

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

    Informations professionnelles :
    Activité : Salesforce
    Secteur : Conseil

    Informations forums :
    Inscription : Août 2009
    Messages : 923
    Par défaut
    En effet si tu as cette erreur c'est à cause du parseDouble qui essai de convertor "sh" en un double, ce qui est impossible, donc l'exception que tu as est normal.

    Sinon si tu veux traiter cette exception je te conseille de créer une routine et de faire appel à cette routine dans ton tMap.

    Regarde ce tuto pour comprendre comment créer et utiliser des routines sous Talend.

    http://haskouse.developpez.com/tutor...ation-routine/
    "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 éclairé
    Profil pro
    Développeur informatique
    Inscrit en
    Mai 2009
    Messages
    50
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Mai 2009
    Messages : 50
    Par défaut
    Bonjour,
    L'idée ici serait peut-être d'utiliser les expressions régulières
    Exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    "MaChaineATester".matches("((-|\\+)?[0-9]+(\\.[0-9]+)?)+")?true:false
    Si la chaine à tester ne correspond pas à une valeur numérique alors la fonction renverra false.

    Bon courage.

  6. #6
    Membre averti
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2011
    Messages
    22
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Septembre 2011
    Messages : 22
    Par défaut
    Citation Envoyé par toon49500 Voir le message
    Bonjour,
    L'idée ici serait peut-être d'utiliser les expressions régulières
    Exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    "MaChaineATester".matches("((-|\\+)?[0-9]+(\\.[0-9]+)?)+")?true:false
    Si la chaine à tester ne correspond pas à une valeur numérique alors la fonction renverra false.

    Bon courage.
    Désolé pour la réponse si tardive

    C'est super , ca fonctionne super bien.
    Je n'en demandais pas plus.

    En revanche, si j'ai plus de 2 chiffres après la virgule, le résultat est TRUE!!
    Y-a-t-il un paramètre à ajouter pour mettre en erreur si il y a plus de 2 chiffres après la virgule?

    Merci pour votre aide.

Discussions similaires

  1. Pb de type de champs dans une requête
    Par djouahra.karim1 dans le forum Bases de données
    Réponses: 5
    Dernier message: 23/05/2005, 15h19
  2. [Struts][Conseil] type de champs ActionForm
    Par Sniper37 dans le forum Struts 1
    Réponses: 10
    Dernier message: 12/04/2005, 15h43
  3. Changement type de champ: ORA-01439
    Par PATMOR dans le forum Oracle
    Réponses: 8
    Dernier message: 12/02/2005, 16h14
  4. [Oracle][Delphi 7] Problème type de champ
    Par tiennos dans le forum Bases de données
    Réponses: 3
    Dernier message: 16/07/2004, 10h17
  5. [ADO] Constantes des types de champ
    Par SpaceFrog dans le forum VB 6 et antérieur
    Réponses: 3
    Dernier message: 05/09/2002, 11h08

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