PrintFormat

Formate et imprime l'ensemble des symboles et des valeurs dans un fichier-journal conformément au format donné.

void  PrintFormat(
   string format_string,   // ligne de format
   ...                     // valeurs des types simples
   );

Paramètres

format_string

[in]  La ligne du format comprend les symboles ordinaires et  encore et les spécifications du format, si la ligne de format est suivie par les arguments.

...

[in]  N'importe quelles valeurs divisées par les virgules.La quantité de paramètres ne peut pas excéder 64, y compris la ligne de format.

La valeur rendue

La chaîne.

Note

При работе в тестере стратегий в режиме оптимизации функция PrintFormat() не выполняется.

Le nombre, l'ordre et le type de paramètres doit correspondre exactement à la composition des spécificateurs, sinon le résultat de l'impression est indéfini. Au lieu de la fonction PrintFormat() on peut utiliser la fonction printf().

Si la ligne du format est suivie encore par les paramètres, cette ligne doit contenir les spécifications du format définissant le format de la sortie de ces paramètres. La spécification du format commence toujours par le symbole du signe du pour-cent (%).

La ligne du format est lue de gauche à droite. Quand il y a une première spécification du format (si elle est), la valeur du premier paramètre après la ligne du format est transformée et est déduit selon la spécification donnée. La deuxième spécification du format appelle la transformation et la conclusion du deuxième paramètre etc, jusqu'à la fin de la ligne du format.

La spécification du format a la forme suivante:            

          %[flags][width][.precision][{h | l | ll | I32 | I64}]type

Chaque champ de la spécification de format est ou le symbole simple, ou le nombre désignant l'option ordinaire de format. La spécification la plus simple du format contient seulement le signe du pour-cent (%) et le symbole définissant le type du paramètre déduit (par exemple %s). S'il faut déduire dans la ligne de format le symbole le signe du pour-cent, il est nécessaire d'utiliser la spécification de format  %%.

flags

Drapeau

Description

Comportement par défaut

— (moins)

L'alignement selon le bout gauche dans la limite de la largeur donnée

L'alignement selon le bord droit

+ (plus)

La sortie du signe + ou - pour les valeurs des types des signes

Le signe est déduit seulement si la valeur est négative

0 (zéro)

Devant la valeur déduite on ajoute les zéros dans la limite de la largeur donnée. Si on a indiqué le drapeau 0 avec le format entier (i, u, x, X, o, d) et la spécification de l'exactitude est spécifiée (par exemple, %04.d), 0 est ignoré.

Rien n'est pas inséré

espace

Devant la valeur déduite on met l'espace, si la valeur est de signe et positive

Les espaces ne sont pas insérés

#

S'il est utilisé en commun avec le format o, x ou X, devant la valeur déduite est ajouté  0, 0x ou 0X conformément.

Rien n'est pas inséré

 

S'il est utilisé en commun avec le format e, E, a ou A, cette valeur est déduite toujours avec le point décimal.

Le point décimal est déduit seulement s'il y a une partie non zéro fractionnaire.

 

S'il est utilisé en commun avec le format g ou G, le drapeau définit la présence du point décimal dans la valeur déduite et empêche l'interruption des zéros principaux

Le drapeau # est ignoré à l'utilisation commune avec les formats c, d, i, u, s.

Le point décimal est déduit seulement s'il y a une partie non zéro fractionnaire. Les zéros principaux sont coupés

width #

Le nombre non négatif décimal, qui spécifie le nombre minimal des symboles déduits de la valeur formaté. Si la quantité de symboles déduits est moins de la largeur indiquée, on ajoute la quantité correspondante des espaces à gauche ou à droite suivant l'alignement (le drapeau —). En présence du drapeau le zéro (0), devant la valeur déduite est ajouté la quantité correspondante de zéros. Si le nombre de symboles déduits plus de largeur spécifiée, la valeur déduite n'est jamais tronquée

Si à titre de la largeur on indique l'astérisque (*), dans la liste des paramètres transmis à la place correspondante doit être une valeur du type int, qui sera utilisé pour l'indication de la largeur de la valeur déduite.

precision #

Le nombre non négatif décimal, qui définit l'exactitude de lasortie — la quantité de chiffres après le point décimal. À la différence de la spécification de la largeur, la spécification de l'exactitude peut couper la partie de la signification fractionnaire avec l'arrondissement ou sans arrondissement

Pour des différents types (type)de format la spécification de l'exactitude est appliquée différemment.

Types

Description

Comportement par défaut

a, A

La spécification de l'exactitude indique la quantité de signes après le point décimal

L'exactitude par défaut — 6.

c, C

N'est pas appliqué

 

d, i, u, o, x, X

Indique le nombre minimal des chiffres déduits. Si le nombre de chiffres dans un paramètre correspondant est moins que exactitude indiquée les zéros sont ajoutés à la valeur déduite. La valeur déduite ne se coupe pas, si la quantité de chiffres déduits plus d'exactitude indiquée

L'exactitude par défaut — 1.

e, E, f

On indique le nombre de chiffres déduits après le point décimal. Le dernier chiffre déduit s'arrondit

L'exactitude par défaut — 6. Si on indique l'exactitude 0 ou la partie fractionnaire manque, le point décimal n'est pas déduit.

g, G

On indique le nombre maximum des chiffres signifiants

On déduit 6 chiffres signifiants.

s

On indique la quantité de symboles déduits de la ligne. Si la longueur la ligne excède la valeur de l'exactitude, la ligne est tronquée sur la sortie

