Précédent   Forum des professionnels en informatique > Logiciels > Solutions d'entreprise > Business Intelligence > ETL > Talend
Talend Forum d'entraide sur Talend (Talend Open Studio, ...). Avant de poster --> FAQ Talend, Tutoriels Talend
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 25/11/2011, 23h53   #1
Invité de passage
 
Homme
Développeur informatique
Inscription : septembre 2011
Messages : 11
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France

Informations professionnelles :
Activité : Développeur informatique

Informations forums :
Inscription : septembre 2011
Messages : 11
Points : 0
Points : 0
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.
billyboy94 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 28/11/2011, 09h17   #2
Membre Expert
 
Avatar de haskouse
 
Homme Mustapha EL HASSAK
Ingénieur développement logiciels
Inscription : août 2009
Messages : 627
Détails du profil
Informations personnelles :
Nom : Homme Mustapha EL HASSAK
Âge : 26
Localisation : Maroc

Informations professionnelles :
Activité : Ingénieur développement logiciels
Secteur : Finance

Informations forums :
Inscription : août 2009
Messages : 627
Points : 1 514
Points : 1 514
Salut,

Essai avec ce bout de code :

Code :
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)

Mes articles publiés
haskouse est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 28/11/2011, 20h02   #3
Invité de passage
 
Homme
Développeur informatique
Inscription : septembre 2011
Messages : 11
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France

Informations professionnelles :
Activité : Développeur informatique

Informations forums :
Inscription : septembre 2011
Messages : 11
Points : 0
Points : 0
Merci pour ton aide

Donc, j'ai dû appliquer ce code :

Code :
Math.floor(Double.parseDouble(row1.prix_moyen))!=Double.parseDouble(row1.prix_moyen)
Mais j'ai une erreur java :
Code :
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?
billyboy94 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 29/11/2011, 09h49   #4
Membre Expert
 
Avatar de haskouse
 
Homme Mustapha EL HASSAK
Ingénieur développement logiciels
Inscription : août 2009
Messages : 627
Détails du profil
Informations personnelles :
Nom : Homme Mustapha EL HASSAK
Âge : 26
Localisation : Maroc

Informations professionnelles :
Activité : Ingénieur développement logiciels
Secteur : Finance

Informations forums :
Inscription : août 2009
Messages : 627
Points : 1 514
Points : 1 514
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)

Mes articles publiés
haskouse est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 29/11/2011, 09h56   #5
Membre du Club
 
Cédric LECLERC
Développeur informatique
Inscription : mai 2009
Messages : 38
Détails du profil
Informations personnelles :
Nom : Cédric LECLERC
Âge : 31

Informations professionnelles :
Activité : Développeur informatique

Informations forums :
Inscription : mai 2009
Messages : 38
Points : 50
Points : 50
Bonjour,
L'idée ici serait peut-être d'utiliser les expressions régulières
Exemple :
Code :
"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.
toon49500 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 30/11/2011, 15h27   #6
Invité de passage
 
Homme
Développeur informatique
Inscription : septembre 2011
Messages : 11
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France

Informations professionnelles :
Activité : Développeur informatique

Informations forums :
Inscription : septembre 2011
Messages : 11
Points : 0
Points : 0
Citation:
Envoyé par toon49500 Voir le message
Bonjour,
L'idée ici serait peut-être d'utiliser les expressions régulières
Exemple :
Code :
"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.
billyboy94 est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 07h34.


 
 
 
 
Partenaires

Hébergement Web