PC SOFT

FORUMS PROFESSIONNELS
WINDEVWEBDEV et WINDEV Mobile

Accueil → WINDEV 2024 → chaine vers décimal selon paramètres régionaux
chaine vers décimal selon paramètres régionaux
Débuté par patrick conesa, 24 aoû. 2004 16:26 - 5 réponses
Posté le 24 août 2004 - 16:26
Comment convertir une chaine de caractères en nombre décimal en tenant compte
de la configuration des paramètres régionaux du panneau de configuration
?

En Windev 8.0 la fonction Val() attend un . comme séparateur de décimal et
ne tient pas compte du séparateur de millier.
Ex :
Anglais (Royaume Uni) : Val("1,200.20") => 1.0
France (Belgique) : Val("1.400,20") => 1.4
Posté le 24 août 2004 - 18:26
J'avais fait à l'époque :

Dans mon code init du projet j'enregistrait les séparateurs décimaux et
de milliers :

SepDecimal,SepMillier,ChNombre sont des chaînes

ChNombre=NumériqueVersChaine(1234.56,"S")
SepDecimal=Milieu(ChNombre,Position(ChNombre,"56")-1,1)
SepMillier=Milieu(ChNombre,Position(ChNombre,"2")-1,Position(ChNombre,"2")-Position(ChNombre,"1")-1)

Apres on remplace avec une fonction :

Fonction FormateChaineValeur( chChaineValeur )
ChTemp est une chaine
ChTemp=remplace(ChChaineValeur,SepDecimal,".")
ChTemp=remplace(ChTemp,SepMillier,"")
Renvoyer ChTemp


Ex :

Val(FormateChaineValeur("1,200.20"))

