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 19/09/2011, 12h30   #1
Futur Membre du Club
 
Inscription : juillet 2011
Messages : 99
Détails du profil
Informations forums :
Inscription : juillet 2011
Messages : 99
Points : 18
Points : 18
Par défaut comment convertir une colonne string en float

Bonjour à tous j'essaye de convertir quelques colonnes de type string en float, j'ai utilisé un Tmap et j'ai inséré le code suivant:
Code :
Float.valueOf(row1.SOLDEAVANTTRIMESTRE).floatValue()
mais malheureusement il m'affiche ce message d'erreur :
Citation:
Exception in component tMap_1
java.lang.NumberFormatException: For input string: "-357,46"
at sun.misc.FloatingDecimal.readJavaFormatString(FloatingDecimal.java:1222)
je pense qu'il accepte pas le format -357,46 à cause de la virgule ou du -.
est ce que quelqu'un a une réponse SVP.
sinoun est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 19/09/2011, 16h54   #2
Membre Expert
 
Avatar de Benoit_Durand
 
Benoit Durand
Consultant en Business Intelligence Freelance
Inscription : mars 2005
Messages : 813
Détails du profil
Informations personnelles :
Nom : Benoit Durand
Localisation : France, Gironde (Aquitaine)

Informations professionnelles :
Activité : Consultant en Business Intelligence Freelance

Informations forums :
Inscription : mars 2005
Messages : 813
Points : 1 085
Points : 1 085
Oui la virgule sûrement.
Un replace avant pour changer la , en . devrait faire l'affaire.
Il y a peut être des moyens plus intelligents de le faire.
__________________
Pensez à la fonction Recherche
Benoit_Durand est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 19/09/2011, 17h13   #3
Futur Membre du Club
 
Inscription : juillet 2011
Messages : 99
Détails du profil
Informations forums :
Inscription : juillet 2011
Messages : 99
Points : 18
Points : 18
enfaite, j'ai essayé d’insérer un replace en minuscule, mais je ne connais pas la syntaxe correcte,
j'ai essayé ce code:
Code :
new Float(row1.SOLDEAVANTTRIMESTRE.REPLACE(',','.'));    Float.parseFloat(row1.SOLDEAVANTTRIMESTRE)
et ça n'a pas marché.
sinoun est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 19/09/2011, 17h31   #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
Salut, la syntaxe suivante devrait marcher :

Code :
Float.valueOf(row1.SOLDEAVANTTRIMESTRE.REPLACE(',', '.'))
Bonne chance.
__________________
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 19/09/2011, 17h38   #5
Futur Membre du Club
 
Inscription : juillet 2011
Messages : 99
Détails du profil
Informations forums :
Inscription : juillet 2011
Messages : 99
Points : 18
Points : 18
Salut et merci pour la réponse, ça m'a affiché l'erreur suivante:

Exception in component tMap_1
java.lang.NumberFormatException: For input string: "0,00"
at sun.misc.FloatingDecimal.readJavaFormatString(FloatingDecimal.java:1222)
sinoun est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 19/09/2011, 17h43   #6
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
Est ce que tu as bien copié la syntaxe que je t'ai donné ??
J'ai réalisé plusieurs test sur mon poste et ça marche, même avec le "0,00" !!

Peut être que l'environnement sur lequel tu travailles à un séparateur de décimal diffèrent de celui de mon environnement.

Essai de permuter le point et la virgule et de voir ce que ça donne !!
__________________
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 19/09/2011, 17h55   #7
Futur Membre du Club
 
Inscription : juillet 2011
Messages : 99
Détails du profil
Informations forums :
Inscription : juillet 2011
Messages : 99
Points : 18
Points : 18
Oui mon frere, avec ton code exactement ça donne l'erreur du "0,00" et lorsque je permute entre la virgule et le point ça donne la premiere erreur c a d:
java.lang.NumberFormatException: For input string: "-357,46"
at sun.misc.FloatingDecimal.readJavaFormatString(FloatingDecimal.java:1222)
sinoun est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 19/09/2011, 17h57   #8
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
Ah je vois !!

Essai de créer une colonne de type String, et dans le tMap tu mets juste cette partie :

Code :
row1.SOLDEAVANTTRIMESTRE.REPLACE(',', '.')
Et dis moi ce que ça donne !
__________________
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 19/09/2011, 18h09   #9
Futur Membre du Club
 
Inscription : juillet 2011
Messages : 99
Détails du profil
Informations forums :
Inscription : juillet 2011
Messages : 99
Points : 18
Points : 18
ça donne ça
Exception in component tMap_1
java.lang.NumberFormatException: For input string: "0,00"
at sun.misc.FloatingDecimal.readJavaFormatString(FloatingDecimal.java:1222)
sinoun est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 19/09/2011, 18h49   #10
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
Hhh

