[R] Formater l'affichage d'un nombre

Aide et conseils concernant AutoIt et ses outils.
Règles du forum
.
Répondre
Avatar du membre
jl56
Niveau 7
Niveau 7
Messages : 411
Enregistré le : mer. 24 oct. 2007 22:42
Localisation : 56000
Status : Hors ligne

[R] Formater l'affichage d'un nombre

#1

Message 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
Modifié en dernier par jl56 le sam. 27 oct. 2007 15:28, modifié 1 fois.
Avatar du membre
sylvanie
Niveau 11
Niveau 11
Messages : 1550
Enregistré le : jeu. 26 juil. 2007 21:31
Localisation : Paris
Status : Hors ligne

#2

Message 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 ....
Modifié en dernier par sylvanie le jeu. 25 oct. 2007 21:02, modifié 1 fois.
Toi qui cherche à mettre le doigt sur la solution, appuie sur F1.
ani
Niveau 11
Niveau 11
Messages : 1826
Enregistré le : lun. 23 juil. 2007 12:31
Localisation : Bureau
Status : Hors ligne

#3

Message 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?)
Modifié en dernier par ani le ven. 26 oct. 2007 17:04, modifié 4 fois.
Avatar du membre
jl56
Niveau 7
Niveau 7
Messages : 411
Enregistré le : mer. 24 oct. 2007 22:42
Localisation : 56000
Status : Hors ligne

#4

Message 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
Modifié en dernier par jl56 le jeu. 01 nov. 2007 09:13, modifié 1 fois.
ani
Niveau 11
Niveau 11
Messages : 1826
Enregistré le : lun. 23 juil. 2007 12:31
Localisation : Bureau
Status : Hors ligne

#5

Message 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 :)
Avatar du membre
sylvanie
Niveau 11
Niveau 11
Messages : 1550
Enregistré le : jeu. 26 juil. 2007 21:31
Localisation : Paris
Status : Hors ligne

#6

Message 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"
Toi qui cherche à mettre le doigt sur la solution, appuie sur F1.
Avatar du membre
Tlem
Site Admin
Site Admin
Messages : 11773
Enregistré le : ven. 20 juil. 2007 21:00
Localisation : Bordeaux
Status : Hors ligne

#7

Message 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 , " " ) )
Thierry

Rechercher sur le forum ----- Les règles du forum
Le "ça ne marche pas" est une conséquence commune découlant de beaucoup trop de raisons potentielles ...

Une idée ne peut pas appartenir à quelqu'un. (Albert Jacquard) tiré du documentaire "Copié n'est pas volé".
ani
Niveau 11
Niveau 11
Messages : 1826
Enregistré le : lun. 23 juil. 2007 12:31
Localisation : Bureau
Status : Hors ligne

#8

Message 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 ^^)
Avatar du membre
jl56
Niveau 7
Niveau 7
Messages : 411
Enregistré le : mer. 24 oct. 2007 22:42
Localisation : 56000
Status : Hors ligne

ok ca fonctionne

#9

Message 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]
Répondre