OVH Cloud OVH Cloud

Tester une chaine

6 réponses
Avatar
Microsoft
Bonjour,

Je dois tester une chaine de caractères afin de dire si c'est un nombre ou
une chaine.
J'ai utilisé isnumeric() mais il me renvoi VRAI pour "411999B0000" alors que
c'est FAUX!!
J'ai essayé val(4119999B000) mai il me renvoi 4119999 !
alors que c'est FAUX

Une solution ??

merci d'avance

6 réponses

Avatar
ng
Salut,

Chez moi IsNumeric("411999B0000") renvoie bien False.
Quel est ta version de VB ? Avec quel service pack ?

--
Nicolas G.
FAQ VB : http://faq.vb.free.fr
API Guide : http://www.allapi.net
Google Groups : http://groups.google.fr/
MZ-Tools : http://www.mztools.com/

Microsoft wrote:
Bonjour,

Je dois tester une chaine de caractères afin de dire si c'est un
nombre ou une chaine.
J'ai utilisé isnumeric() mais il me renvoi VRAI pour "411999B0000"
alors que c'est FAUX!!
J'ai essayé val(4119999B000) mai il me renvoi 4119999 !
alors que c'est FAUX

Une solution ??

merci d'avance


Avatar
Microsoft
J'ai VB6 avec SP6

"ng" a écrit dans le message de news:
ucl$
Salut,

Chez moi IsNumeric("411999B0000") renvoie bien False.
Quel est ta version de VB ? Avec quel service pack ?

--
Nicolas G.
FAQ VB : http://faq.vb.free.fr
API Guide : http://www.allapi.net
Google Groups : http://groups.google.fr/
MZ-Tools : http://www.mztools.com/

Microsoft wrote:
Bonjour,

Je dois tester une chaine de caractères afin de dire si c'est un
nombre ou une chaine.
J'ai utilisé isnumeric() mais il me renvoi VRAI pour "411999B0000"
alors que c'est FAUX!!
J'ai essayé val(4119999B000) mai il me renvoi 4119999 !
alors que c'est FAUX

Une solution ??

merci d'avance






Avatar
LE TROLL
Bonsoir,

Moi aussi j'ai du bizarre avec IsNumeric, je n'utilise plus, revenant à
la bonne méthode barbare es efficace (et rapide, juste une idée de
principe):

dim octet as string * 1
dim asc as integer
dim chaine_a_tester as string
dim chaine_transfert as string
dim ponitVirgule as boolean
'
point_Virgule = false
chaine_a_tester = trim(chaine_a_tester)
chaine_transfert = ""
for i = 1 to len(chaine_a_tester)
octet = mid(chaine_a_tester, i,1)
ascii = asc(octet)
if ascii = 44 then
if pointVirgule = true then goto erreur2
chaine_transfert = "." ' si tu veux passer 44 en 46
chaine_transfert = chaine_transfert & octet ' sinon
pointVirgule = true
goto suite
end if
if ascii = 46 then
if pointVirgule = true then goto erreur2
chaine_transfert = "," ' si tu veux passer 46 en 44
chaine_transfert = chaine_transfert & octet ' sinon
pointVirgule = true
goto suite
end if
if ascii > 47 and ascii < 58 then
chaine_transfert = chaine_transfert & octet
goto suite
end if
'
erreur:
msgbox "erreur, pas numérique : " & ascii & chr(10) & octet &
chr(10) & i
exit for
erreur2:
msgbox "2 virgule(s) ou point(s)
goto erreur
suite:
next i
chaine_a_tester = chaine_transfert
'-------------

"Microsoft" a écrit dans le message de news:

Bonjour,

Je dois tester une chaine de caractères afin de dire si c'est un nombre ou
une chaine.
J'ai utilisé isnumeric() mais il me renvoi VRAI pour "411999B0000" alors
que c'est FAUX!!
J'ai essayé val(4119999B000) mai il me renvoi 4119999 !
alors que c'est FAUX

Une solution ??

merci d'avance




Avatar
thierry
In article ,
says...
Bonjour,

Je dois tester une chaine de caractères afin de dire si c'est un nombre ou
une chaine.
J'ai utilisé isnumeric() mais il me renvoi VRAI pour "411999B0000" alors que
c'est FAUX!!
J'ai essayé val(4119999B000) mai il me renvoi 4119999 !
alors que c'est FAUX

Une solution ??

merci d'avance





pour ma part je fais cela:


dim valeur as integer

on error goto error_convert
valeur = cint (chaine a tester)
on error goto 0

' ici c'est un entier
exit sub


error_convert:
'ici ce n'est pas un entier, faire attention à la virgule....
Avatar
Jean-Marc
"Microsoft" a écrit dans le message de
news:
Bonjour,

Je dois tester une chaine de caractères afin de dire si c'est un nombre ou
une chaine.
J'ai utilisé isnumeric() mais il me renvoi VRAI pour "411999B0000" alors


que
c'est FAUX!!
J'ai essayé val(4119999B000) mai il me renvoi 4119999 !
alors que c'est FAUX




Hello,

Il y a plein de moyens, aucun n'est évident.
En voici un:

parcourir du premier au dernier
si c'est un chiffre OK
si c'est un "." faire nbrePoints = nbrePoints + 1
si c'est une "," faire nbrevirg = nbvirg + 1
si c'est autre chose => PAS OK

Puis à la fin,

si il n'y a eu que des chiffres, ou bien que des chiffres
sauf exactement 1 point OU exactement une virgule
alors c'est un nombre.


--
Jean-marc
"There are only 10 kind of people
those who understand binary and those who don't."
Avatar
Guy DETIENNE
Salut ;

En effet, tu as un problème avec ta fonction IsNumeric.
Chez moi ca me retourne FALSE, ce qui est normal vu que VB ne peut
considérer la chaîne comme étant du numérique.

Pour mieux comprendre la fonction IsNumeric :

La fonction IsNumeric renvoie la valeur True si l'ensemble de l'expression
est reconnue comme étant un nombre ; sinon, elle renvoie la valeur False.
La fonction IsNumeric renvoie la valeur False si l'argument expression est
une expression de date.

Par contre VAL(4119999B000) doit retourner 4119999. Ce qui est correct chez
toi. Donc il n'y a pas d'erreur à ce niveau, contrairement à ce que tu
sembles dire. IsNumeric et Val sont 2 fonctions très différentes.
Pour mieux comprendre la fonction VAL :

La fonction Val arrête la lecture de la chaîne au premier caractère ne
faisant apparemment pas partie d'un nombre. Les symboles et caractères
fréquemment associés aux valeurs numériques, comme le signe $ et les
virgules ne sont pas reconnus. En revanche, la fonction reconnaît les
préfixes &O (pour octal) et &H (pour hexadécimal). Les espaces, les
tabulations et les caractères de saut de ligne ne sont pas pris en compte
dans l'argument.

Guy


"Microsoft" a écrit dans le message de news:

Bonjour,

Je dois tester une chaine de caractères afin de dire si c'est un nombre ou
une chaine.
J'ai utilisé isnumeric() mais il me renvoi VRAI pour "411999B0000" alors
que c'est FAUX!!
J'ai essayé val(4119999B000) mai il me renvoi 4119999 !
alors que c'est FAUX

Une solution ??

merci d'avance