( j'ai pas testé mais ca devrait marcher )

patrick conesa wrote:

Comment convertir une chaine de caractères en nombre décimal en tenant compte
de la configuration des paramètres régionaux du panneau de configuration
?

En Windev 8.0 la fonction Val() attend un . comme séparateur de décimal et
ne tient pas compte du séparateur de millier.
Ex :
Anglais (Royaume Uni) : Val("1,200.20") => 1.0
France (Belgique) : Val("1.400,20") => 1.4
Posté le 25 août 2004 - 12:06
Merci bien Sébastien,

En fin de compte, j'ai écrit une fonction qui a l'allure suivante :

FONCTION ChaineVersDécimal(prmAConvertir est une chaîne)
//**********************************************************************************************************
//**
//** Cette fonction recupere les parametres internationaux, definis dans
la base de registre pour convertir
//** une chaine de caracteres en valeur decimale en tenant compte du parametrage
international
//**
//** Clefs de la base de registres utilisées :
//** HKEY_CURRENT_USER / INTERNATIONAL
//** sDecimal
//** sMonThousandSep
//**********************************************************************************************************
LOCAL
sDec est une chaîne
sThou est une chaîne
strA, strB, strC est une chaîne
strACvt est une chaîne

sDec = INILit("intl","sDecimal",".") // Lecture du séparateur de décimales
sThou = INILit("intl","sMonThousandSep"," ") // Lecture du séparateur de
milliers
strA = Remplace(prmAConvertir," ","") // Suppression des espaces indésirables
strB = Remplace(strA,sThou,"") // Suppression des séparateurs de milliers
strC = Remplace(strB,sDec,".") // Remplacement du séparateur de décimales
par un .

RENVOYER Val (strC) // Retourne le résultat de la conversion en numérique
Posté le 25 août 2004 - 12:34
Pourquoi utiliser un fichier INI si les infos sont stockées dans le
registre ?

Sinon ca revient a ce que j'avais proposé en plus ' propre ' si les
bases de registres sont les memes sous XP/2000 et win 98 ^^

patrick conesa wrote:

Merci bien Sébastien,

En fin de compte, j'ai écrit une fonction qui a l'allure suivante :

FONCTION ChaineVersDécimal(prmAConvertir est une chaîne)
//**********************************************************************************************************
//**
//** Cette fonction recupere les parametres internationaux, definis dans
la base de registre pour convertir
//** une chaine de caracteres en valeur decimale en tenant compte du parametrage
international
//**
//** Clefs de la base de registres utilisées :
//** HKEY_CURRENT_USER / INTERNATIONAL
//** sDecimal
//** sMonThousandSep
//**********************************************************************************************************
LOCAL
sDec est une chaîne
sThou est une chaîne
strA, strB, strC est une chaîne
strACvt est une chaîne

sDec = INILit("intl","sDecimal",".") // Lecture du séparateur de décimales
sThou = INILit("intl","sMonThousandSep"," ") // Lecture du séparateur de
milliers
strA = Remplace(prmAConvertir," ","") // Suppression des espaces indésirables
strB = Remplace(strA,sThou,"") // Suppression des séparateurs de milliers
strC = Remplace(strB,sDec,".") // Remplacement du séparateur de décimales
par un .

RENVOYER Val (strC) // Retourne le résultat de la conversion en numérique

Posté le 25 août 2004 - 14:40
Sous XP, la base de registre est bel et bien lue avec la fonction InitLit().
Cependant, il me faut valider sur d'autres plate-formes.

=?ISO-8859-1?Q?BOUDOT_Sébastien_-_Blue_River_System?= wrote:

Pourquoi utiliser un fichier INI si les infos sont stockées dans le
registre ?

Sinon ca revient a ce que j'avais proposé en plus ' propre ' si les
bases de registres sont les memes sous XP/2000 et win 98 ^^

patrick conesa wrote:

Merci bien Sébastien,

En fin de compte, j'ai écrit une fonction qui a l'allure suivante :

FONCTION ChaineVersDécimal(prmAConvertir est une chaîne)
//**********************************************************************************************************
//**
//** Cette fonction recupere les parametres internationaux, definis dans
la base de registre pour convertir
//** une chaine de caracteres en valeur decimale en tenant compte du parametrage
international
//**
//** Clefs de la base de registres utilisées :
//** HKEY_CURRENT_USER / INTERNATIONAL
//** sDecimal
//** sMonThousandSep
//**********************************************************************************************************
LOCAL
sDec est une chaîne
sThou est une chaîne
strA, strB, strC est une chaîne
strACvt est une chaîne

sDec = INILit("intl","sDecimal",".") // Lecture du séparateur de décimales
sThou = INILit("intl","sMonThousandSep"," ") // Lecture du séparateur

de
milliers
strA = Remplace(prmAConvertir," ","") // Suppression des espaces indésirables
strB = Remplace(strA,sThou,"") // Suppression des séparateurs de milliers
strC = Remplace(strB,sDec,".") // Remplacement du séparateur de décimales
par un .

RENVOYER Val (strC) // Retourne le résultat de la conversion en numérique


Posté le 25 août 2004 - 18:26
En fait la valeur est contenue dans le fichier WIN.INI

On s'embete pour rien des fois...



patrick conesa wrote:

Sous XP, la base de registre est bel et bien lue avec la fonction InitLit().
Cependant, il me faut valider sur d'autres plate-formes.

=?ISO-8859-1?Q?BOUDOT_Sébastien_-_Blue_River_System?= wrote:

Pourquoi utiliser un fichier INI si les infos sont stockées dans le
registre ?

Sinon ca revient a ce que j'avais proposé en plus ' propre ' si les
bases de registres sont les memes sous XP/2000 et win 98 ^^

patrick conesa wrote:


Merci bien Sébastien,

En fin de compte, j'ai écrit une fonction qui a l'allure suivante :

FONCTION ChaineVersDécimal(prmAConvertir est une chaîne)
//**********************************************************************************************************
//**
//** Cette fonction recupere les parametres internationaux, definis dans
la base de registre pour convertir
//** une chaine de caracteres en valeur decimale en tenant compte du parametrage
international
//**
//** Clefs de la base de registres utilisées :
//** HKEY_CURRENT_USER / INTERNATIONAL
//** sDecimal
//** sMonThousandSep
//**********************************************************************************************************
LOCAL
sDec est une chaîne
sThou est une chaîne
strA, strB, strC est une chaîne
strACvt est une chaîne

sDec = INILit("intl","sDecimal",".") // Lecture du séparateur de décimales
sThou = INILit("intl","sMonThousandSep"," ") // Lecture du séparateur

de

milliers
strA = Remplace(prmAConvertir," ","") // Suppression des espaces indésirables
strB = Remplace(strA,sThou,"") // Suppression des séparateurs de milliers
strC = Remplace(strB,sDec,".") // Remplacement du séparateur de décimales
par un .

RENVOYER Val (strC) // Retourne le résultat de la conversion en numérique