Discusión sobre el artículo "Analizamos PrintFormat() y tomamos ejemplos listos para usar"

 

Artículo publicado Analizamos PrintFormat() y tomamos ejemplos listos para usar:

El presente artículo resultará útil tanto a principiantes como a desarrolladores experimentados. En él veremos el funcionamiento de la función PrintFormat(), analizaremos ejemplos de formato string y escribiremos plantillas para enviar información diversa al registro del terminal.

Enviar valores al registro o a la pantalla del monitor es una operación simple y familiar, hasta que sea necesario generar algo más complejo que "Hello, world". Pero tarde o temprano surge una situación en la que debemos generar la muestra formateada de un valor o propiedad que no suele ser necesario. Obviamente, podemos consultar la guía de ayuda de MQL5 y recordar lo que hemos olvidado o aprender lo que aún no sabemos.


Pero a veces queremos disponer de una colección de recetas preparadas para mostrar la amplia gama de información que el terminal MetaTrader 5 pone a nuestro alcance. En este artículo intentaremos analizar las complejidades de la llamada a la función PrintFormat y escribir plantillas listas para usar que simplemente se puedan insertar en nuestro código.

Autor: Artyom Trishkin

 

Gracias. Muy informativo, pero no desde la primera lectura...))))))

Leer la ayuda cuando se escribe código es de alguna manera doloroso y consume mucho tiempo. Por eso no entiendo mucho... Espero que este artículo me ayude a entender mejor las sutilezas de PrintFormat() y StringFormat().

 
Quizás el único punto no obvio de la ayuda no está cubierto - en qué casos puede ser realmente útil especificar el especificador de tamaño de datos (h | l | ll | I32 | I64) si todo funciona sin él.
 
JRandomTrader #:
Quizás el único punto no obvio no cubierto en la ayuda es cuando especificar el especificador de tamaño de datos (h | l | ll | I32 | I64) puede ser realmente útil si todo funciona sin él.

Mire este ejemplo

//+------------------------------------------------------------------+
//| Función de inicio del programa de script|
//+------------------------------------------------------------------+
void OnStart()
  {
//---
   long x = (long)0xFFFFFFFF * 1000;

   Print("\nDEC: ",  typename(x)," x=",x,"\n---------");
   Print("%hu: ",  StringFormat("%hu",x));
   Print("%u: ",   StringFormat("%u",x));
   Print("%I64u: ",StringFormat("%I64u",x));
   Print("%llu: ", StringFormat("%llu",x));
   Print("\nHEX: ",  typename(x)," x=",StringFormat("%llx",x),"\n---------");
   Print("%hx: ",  StringFormat("%hx",x));
   Print("%x: ",   StringFormat("%x",x));
   Print("%I64x: ",StringFormat("%I64x",x));
   Print("%llx: ", StringFormat("%llx",x));

  }

Resultado

2023.07.12 17:48:12.920 PrinFormat (EURUSD,H1)  DEC: long x=4294967295000
2023.07.12 17:48:12.920 PrinFormat (EURUSD,H1)  ---------
2023.07.12 17:48:12.920 PrinFormat (EURUSD,H1)  %hu: 64536
2023.07.12 17:48:12.920 PrinFormat (EURUSD,H1)  %u: 4294966296
2023.07.12 17:48:12.920 PrinFormat (EURUSD,H1)  %I64u: 4294967295000
2023.07.12 17:48:12.920 PrinFormat (EURUSD,H1)  %llu: 4294967295000
2023.07.12 17:48:12.920 PrinFormat (EURUSD,H1)  
2023.07.12 17:48:12.920 PrinFormat (EURUSD,H1)  HEX: long x=3 e7fffffc18
2023.07.12 17:48:12.920 PrinFormat (EURUSD,H1)  ---------
2023.07.12 17:48:12.920 PrinFormat (EURUSD,H1)  %hx: fc18
2023.07.12 17:48:12.920 PrinFormat (EURUSD,H1)  %x: fffffc18
2023.07.12 17:48:12.920 PrinFormat (EURUSD,H1)  %I64x: 3 e7fffffc18
2023.07.12 17:48:12.920 PrinFormat (EURUSD,H1)  %llx: 3 e7fffffc18
 
JRandomTrader #:
Quizás el único punto no obvio de la ayuda no está cubierto - en qué casos puede ser realmente útil especificar el especificador de tamaño de datos (h | l | ll | I32 | I64) si todo funciona sin él.

Por supuesto que funciona. Pero hace un par de horas estaba dándole vueltas a la misma pregunta y se me ocurrió una idea: si a una función le pasamos sólo valores dobles, y luego dentro, en base a algún criterio, entendemos que esos datos dobles deben ser datos largos. Aquí es donde especificamos su tamaño. Es sólo una idea en voz alta. No lo he comprobado.

 

¿Cómo he podido vivir todos estos años sin printformat? Probablemente seguiré haciéndolo.

 
Dmitry Fedoseev #:

¿Cómo he podido vivir todos estos años sin printformat? Probablemente seguiré haciéndolo.

Probablemente

 

Artem, no entiendo de dónde ha salido esto.

   uint w=(header_width==0 ? header.Length()+1 : header_width);

No he conectado ninguna biblioteca. ¿O estoy completamente ciego?

 
Alexey Viktorov #:

Artem, no entiendo de dónde salió eso.

No conecté ninguna biblioteca. ¿O estoy completamente ciego?

Esto es ahora una funcionalidad estándar para variables de cadena y matrices.

 
Artyom Trishkin #:

Esta es ahora la funcionalidad estándar a las variables de cadena, a las matrices.

Gracias. Pero no hay nada en la documentación al respecto. ¿Qué tipo de número devuelve? ¿Es un duplicado de StringLen()?

 
Alexey Viktorov #:

Gracias. Pero no hay nada en la documentación al respecto. ¿Qué tipo de número devuelve? ¿Es un duplicado de StringLen()?