ça c'est bizarre,
Alors cette fois-ci essai juste ça :

Code :
row1.SOLDEAVANTTRIMESTRE
En fait je réduis le code pour essayer de localiser le problème.
__________________
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 19/09/2011, 22h22   #11
Membre actif
 
Avatar de sofiane_bfm007
 
Consultant Décisionnel
Inscription : mai 2008
Messages : 261
Détails du profil
Informations personnelles :
Localisation : France

Informations professionnelles :
Activité : Consultant Décisionnel

Informations forums :
Inscription : mai 2008
Messages : 261
Points : 187
Points : 187
Envoyer un message via MSN à sofiane_bfm007
Bonjour,

Essaie de créer cette routine :

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
package routines;
 
public class Routines {
 
                             public static int VAL_DEFAUT_NUMERIQUE = 0;
/**
                  * Fonction de conversion de String en Float - Retourne la valeur numérique par défaut s'il y a une exception
                  * @param aSource String a convertir
                  * @return Float Resultat. - Retourne la valeur numérique par défaut s'il y a une exception
                  */
                public static float String2Float(String aSource) {
                               IF (aSource==NULL)
                                               RETURN VAL_DEFAUT_NUMERIQUE;
 
                                RETURN formatNumber(aSource.REPLACE(",", "."));
 
                 }
}
Bon courage
__________________
Business Intelligence : Talend, Cognos 8, SAS 9.2, ODI
sofiane_bfm007 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 20/09/2011, 09h40   #12
Futur Membre du Club
 
Inscription : juillet 2011
Messages : 99
Détails du profil
Informations forums :
Inscription : juillet 2011
Messages : 99
Points : 18
Points : 18
ça donne toujours ça:
Exception in component tMap_1
java.lang.NumberFormatException: For input string: "0,00"
at sun.misc.FloatingDecimal.readJavaFormatString(FloatingDecimal.java:1222)
sinoun est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 20/09/2011, 10h24   #13
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
Est ce que tu peux vérifier si la variable
Code :
row1.SOLDEAVANTTRIMESTRE
dans laquelle tu lis est de type String ??

Apparemment ce n'est pas le cas !!
J'ai l'impression que c'est au moment de lecture que ton erreur apparait et non pas lors de la transformation tMap.
__________________
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 20/09/2011, 11h17   #14
Futur Membre du Club
 
Inscription : juillet 2011
Messages : 99
Détails du profil
Informations forums :
Inscription : juillet 2011
Messages : 99
Points : 18
Points : 18
Oui j'ai bien vérifié que c'est String, je t'explique j'ai une table postGres et je veux transformer les colonnes qui contiennent des nombres en float pour lire toute la table et l’insérer dans une autre table PostGres.
la c'est la virgule qui fait le problème.
je vais refaire tous ce que tu m'as dit avant et voir apres.
sinoun est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 20/09/2011, 11h27   #15
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
Essai de m'envoyer un une capture de ton job + capture de ton tMap + capture des schéma d'entrée et de sortie.

Sinon tu peux m'envoyer le job en entier ce sera mieux !!
A toi de voir.
__________________
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 20/09/2011, 11h39   #16
Nouveau Membre du Club
 
Jef Lehembre
Consultant en Business Intelligence
Inscription : mars 2011
Messages : 41
Détails du profil
Informations personnelles :
Nom : Jef Lehembre
Localisation : France

Informations professionnelles :
Activité : Consultant en Business Intelligence

Informations forums :
Inscription : mars 2011
Messages : 41
Points : 34
Points : 34
Une solution alternative :

Lorsque tu importes tes données avec un tInputPostGre, dans la colonne que tu veux convertir tu mets directement le type de variable (Float dans le cas présent) et le tour est joué.

De plus après si tu en as besoin string, il sera plus facile de faire un toString()!

En espérant que ça t'aide.
Croaker est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 20/09/2011, 11h43   #17
Futur Membre du Club
 
Inscription : juillet 2011
Messages : 99
Détails du profil
Informations forums :
Inscription : juillet 2011
Messages : 99
Points : 18
Points : 18
Je m'excuse, pour le temps perdu en faite la bonne instruction est cella :
Code :
Float.valueOf(row1.SOLDEAVANTTRIMESTRE.REPLACE(',', '.'))
elle fonctionne très bien sauf REPLACE en minuscule.
je m'excuse encore une fois et grand merci pour vous les deux.
Résolu.
sinoun est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 03h14.


 
 
 
 
Partenaires

Hébergement Web