Functions > String >


StringFormat

Formate une chaîne (similaire à la fonction sprintf() du C).

StringFormat ( "format control" [, var1 [, ... var32]] )

Paramètres

format control Le format et les flags à utiliser (Voir Remarques).
var1...var32 Jusqu'à 32 variables qui seront affichées selon le paramètre "format control".

Valeur de retour

Retourne la chaîne formatée selon le paramètre "format control".

Remarques

Pour éviter le débordement de la mémoire tampon, chaque "variable" est limitée à 65535 caractères.
Les caractères d'échappement peuvent être utilisés dans la chaîne "format control" comme \n (@LF), \r (@CR), \t (@TAB). Donc, si vous voulez avoir un \ vous devez utiliser \\, de même pour %, vous devez utiliser %%.

La "variable format" est %[flags] [width] [.precision] type

Si une spécification de format est invalide, le comportement est indéfini. Si vous spécifiez une entrée non valide, vous pouvez créer des circonstances spéciales non gérée et provoquer la fin du programme.

    Spécification Width

Le deuxième champ optionnel de la spécification du format est la largeur. L'argument 'width' est un entier décimal non négatif contrôlant le nombre minimum de caractères affichés. Si le nombre de caractères à afficher est inférieur à la largeur spécifiée, des espaces sont ajoutés à gauche ou à droite (suivant la valeur du flag pour un alignement à gauche), jusqu'à ce que la largeur minimale soit atteinte. Si la largeur est précédé de 0, des zéros sont ajoutés jusqu'à ce que la largeur minimale soit atteinte (inutile pour les nombres alignés à gauche).

La spécification de largeur ne provoque jamais une valeur à tronquer. Si le nombre de caractères de la valeur de sortie est supérieur à la largeur spécifiée, ou si la largeur n'est pas donnée, tous les caractères de la valeur sont affichés (sous réserve de la spécification de précision).

    Spécification Type

Type Type de Variable Format de sortie
d, i Integer Entier décimal signé.
o Integer Entier octal non signé.
u Integer Entier décimal non signé.
x Integer Entier non signé en hexadécimal, qui utilise "abcdef".
X Integer Entier hexadécimal non signé, qui utilise "ABCDEF".
e Float Valeur signée de la forme [ - ]d.dddd e [sign]dddd est un chiffre décimal simple, dddd est au moins un chiffre décimal, ddd est exactement trois chiffres décimaux, et sign est + ou -.
E Float Identique au format e sauf que E plutôt que e introduit la notation exponentielle.
f Float Valeur signé ayant la forme [ - ]dddd.dddd, où dddd est au moins un chiffre décimal. Le nombre de chiffres avant le point décimal dépend de l'importance du nombre, et le nombre de chiffres après le point décimal dépend de la précision demandée.
g Float Valeur signée affichée dans le format f ou e, whichever is more compact for the given value and precision. Le format e est utilisé uniquement lorsque l'exposant de la valeur est inférieur à -4 ou supérieur ou égal à l'argument de précision. Les zéros à droite sont tronqués, et le point décimal apparaît uniquement si un ou plusieurs chiffres suivent.
G Float Identique au format g format, sauf que E, plutôt que e, introduit la notation exponentielle (le cas échéant).
s String String

    Spécification Flag
Flag Signification Par défaut
- Aligne à gauche le résultat dans la largeur donnée du champ. Aligne à droite.
+ Préfixe la valeur de sortie du signe (+ ou -) si elle est d'un type signé. Le signe ne s'affiche que pour les valeurs négatives signés (-).
0 Si width est précédée d'un 0, des zéros sont ajoutés jusqu'à ce que le minimim 'width' soit atteint. Si 0 et - apparaisse, le 0 est ignoré. Si 0 est spécifié avec un format 'integer' (i, u, x, X, o, d) alors le 0 est ignoré. Pas de rembourrage.
Blank Précède la valeur de sortie avec un espace si elle est signée et positive; l'espace est ignoré si les flags 'blank' et '+' sont levés. Pas d'espace n'est rajouté.
# Lorsqu'il est utilisé avec les formats o, x, ou X, le flag # préfixe une valeur de sortie non nulle avec 0, 0x ou 0X, respectivement. Pas de 0 n'est rajouté.
# Lorsqu'il est utilisé avec les formats e, E, ou f, le flag # force la valeur de sortie à contenir un point décimal dans tous les cas. Le point décimal n'apparaît que si des chiffres suivent.
# Lorsqu'il est utilisé avec les formats g ou G, le flag # force la valeur de sortie à contenir un point décimal dans tous les cas et empêche la troncature des zéros.
Ignoré quand utisé avec d, i, u, or s .
Le point décimal n'apparaît que si des chiffres le suivent. Les zéros à droite sont tronqués.

    Spécification Precision

Le troisième champ optionnel de la spécification du format est la spécification de la précision. Il spécifie un entier décimal non négatif, précédé par un point (.), qui indique le nombre de caractères à afficher, le nombre de décimales, ou le nombre de chiffres significatifs (voir le tableau ci-dessous). Contrairement à la spécification de largeur, la spécification de précision peut entraîner soit la troncature de la valeur de sortie, soit l'arrondi d'une valeur à virgule flottante. Si la précision est définie à 0 et la valeur à convertir est égale à 0, le résultat n'a aucun caractère en sortie, comme indiqué ci-dessous :

