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 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
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.
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?

- Aplicaciones de trading gratuitas
- 8 000+ señales para copiar
- Noticias económicas para analizar los mercados financieros
Usted acepta la política del sitio web y las condiciones de uso
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.
Autor: Artyom Trishkin