Fonction Format
La fonction FORMAT permet de formater une chaîne de caractère suivant un format particulier. Le format utilisé est le format standard du langage C. Cette implémentation limite à 8 le nombre d ’expression à formater simultanément.
Format( FormatChaine, Expression1, Expression2, Expression3, ..., Expression8) : ChaineRésultat
Exemple :
Message( Format( " Il fait chaud : %d °C ", Four.Temperature)) ;
La chaîne de format contient du texte qui est recopié tel que dans la chaîne résultante et des marques de conversions correspondant à chaque paramètre à convertir. Si le nombre de paramètre est inférieur au nombre de marques de conversions, le résultat est imprévisible et pourra même être catastrophique.
Les marques de conversions ont la syntaxe suivante
% [drapeaux] [largeur] [.précision] [F|N|h|l|L] type_char
Chaque marque de conversion commence par le caractère " % ". Après ce caractère on a les indicateurs optionnels ou non suivants
|
Indicateur |
Requis ou optionnel |
Signification |
|---|---|---|
|
Drapeaux |
Optionnel |
Justification de la sortie, signe, décimales,... cf. Drapeaux |
|
Largeur |
Optionnel |
Le nombre minimum de caractère imprimé, le remplissage complémentaire est fait par des blancs ou des zéros. |
|
précision |
Optionnel |
Précise le nombre maximum de caractères à imprimer, pour les entiers précise le nombre minimum de chiffres à imprimer. |
|
Type_char |
Requis |
Type de conversion |
Les drapeaux peuvent être :
|
Flags |
|
|---|---|
|
- |
Le résultat est cadré à gauche, remplissage à droite par des espaces. Si omis, le résultat est cadré à droite, remplissage à gauche avec des zéros ou des espaces. |
|
+ |
Les résultats sont signés et commencent donc toujours par ‘+ ’ ou ‘-‘. |
|
Espace |
Si la valeur n ’est pas négative, le résultat commence par un espace plutôt qu ’un plus ; les valeurs négatives commencent toujours par un moins |
|
# |
Précise que l ’argument doit être converti en utilisant une autre forme. |
L ’indicateur de largeur précise la largeur minimum d ’un champ.
L ’absence d ’indicateur de largeur ou son insuffisance ne provoque pas la troncation du champ. Si le résultat d ’une conversion est plus grand que le champ, le champ est rallongé afin de pouvoir contenir le résultat de la conversion.
|
Largeur |
|
|---|---|
|
N |
Au moins n caractères sont imprimés. Si la valeur de sortie a moins de n caractères, la sortie est complétée avec des espaces ( à droite si le drapeau - a été précisé, à gauche autrement). |
|
0n |
Au moins n caractères sont imprimés. Si la valeur de sortie a moins de n caractères, la sortie est complétée avec des zéros à gauche. |
L ’indicateur de précision précise le nombre maximum de caractères (ou le nombre minimum de chiffre) à imprimer. Un indicateur de précision commence toujours par un point ‘. ’ pour le différencier d ’un éventuel indicateur de largeur.
|
Précision |
Description |
|---|---|
|
Aucun |
La précision par défaut est utilisée. C ’est à dire : 1 pour les types d, i, o, u, x, X 6 pour les types e, E et f |
|
. 0 |
Pour les types d, i, o, u et x la précision par défaut est utilisée [1] pour les types e, E et f le point décimal n ’est pas utilisé |
|
.n |
n caractères ou n décimales sont imprimés. Si la valeur résultante a plus de n caractères, la sortie peut être tronquée ou arrondis (cela dépend du type de conversion). |
Suivant le type de conversion l ’indicateur de précision ‘.n ’ a les effets suivants.
|
Type |
Description |
|---|---|
|
d, i, o, u, x, X |
Au moins n chiffres seront imprimés. Si l ’argument a moins de n chiffres, la valeur de sortie est complétée à gauche avec des zéros. Si l ’argument a plus de n chiffres, la valeur de sortie n ’est pas tronquée. |
|
e, E, f |
Précise que n chiffres seront imprimés après la virgule, le dernier étant arrondi. |
|
g, G |
Au plus n chiffres seront imprimés. |
|
C |
N ’a aucun effet |
|
s |
Au plus n caractères seront imprimés |
Les types de conversion dépendent du type des paramètres. Sisal s ’efforce de transformer chacun des arguments dans le type précisé par le type de conversion. Si cela n ’est pas possible il transforme les arguments dans des valeurs conventionnelles (0).
|
Type de conversion |
Type d ’argument attendu |
Format résultant |
|---|---|---|
|
d |
entier |
entier décimal signé |
|
i |
entier |
entier décimal signé |
|
o |
entier |
entier octal non-signé |
|
u |
entier |
entier décimal non-signé |
|
x |
entier |
entier hexadécimal non-signé (utilisation de a, b, c, d, e et f) |
|
X |
entier |
entier hexadécimal non-signé (utilisation de A, B, C, D, E et F) |
|
f |
flottant |
signé au format [-]dddd.dddd |
|
e |
flottant |
signé au format (-)d.dddd ou e[+/-]ddd |
|
g |
flottant |
signé au format e ou f en fonction de la valeur et de la précision. Les zéros de queue et le point décimal sont imprimés si nécessaire. |
|
E |
flottant |
Comme e mais avec E comme indicateur d ’exposant |
|
G |
flottant |
Comme g mais avec E comme indicateur d ’exposant éventuel |
|
c |
Caractère |
un seul caractère |
|
s |
Chaîne de caractère |
Imprime la chaîne de caractère jusqu ’à ce que l ’on atteigne le caractère de fin de chaîne (0) ou que la précision soit atteinte. |
|
t |
Date et heure |
Imprime la date et/ou l ’heure en fonction de la précision interprété comme un champ de bit : 1 Impression de la date, 2 Impression de l ’heure, 4 Impression du jour de la semaine, 8 Impression détaillée et 16 Impression concise. |
|
% |
Rien |
Imprime le caractère % |
Les flottants de valeurs infinis sont imprimés +INF ou -INF, les flottants IEEE de valeur " Not-A-Number " sont imprimés +NAN ou -NAN.
[1] Dans ce cas si la valeur à imprimer est nulle, aucun caractère ne sera imprimé dans le champ.