Page 1 sur 1

[R] Formater l'affichage d'un nombre

Posté : mer. 24 oct. 2007 22:57
par jl56
bonjour

je ne sais pas comment faire un truc aussi simple que
formater l'affichage d'un nombre

j'ai 1234567890
je veux afficher 1 234 567 890

je ne comprend pas stringformat

est ce que quelqu'un aurai la gentillesse de m'aider S.V.P.

a+ jl56

Posté : mer. 24 oct. 2007 23:19
par sylvanie
ici un petit exple par utilisation des regexp

Code : Tout sélectionner

 #Include <String.au3> 
$str = "111234567890" 
MsgBox ( 0 , "test" , format_number ( $str , 3 ) ) 
Func format_number ( $strlocal , $regroupement ) 
$strlocal = _StringReverse ( $strlocal ) ; renversement de la chaîne pour la traîtée à l'envers 
$strlocal = StringRegExpReplace ( $strlocal , "( \d{" & $regroupement & "} )" , "$1 " ) ; on cherche tous les regroupement de n chiffres pour les remplacer par eux même suivi d'un espace 
$strlocal = _StringReverse ( $strlocal ) ; on remets la chaîne à l'endroit 
$strlocal = StringStripWS ( $strlocal , 1 ) ; efface éventuellement l'espace en trop à l'avant , lorsque le nombre est composé d'un nombre multiple de n chiffres 
Return $strlocal 
EndFunc
[EDIT] : attention, il manquait un espace après "$1" => "$1 ", comme j'écrémais manuellement les espaces en trop dû à forum color , j'ai eu la main trop lourde ....

Posté : jeu. 25 oct. 2007 15:03
par ani
Héhé encore une démo :)
merci sylvanie

autre exemple (toujours de sylvanie), mais avec une petite modification d'ani.(merci d'avance pour la ou les correction a apporté a cette fonction et a l'exemple)
► Afficher le texte
Ani a écrit :Si le code n'est pas parfait ou correct merci pour la correction

Evidement sa ne répond pas à la question sur le stringformat.

%.2f < 2 chiffre après la virgule pour le reste je ne sait pas trop, merci d'avance pour les réponses approté a ce sujet. un peu de soucis avec l'anglais ? idem :)



ps: _StringAddComma (la solution non?)

Posté : jeu. 25 oct. 2007 22:39
par jl56
bonjour sylvanie et ani

et merci de vos reponses

sylvanie la manip ne fonctionne pas je pense que la syntaxe

Code : Tout sélectionner

StringRegExpReplace ( $strlocal , "( \d{" & $regroupement & "} )" , "$1 " )
n'est pas bonne

ani ca fonctionne tres bien
j'avais déja une solution du genre

Code : Tout sélectionner

$str = "123456789012345678" 
MsgBox ( 0 , "testjl" , $str & @crlf & conversion_jl56 ( $str ) ) 
Func conversion_jl56 ( $strlocal ) 
$strnew = "" 
for $i = 0 to stringlen ( $strlocal ) 
if ( int ( $i/3 ) *3 ) = $i then $strnew = " " & $strnew 
$strnew = StringMid ( $strlocal , stringlen ( $strlocal ) - $i , 1 ) & $strnew 
Next 
return $strnew 
EndFunc
mais je trouvais ca lourd j'ai un vieux souvenir du basic
ou on utilisait un string format du genre " ### ### ###",variable
et j'avais espéré aussi simple tanpis ce sera pour plus tard

a+ jl56

Posté : ven. 26 oct. 2007 14:46
par ani
rebonjour :)

alors voilà après une petite relecture de l'aide je tombe sur la fonction dont tu aura peut etre besoin.
En ce qui concerne la fonction proposé par sylvanie elle fonctionne très bien, j'ai juste indiqué le digit3 vu qu'on peut l'utiliser là et retirer les espaces. Voilà :)

Code : Tout sélectionner

#Include <String.au3> 
$str = "111234567890" 
MsgBox(0, "test", format_number($str)) 
Func format_number($strlocal) 
$strlocal = _StringReverse($strlocal) ; renversement de la chaîne pour la traîtée à l'envers 
$strlocal = StringRegExpReplace($strlocal, "(\d{3})", "$1 ") ; on cherche tous les regroupement de n chiffres pour les remplacer par eux même suivi d'un espace 
$strlocal = _StringReverse($strlocal) ; on remets la chaîne à l'endroit 
$strlocal = StringStripWS($strlocal, 1) ; efface éventuellement l'espace en trop à l'avant , lorsque le nombre est composé d'un nombre multiple de n chiffres 
Return $strlocal 
EndFunc
Enfin bon pour revenir a la fonction qui Existe déjà

voici ce que donne l'aide

Code : Tout sélectionner

_StringAddComma 
--------------------------------------------------------------------------------
Returns the original numbered string with the proper delimiter inserted.
#Include <String>
__StringAddComma ( $sStr [, $sSeparator [, $sEnd ]] )

Parameters
$sStr The string to be converted. 
$sSeperator Optional: The delimiter to separate the string of numbers. Default=',' 
$sEnd Optional: The decimal delimiter. Default='.'
Exemple

Code : Tout sélectionner

#Include <String.au3>
$nAmt = '111234567890'
$sDelim = _StringAddComma($nAmt,".")
MsgBox(64, 'Info', $sDelim)[/autoit][u][b]Sortie =[/b][/u] [color=blue][i]111.234.567.890 [/i]


PS: j'avais réediter le poste en signalant la fonction mais , donc je la post ^^' ,

j'ai remodifié l'exemple du premier post :)

Posté : ven. 26 oct. 2007 21:27
par sylvanie
Merci Ani pour la rectif.
Comme indiqué dans mon edit, j'avais supprimé un espace en "trops" qui ne l'était pas il faut mettre "$1 " à la place de "$1"

Posté : ven. 26 oct. 2007 22:00
par Tlem
En fait, la question était :
jl56 a écrit :j'ai 1234567890
je veux afficher 1 234 567 890
Donc en adaptant ce que ani à trouvé, cela nous donne :

Code : Tout sélectionner

#Include <String.au3> 
$nAmt = '1234567890' 
MsgBox ( 64 , 'Info' , _StringAddComma ( $nAmt , " " ) )

Posté : ven. 26 oct. 2007 22:56
par ani
oups je pensais espace et c'est point qui est inscrit ^__^) désolé :)
jl56 a écrit :mais je trouvais ca lourd j'ai un vieux souvenir du basic
ou on utilisait un string format du genre " ### ### ###",variable
et j'avais espéré aussi simple tanpis ce sera pour plus tard
peut etre que quelqu'un vois de quoi il s'agit ? je vais regarder le basic et la fonction (si je l'a trouve ^^)

ok ca fonctionne

Posté : sam. 27 oct. 2007 15:24
par jl56
bonjour a tous

merci pour vos réponses
effectivement en supprimant les espaces la fonction de sylvanie marche

_StringAddComma
fonctionne tres bien et c'est tres simple
merci

pour info sur stringformat
j'ai chercher pendant des heures le moyen de
formater un nombre sur 3 chiffres ex. 12 en 012 ou 1 en 001
un peu au pif j'ai utilisé
StringFormat("%03d",$nombre)
si cela peut vous aider

voila merci encore

a+ jl56
[R]