5 messages in org.openoffice.fr.progRe: [prog] Une bizarerie
FromSent OnAttachments
FabienMar 31, 2008 7:31 am 
Bernard MarcellyMar 31, 2008 11:52 am 
FabienApr 1, 2008 7:37 am 
Serge PotteckApr 1, 2008 1:56 pm 
FabienApr 2, 2008 3:48 am 
Actions with this message:
Paste this link in email or IM:
Paste this link in email or IM:
Atom feed for this thread
Paste this URL into your reader:
Subject:Re: [prog] Une bizarerieActions...
From:Bernard Marcelly (marc@club-internet.fr)
Date:Mar 31, 2008 11:52:14 am
List:org.openoffice.fr.prog

Message de Fabien date 2008-03-31 16:31 :

Bonjour,

Que pensez-vous du petit programme suivant:

Sub main dim texte as string dim SansEspace as string texte = " 3" print CBool(Ltrim(texte) = CInt(texte)) SansEspace = Ltrim(texte) print CBool(SansEspace = CInt(texte)) end sub

Pour le premier "print", j'obtiens "False", pour le deuxième "True". Etonnant, non?

Oui, le comportement de Basic est un peu étrange. Mais ce codage est d'abord incorrect. On compare des oranges et des carottes! Un des termes de la comparaison est du type String, l'autre est du type Integer. Un codage correct est: print CBool(Ltrim(texte) = CStr(CInt(texte)))

On doit toujours se rappeler que Basic fait des conversions implicites pour faire une réponse "intelligente" (à la place du programmeur). Et des fois il se trompe.

Pourquoi la deuxième expression donne True ? Je remarque que si SansEspace est déclaré comme Variant, le résultat est False. Peut-être que LTrim() renvoie un variant. Un variant n'a pas de type figé, ça déroute un peu Basic pour évaluer?

______ Bernard