format      Commandes Internes Tcl


NOM

format - Formate une chaîne dans le style de sprintf

SYNTAXE

format formatString ?arg arg ...?

INTRODUCTION

Cette commande génère une chaîne formatée de la même façon que la fonction C ANSI sprintf (elle utilise sprintf dans son implémentation). FormatString indique comment formater le résultat, en utilisant des spécificateurs de conversion % comme in sprintf, et les arguments supplémentaires, s'ils existent, fournissent les valeurs à substituer dans le résultat. La valeur de retour de format est la chaîne formatée

DETAILS SUR LE FORMATAGE

La commande opère en scannant formatString de gauche à droite Chaque caractère de la chaîne format est ajouté à la chaîne resultante à moins que ce soit un signe pourcentage. Si le caractère est un % alors il n'est pas copié dans la chaîne resultante. Par contre, les caractères suivants le caractère % sont traités comme un spécificateur de conversion. Le spécificateur de conversion contrôle la conversion des arg suivant en un format particulier et le résultat est ajouté à la chaîne resultante à la place du spécificateur de conversion. Si il y a plusieurs spécificateurs de conversion dans la chaîne format, alors chacun d'entre eux contrôle la conversion d'un arg supplémentaire. Les commande format doit avoir assez d'args pour satisfaire tous les spécificateurs de conversion de formatString.
Chaque spécificateur de conversion peut contenir jusqu'a six parties différentes: un spécificateur de position XPG3, un ensemble de flags, une largeur de champ minimum, une précision, un modificateur de longueur, et un caractère de conversion. N'importe quel de ces champs peut être omis excepté le caractère de conversion. Les champs présents doivent apparaitre dans l'ordre donné plus haut. Le paragraphe ci-dessous décrit chacun de ces champs.
Si le % est suivi par un nombre décimal et un $, comme dans "%2$d", alors la valeur à convertir n'est pas extraite du suivant argument. Par contre, elle est extraite de l'argument indiqué par les nombre, où 1.htm corresponds au premier arg. Si le spécificateur de conversion exige plusieurs arguments à cause de caractères * dans le spécificateur alors les arguments successifs sont utilisés, en commençant par l'argument donné par le nombre. Ceci suit les conventions XPG3.htm pour les spécificateurs de position. Si il y a des spécificateurs de position dans formatString alors tous spécificateurs doivent être positionnels.
La seconde partie d'un spécificateur de conversion peut contenir un des caractères flag suivants, dans n'importe quel ordre:

-
Spécifie que l'argument converti sera justifié à gauche dans son champ (les nombres sont normalement justifiés à droite avec des espaces en tête si besoin).

+
Spécifie qu'un nombre doit toujours être affiché avec un signe, même si positif.

space
Spécifie qu'un espace sera ajouté au début du nombre si le premier caractère n'est pas un signe.

0
Spécifie que les nombre seront remplis à gauche avec des zéros au lieu des espaces.

