Options régionnales

l0r3nz1 Messages postés 218 Date d'inscription mercredi 20 février 2008 Statut Membre Dernière intervention 17 mars 2012 - 31 mai 2010 à 16:24
Renfield Messages postés 17287 Date d'inscription mercredi 2 janvier 2002 Statut Modérateur Dernière intervention 27 septembre 2021 - 1 juin 2010 à 09:12
Bonjour,

que de soucis avec les paramètres régionaux.

comment définir de manière sûre un nombre (anglais ou français) à partir d'une chaine de caractère dont le séparateur peut être indifféremment "," ou "."?

j'avais essayé avec try ... replace ... mais pour les options US il y a les séparateurs de milliers qui ne sont plus des espaces ou vide mais des "," ...

j'ai trouvé une solution vite faite (pas trop) mal faite pour régler ce souci EU-France:
Public Function cdbl_franglais(ByVal nombre As String) As Double
Dim reponse As Double
Dim nb As String
nb = ""
reponse = 0
Try
nb = Replace(nombre, ",", ".")
reponse = CDbl(nb)
cdbl_franglais = reponse
Exit Function
Catch ex As Exception
End Try
Try
nb = Replace(nombre, ".", ",")
reponse = CDbl(nb)
cdbl_franglais = reponse
Exit Function
Catch ex As Exception
End Try
cdbl_franglais = 0
End Function

Public Function cdbl_ameliore(ByVal nombre As String) As Double
Select Case cst.OPTION_REGIONNALES
Case "EU"
Return cdbl_EU(nombre)
Case "FRA"
Return cdbl_EU(nombre)
End Select
End Function

avec éventuellement possibilité de saisir d'autres options dans l'appli pour plus tard.

je me demande dans quelle mesure cela peut buger!

quelqu'un a t'il une meilleure idée?

3 réponses

cs_Jack Messages postés 14006 Date d'inscription samedi 29 décembre 2001 Statut Modérateur Dernière intervention 28 août 2015 79
31 mai 2010 à 19:28
Salut
D'où provient ta chaine 'nombre' ?
Car la source est la seule à pouvoir te dire sans équivoque sous quel format arrive la donnée.
Est-ce toi qui la collecte ? depuis quelle source ?

Sinon, dans la famille bidouillage, tu peux :
- détecter le nombre de virgules = NbV
- détecter la position d'une éventuelle virgule = PosV
- détecter le nombre de points = NbP
- détecter la position d'un éventuel point = PosP

Si NbV > 1 --> US
Si PosV < PosP --> US
Si NbP > 1 --> FR
Si PosP < PosV --> FR
Mais le jour où tu as un petit entier, tu seras incapable de déterminer.

Vala
Jack, MVP VB
NB : Je ne répondrai pas aux messages privés

Le savoir est la seule matière qui s'accroit quand on la partage (Socrate)
0
l0r3nz1 Messages postés 218 Date d'inscription mercredi 20 février 2008 Statut Membre Dernière intervention 17 mars 2012
1 juin 2010 à 00:48
Salut,

nombre provient d'an fichier texte créé automatiquement par un autre logiciel. c'est à ce jour un nombre dont le séparateur est une virgule. les résultats doivent être affichés dans un format 123.4 ou 123,4

Ceci dit "l'ancêtre " de cette fonction provient de prog vb6 et vbA dans lesquelles je récupérais des données saisies (n'importe comment) par des utilisateurs et tratés sur des ordis très diverses, je n'avais pas le choix ça devait marché partout d'ou les remplacements gestion d'erreur.

ceci dit avec les séparateurs de millers il devient vraiment necessaire d'homogénéiser les ordis, les saisies quitte à programmer un formulaire de gestion des option régionnales propre à l'appli pourbprévoir les évolutions

C'est ma conclusion de cette aprèm.

Bonne soirée à tous!
0
Renfield Messages postés 17287 Date d'inscription mercredi 2 janvier 2002 Statut Modérateur Dernière intervention 27 septembre 2021 74
1 juin 2010 à 09:12
comme je l'ai ecrit sur une source hier...

il faut stocker les données de manière a lever toute ambiguité, c'est à dire en internationnal, en utilisant le point comme séparateur decimal.

voir ceci pour un plus long bla bla

Le formatage via les parametres regionnaux n'est simplement déstiné qu'a l'affichage a destination de l'utilisateur.
Et uniquement dans ce but (ecran, impression, etc.)

Renfield - Admin CodeS-SourceS - MVP Visual Basic & Spécialiste des RegExp
0
Rejoignez-nous