On déduit toute la ligne

 

   PrintFormat("1. %s"_Symbol);
   PrintFormat("2. %.3s"_Symbol);
   int length=4;
   PrintFormat("3. %.*s"length_Symbol);
   /*
   1EURUSD
   2EUR
   3EURU
   /

h | l | ll | I32 | I64

Les spécifications des grandeurs des données transmises à titre du paramètre.

Type du para-mètre

Préfixe utilisé

Spécificateur commun du type

 

int

l (minuscule L)

d, i, o, x, or X

uint

l (minuscule L)

o, u, x, or X

long

ll (deux minuscules  L)

d, i, o, x, or X

short

h

d, i, o, x, or X

ushort

h

o, u, x, or X

int

I32

d, i, o, x, or X

uint

I32

o, u, x, or X

long

I64

d, i, o, x, or X

ulong

I64

o, u, x, or X

type #

Le spécificateur du type est le seul champ obligatoire pour la sortie formatée.

Symbole

Type

Format de sortie

c

int

Le symbole du type short (Unicode)

C

int

Le symbole du type char (ANSI)

d

int

L'entier de signe décimal

i

int

L'entier de signe décimal

o

int

Le nombre entier octal sans signe

u

int

Le nombre entier décimal sans signe

x

int

Le nombre entier hexadecimal sans signe avec l'utilisation "abcdef"

X

int

Le nombre entier hexadecimal sans signe avec l'utilisation "ABCDEF"

e

double

La valeur réelle au format [ — ]d.dddd e [sign]ddd, où d — un chiffre décimal, dddd — un ou plus des chiffres décimaux, ddd —le nombre à trois chiffres, qui détermine la grandeur de l'exposant, sign — le signe plus ou le moins

E

double

Identiquement au format e, excepté que le signe d'exposant  est déduit par la majuscule  (E au lieu d'e)

f

double

La valeur réelle au format [ — ]dddd.dddd,  où dddd — un ou plus de chiffres décimaux. La quantité de signes déduits devant le point décimal dépend de la valeur de la signification du nombre. Le nombre de signes après le point décimal dépend de l'exactitude demandée.

g

double

La valeur réelle, déduite au format f ou e, en fonction de celui-là quelle sortie sera plus compacte.

G

double

La valeur réelle, déduite au format f ou E, en fonction de celui-là quelle sortie sera plus compacte.

a

double

La valeur réelle au format [−]0xh.hhhh p±dd, où h.hhhh — la mantisse dans la forme de chiffres hexadécimaux avec l'utilisation"abcdef", dd — un ou plus de chiffres de l'exposant. Le nombre de signes après la virgule est définie par

la spécification de l'exactitude

A

double

La valeur réelle au format [−]0xh.hhhh P±dd, où h.hhhh — la mantisse dans la forme de chiffres hexadécimaux avec l'utilisation "ABCDEF", dd — un ou plus de chiffres de l'exposant. Le nombre de signes après la virgule est définie par la spécification de l'exactitude

s

string

La sortie de la ligne

Au lieu de la fonction PrintFormat() on peut utiliser la fonction printf().

Exemple:

void OnStart()
  {
//--- имя торгового сервера
   string server=AccountInfoString(ACCOUNT_SERVER);
//--- номер торговго счета
   int login=(int)AccountInfoInteger(ACCOUNT_LOGIN);
//--- вывод значения long
   long leverage=AccountInfoInteger(ACCOUNT_LEVERAGE);
   PrintFormat("%s %d: плечо = 1:%I64d",
               server,login,leverage);
//--- валюта депозита
   string currency=AccountInfoString(ACCOUNT_CURRENCY);               
//--- вывод значения double с 2 цифрами после десятичной точки
   double equity=AccountInfoDouble(ACCOUNT_EQUITY);
   PrintFormat("%s %d: размер собственных средств на счете = %.2f %s",
               server,login,equity,currency);
//--- вывод значения double с обязательным выводом знака +/-
   double profit=AccountInfoDouble(ACCOUNT_PROFIT);
   PrintFormat("%s %d: текущий результат по открытым позициям = %+.2f %s",
               server,login,profit,currency);
//--- вывод значения double с переменным количеством цифр после десятичной точки
   double point_value=SymbolInfoDouble(_Symbol,SYMBOL_POINT);
   string format_string=StringFormat("%%s: значение одного пункта  = %%.%df",_Digits);
   PrintFormat(format_string,_Symbol,point_value);
//--- вывод значения int
   int spread=(int)SymbolInfoInteger(_Symbol,SYMBOL_SPREAD);
   PrintFormat("%s: текущий спред в пунктах = %d ",
               _Symbol,spread);
//--- вывод значения double в научном формате с плавающей запятой и точностью 17 значащих цифр
   PrintFormat("DBL_MAX = %.17e",DBL_MAX);   
//--- вывод значения double в научном формате с плавающей запятой и точностью 17 значащих цифр
   PrintFormat("EMPTY_VALUE = %.17e",EMPTY_VALUE);  
//--- вывод через PrintFormat() с точностью по умолчанию
   PrintFormat("PrintFormat(EMPTY_VALUE) = %e",EMPTY_VALUE);
//--- простой вывод через Print()
   Print("Print(EMPTY_VALUE) = ",EMPTY_VALUE);
/* результат выполнения
   MetaQuotes-Demo 1889998: плечо = 1:100
   MetaQuotes-Demo 1889998: размер собственных средств на счете = 22139.86 USD
   MetaQuotes-Demo 1889998: текущий результат по открытым позициям = +174.00 USD
   EURUSD: значение одного пункта  = 0.00001
   EURUSD: текущий спред в пунктах = 12 
   DBL_MAX = 1.79769313486231570e+308
   EMPTY_VALUE = 1.79769313486231570e+308
   PrintFormat(EMPTY_VALUE) = 1.797693e+308
   Print(EMPTY_VALUE) = 1.797693134862316e+308
*/   
  }

Voir aussi

StringFormat, DoubleToString, Les types matériels (double, float)