|
chaine vers décimal selon paramètres régionaux |
Started by patrick conesa, Aug., 24 2004 4:26 PM - 5 replies |
| |
| | | |
|
| |
Posted on August, 24 2004 - 4:26 PM |
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 |
| |
| |
| | | |
|
| | |
| |
Posted on August, 24 2004 - 6:26 PM |
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
|
| |
| |
| | | |
|
| | |
| |
Posted on August, 25 2004 - 12:06 PM |
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 |
| |
| |
| | | |
|
| | |
| |
Posted on August, 25 2004 - 12:34 PM |
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
|
| |
| |
| | | |
|
| | |
| |
Posted on August, 25 2004 - 2:40 PM |
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
|
| |
| |
| | | |
|
| | |
| |
Posted on August, 25 2004 - 6:26 PM |
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
|
| |
| |
| | | |
|
| | | | |
| | |
|