StringFormat("%.0d ", 0) ; Pas de caractères en retour

    Comment la Précision affecte le Type

Type Signification Par défaut
d, i, u, o, x, X La précision indique le nombre minimum de chiffres à afficher. Si le nombre de chiffres dans l'argument est inférieur à la précision, la valeur de sortie est complétée à gauche par des zéros. La valeur n'est pas tronquée lorsque le nombre de chiffres dépasse précision. La précision par défaut est 1.
e, E La précision spécifie le nombre de chiffres à afficher après le point décimal. Le dernier chiffre affiché est arrondie. La précision par défaut est 6; si la précision est 0 ou si le point (.) apparaît non suivi d'un chiffre, le point décimal n'est pas affiché.
f La valeur de précision spécifie le nombre de chiffres après le point décimal. Si le point décimal est affiché, au moins un chiffre apparait devant. La valeur est arrondie au nombre de chiffres approprié. La précision par défaut est 6; si la précision est 0, ou si le point (.) apparaît non suivi d'un chiffre, le point décimal n'est pas affiché.
g, G La précision spécifie le nombre maximum de chiffres significatifs affichés. Six chiffres significatifs sont affichés, avec les zéros tronqués.
s La précision indique le nombre maximal de caractères à afficher. Les caractères qui excèdent la précision ne sont pas affichés. Les caractères sont affichés jusqu'à ce qu'un caractère nul soit rencontré.

Exemple

Example()

Func Example()
    Local $iInt_Unsigned = 43951789
    Local $iInt_Negative = -43951789

    ConsoleWrite(@CRLF & "Numeric Formats" & @CRLF)

    PrintFormat($iInt_Unsigned, "%d", "Entier positif standard sans signe", 1) ;43951789
    PrintFormat($iInt_Negative, "%d", "Entier négatif standard avec signe", 1) ;-43951789
    PrintFormat($iInt_Unsigned, "%i", "Entier standard", 1) ;43951789
    PrintFormat($iInt_Unsigned, "%09i", "9 chiffres avec des zéro à gauche", 1) ;043951789
    PrintFormat($iInt_Unsigned, "%e", "Notation scientifique") ;4.395179e+007
    PrintFormat($iInt_Unsigned, "%u", "Entier non signé avec entier positif", 1) ;43951789
    PrintFormat($iInt_Negative, "%u", "Entier non signé avec entier négatif", 1) ;4251015507
    PrintFormat($iInt_Unsigned, "%f", "Virgule flottante") ;43951789.000000
    PrintFormat($iInt_Unsigned, "%.2f", "Virgule flottante avec 2 chiffre après le point décimal ", 1) ;43.951.789,00
    PrintFormat($iInt_Unsigned, "%o", "Octal", 1) ;247523255
    PrintFormat($iInt_Unsigned, "%s", "String", 1) ;43951789
    PrintFormat($iInt_Unsigned, "%x", "Hexadécimal (minuscule)", 1) ;29ea6ad
    PrintFormat($iInt_Unsigned, "%X", "Hexadécimal (majuscule)", 1) ;29EA6AD
    PrintFormat($iInt_Unsigned, "%+d", "Signe spécifié devant un entier positif", 1) ;+43951789
    PrintFormat($iInt_Negative, "%+d", "Signe spécifié devant un entier négatif", 1) ;-43951789

    Local $sString = "string"
    Local $sString_Long = "longer string"

    ConsoleWrite(@CRLF & "String Formats - [ ] utilisés pour montrer le début/fin de la chaîne" & @CRLF)

    PrintFormat($sString, "[%s]", "chaîne standard", 1) ; [chaîne]
    PrintFormat($sString, "[%10s]", "10 caractères justifiés à droite avec ajout d'espaces") ; [    Chaîne]
    PrintFormat($sString, "[%-10s]", "10 caractères justifiés à gauche avec ajout d'espaces") ; [chaîne    ]
    PrintFormat($sString_Long, "[%10.8s]", "Justifié à droite mais précision 8 donc tronqué") ; [  longer s]
    PrintFormat($sString_Long, "[%-10.8s]", "Justifié à gauche mais précision 8 donc tronqué") ; [longer s  ]
    PrintFormat($sString, "[%010s]", "10 caractères avec des zéro à gauche") ; [0000string]

    ConsoleWrite(@CRLF & "Date Format -  chaque % utilise un nouveau paramètre" & @CRLF)

    ConsoleWrite('"%02i\%02i\%04i" sur (1, 9, 2013) => '& StringFormat("%02i\%02i\%04i", 1, 9, 2013) & @CRLF & @CRLF)
EndFunc   ;==>Example

Func PrintFormat($vVar, $sFormat, $sExplan, $iTab = 0)
    ConsoleWrite('"' & $sFormat & '" sur ' & $vVar & @TAB & ' => '& StringFormat($sFormat, $vVar))
    If $iTab Then ConsoleWrite(@TAB)
    ConsoleWrite(@TAB & " ; " & $sExplan & @CRLF)
EndFunc   ;==>PrintFormat