STRZERO FCTN QUI INSÈRE DES 0.

ccguns Messages postés 2 Date d'inscription mercredi 15 octobre 2003 Statut Membre Dernière intervention 8 octobre 2004 - 8 oct. 2004 à 08:46
ThierryPerretier Messages postés 103 Date d'inscription mardi 5 octobre 2004 Statut Membre Dernière intervention 6 juillet 2006 - 30 nov. 2005 à 12:46
Cette discussion concerne un article du site. Pour la consulter dans son contexte d'origine, cliquez sur le lien ci-dessous.

https://codes-sources.commentcamarche.net/source/26656-strzero-fctn-qui-insere-des-0

ThierryPerretier Messages postés 103 Date d'inscription mardi 5 octobre 2004 Statut Membre Dernière intervention 6 juillet 2006 1
30 nov. 2005 à 12:46
Pourquoi pas simplement :

transform(123.45, "@RL 99999.99")

?
ccguns Messages postés 2 Date d'inscription mercredi 15 octobre 2003 Statut Membre Dernière intervention 8 octobre 2004
8 oct. 2004 à 08:46
C'est marrant, j'ai la même fonction. J'ai toujours cru qu'elle avait été écrite par quelqu'un de la boite où je travaille, mais à priori non.
La voilà, un peu modifiée pour gérer les décimales :

* Fonction : Strzero
* Objet : Permet d'effectuer un STR en remplaçant les espaces par des zéros.
* Paramètre : - La valeur numérique
* - La longueur de la chaine totale
* - Le nombre de chiffre après la virgule
* Exemple : ? strzero(123.45, 8, 2) => "00123.45"

FUNCTION strzero

PARAMETERS m.valeur, m.longueur, m.decimale

PRIVATE lcRetour
PRIVATE m.chaine
PRIVATE m.nb_param

STORE "" TO lcRetour
STORE "" TO m.chaine
STORE 1 TO m.nb_param

m.nb_param = IIF(EMPTY(m.longueur), 1, IIF(EMPTY(m.decimale), 2, 3))

IF (TYPE("m.valeur") <> "N")
m.chaine IIF(m.nb_param 1, STR(0), IIF(m.nb_param = 2, STR(0, m.longueur), STR(0, m.longueur, m.decimale)))
ELSE
m.chaine IIF(m.nb_param 1, STR(m.valeur), IIF(m.nb_param = 2, STR(m.valeur, m.longueur), STR(m.valeur, m.longueur, m.decimale)))
ENDIF

lcRetour = STRTRAN(m.chaine," ", "0")

IF m.nb_param = 2 AND LEN(lcRetour) > m.longueur
lcRetour = LEFT(lcRetour , m.longueur)
ENDIF

RETURN lcRetour