#
Demande une forme de sortie alternative. Pour les conversions o et O ceci garantit que le premier digit sera toujours 0. Pour conversions x ou X, 0x ou 0X (respectivement) sera ajouté au début du résultat à moins que ce soit zéro. Pour toutes conversions flottantes (e, E, f, g, et G) ceci garantit que le résultat a toujours un point (ou le séparateur décimal local ? NDT). Pour les conversions g et G ceci spécifie que les zéros à la fin ne seront pas enlevés.
La troisième partie d'un spécificateur de conversion est un nombre donnant une largeur de champ minimum pour cette conversion. Il est typiquement utilisé pour tracer des colonnes dans les sorties tabulaires. Si l'argument converti contient moins de caractères que la largeur de champ minimum alors il sera rempli pour atteindre la taille de la largeur de champ minimum. Le remplissage se produit normalement en ajoutant des espaces à gauche de l'argument converti, mais les flags 0 et - peuvent être employés pour spécifier le remplissage avec zéros à gauche ou avec des espaces à droite, respectivement. Si la largeur de champ minimum est spécifiée comme * plutôt qu'un nombre, alors l'argument suivant la commande format détermine la largeur de champ minimum; ce doit être une chaîne numérique.
La quatrième partie d'un spécificateur de conversion est la précision, qui consiste en un point suivi d'un nombre. Le nombre est utilisé de plusieurs façons pour des conversions différentes. Pour les conversions e, E, et f spécifient le nombre de chiffres qui apparaissent à droite du séparateur décimal. Pour les conversions g et G il spécifie le nombre total de chiffres qui apparaissent, incluant ceux des deux cotés du séparateur décimal (néanmoins, les zéros après le séparateur décimal seront toujours omis à moins que le flag # ait été spécifié). Pour les conversions entières, il spécifie une nombre minimum de chiffres à afficher (des zéros en tête seront ajoutés si nécessaire). Pour les conversions s il spécifie le nombre maximum de caractères à afficher; si la chaîne est plus longue les caractères en excedant seront omis. Si la précision est spécifiée avec * plutôt qu'un nombre alors l'argument suivant la commande format détermine la précision; il doit être une chaîne numérique.
La cinquième partie d'un spécificateur de conversion est un modificateur de longueur, qui doit être h ou l. Si c'est h il spécifie que la valeur numérique sera tronquée en une valeur 16-bit avant conversion. Cette option est rarement utile. Le modificateur l est ignoré.
La dernière chose dans un spécificateur de conversion est un caractère alphabétique qui détermine quelle sorte de conversion effectuer. Les caractère de conversions suivants sont couramment supportés:

d
Convertit un entier en chaîne décimale signée.

u
Convertit un entier en chaîne décimale non signée.

i
Convertit un entier en chaîne décimale signée; l'entier peut soit être décimal, octal (avec 0 en tête) ou en hexadécimal (avec 0xen tête).

o
Convertit un entier en chaîne octale non signée.

x ou X
Convertit un entier en chaîne hexadécimale non signée, en utilisant les chiffres "0123456789abcdef" pour x et "0123456789ABCDEF" pour X).

c
Convertit un entier en le caractère Unicode qu'il représente.

s
Pas de conversion; insère juste une chaîne.

f
Convertit un nombre flottant en chaîne décimale signée de la forme xx.yyy, où le nombre de y est déterminé par la précision (par défaut: 6). Si la précision est 0 alors aucun séparateur décimal n'est affiché.

e ou e
Convertit un nombre flottant en notation scientifique de la forme x.yyyzz, où le nombre de y's est déterminé par la précision (par défaut: 6). Si la précision est 0 alors aucun séparateur décimal n'est affiché. Si la forme E est utilisée alors E est affiché au lieu de e.

g ou G
Si l'exposant inférieur à -4 ou supérieur à ou égal à la précision, alors convertit nombre flottant comme pour %e ou %E. Autrement convertit comme pour %f. les zéros à la fin et le séparateur décimal sont omis.

%
Pas de conversion; insère juste %.

Pour les conversions numériques l'argument converti doit être un entier ou une chaîne flottante; format convertit l'argument en binaire et alors le convertit en une chaîne en accord avec le spécificateur de conversion

DIFFERENCES AVEC ANSI SPRINTF

Le comportement de la commande format est le même que le fonction ANSI C sprintf excepté les différences suivantes:

[1]  les spécificateurs %p et %n ne sont pas couramment supportés.

[2]  Pour les conversions %c l'argument doit être une chaîne décimale, qui sera alors convertie en la valeur caractère correspondante.

[3]  Le modificateur l est ignoré; les valeurs entières sont toujours converties comme si'il n'y avait pas de modificateur présent et les valeurs réelles sont toujours converties comme si le modificateur l etait présent (ex.le type double est utilisé pour la représentation interne). Si le modificateur h est spécifié alors les valeur entières sont tronquées en short avant conversion

Dernière révision: 8.1


Index  Précédent  Suivant