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
Code : Tout sélectionner
$str = inputbox("Donner un chiffre","","")
$msgboxtext = "Test Effectué sur le chiffre : " & $str & @CRLF & _
@CRLF & "-------Début du test-------" & @CRLF & _
"La fonction nbrsepar($str) sans parametre vous retournera cette valeur " & nbrsepar($str) & @CRLF & _
"La fonction nbrsepar($str,0) en parametre 0 ajoute l'espacement et vous retournera cette valeur " & nbrsepar($str,0) & @CRLF & _
"La fonction nbrsepar($str,1) en parametre 1 ajoute la virgule et vous retournera cette valeur " & nbrsepar($str,1) & @CRLF & _
"La fonction nbrsepar($str,-1) en parametre -1 ajoute le point (par défaut idem que sans argument et vous retournera cette valeur " & nbrsepar($str,-1) & @CRLF & _
"-------fin du test-------"
MsgBox (64,"test",$msgboxtext)
Func nbrsepar($str, $sSeparateur = "")
Local $local_str, $local_modulo, $local_reste, $local_longueur, $local_indice, $local_sortie = ""
If IsString($str) Then
$local_str = $str
Else
$local_str = String($str)
EndIf
$local_longueur = StringLen($local_str)
$local_reste = Mod($local_longueur, 3)
$local_modulo = ($local_longueur - $local_reste) / 3
For $local_indice = $local_modulo To 1 Step - 1
If StringLen($sSeparateur) = False Then $sSeparateur = -1
Switch String($sSeparateur)
Case 0
$local_sortie = Chr(32) & StringMid($local_str, 3 * ($local_indice - 1) + $local_reste + 1, 3) & $local_sortie
Case 1
$local_sortie = Chr(44) & StringMid($local_str, 3 * ($local_indice - 1) + $local_reste + 1, 3) & $local_sortie
Case -1
$local_sortie = Chr(46) & StringMid($local_str, 3 * ($local_indice - 1) + $local_reste + 1, 3) & $local_sortie
EndSwitch
Next
$local_sortie = StringMid($local_str, 1, $local_reste) & $local_sortie
If $local_reste = 0 Then $local_sortie = StringTrimLeft($local_sortie, 1)
Return $local_sortie
EndFunc[/autoit]
Sortie du msgbox avec le nbre 55313341
[autoit]Test Effectué sur le chiffre : 55313341
-------Début du test-------
La fonction nbrsepar($str) sans parametre vous retournera cette valeur 55.313.341
La fonction nbrsepar($str,0) en parametre 0 ajoute l'espacement et vous retournera cette valeur 55 313 341
La fonction nbrsepar($str,1) en parametre 1 ajoute la virgule et vous retournera cette valeur 55,313,341
La fonction nbrsepar($str,-1) en parametre -1 ajoute le point (par défaut idem que sans argument et vous retournera cette valeur 55.313.341
-------fin du test-------
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]