Diskussion zum Artikel "PrintFormat() studieren und vorgefertigte Beispiele anwenden"

 

Neuer Artikel PrintFormat() studieren und vorgefertigte Beispiele anwenden :

Der Artikel ist sowohl für Anfänger als auch für erfahrene Entwickler nützlich. Wir werden uns die Funktion PrintFormat() ansehen, Beispiele für die Formatierung von Zeichenketten analysieren und Vorlagen für die Anzeige verschiedener Informationen im Terminalprotokoll schreiben.

Die Anzeige von Werten im Protokoll oder auf dem Bildschirm ist ein einfacher und vertrauter Vorgang, bis Sie etwas Komplexeres als „Hallo, Welt“ anzeigen müssen. Früher oder später tritt jedoch eine Situation ein, in der Sie eine formatierte Ausgabe eines Wertes oder einer Eigenschaft benötigen, die nicht sehr häufig nachgefragt wird. Natürlich können Sie auch in der MQL5-Hilfe nachsehen.


Aber manchmal möchte man eine fertige Sammlung von Rezepten für die Anzeige aller Arten von Informationen haben, die das MetaTrader 5-Terminal bietet. In diesem Artikel werden wir versuchen, die Feinheiten des Aufrufs der Funktion PrintFormat zu verstehen und fertige Vorlagen zu schreiben, die Sie einfach in Ihren Code einfügen können.

Autor: Artyom Trishkin

 

Ich danke Ihnen. Sehr informativ, aber nicht beim ersten Lesen...))))))

Das Lesen der Hilfe beim Schreiben von Code ist irgendwie mühsam und zeitaufwendig. Deshalb verstehe ich nicht viel... Ich hoffe, dieser Artikel wird mir helfen, die Feinheiten von PrintFormat() und StringFormat() besser zu verstehen.

 
Vielleicht ist der einzige nicht offensichtliche Punkt in der Hilfe nicht abgedeckt - in welchen Fällen es wirklich nützlich sein kann, den Datengrößen-Spezifikator (h | l | ll | I32 | I64) anzugeben, wenn alles ohne ihn funktioniert.
 
JRandomTrader #:
Der einzige nicht offensichtliche Punkt, der in der Hilfe nicht behandelt wird, ist vielleicht die Angabe der Datengröße (h | l | ll | I32 | I64), die wirklich nützlich sein kann, wenn alles ohne sie funktioniert.

Sehen Sie sich dieses Beispiel an

//+------------------------------------------------------------------+
//| Skript-Programmstartfunktion|
//+------------------------------------------------------------------+
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));

  }

Ergebnis

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 #:
Vielleicht wird der einzige nicht offensichtliche Punkt in der Hilfe nicht behandelt - in welchen Fällen kann es wirklich nützlich sein, den Datengrößenbezeichner (h | l | ll | I32 | I64) anzugeben, wenn alles ohne ihn funktioniert.

Natürlich funktioniert es. Aber gerade vor ein paar Stunden habe ich über dieselbe Frage nachgedacht, und mir kam ein Gedanke: Wenn wir nur Doppelwerte an eine Funktion übergeben, und dann innerhalb der Funktion aufgrund bestimmter Kriterien feststellen, dass diese Doppelwerte lange Daten sein sollten. Hier können wir ihre Größe angeben. Nur ein lauter Gedanke. Ich habe es nicht überprüft.

 

Wie konnte ich all die Jahre ohne Printformat leben? Wahrscheinlich werde ich das auch weiterhin tun.

 
Dmitry Fedoseev #:

Wie konnte ich all die Jahre ohne Printformat leben? Wahrscheinlich werde ich das auch weiterhin tun.

Wahrscheinlich

 

Artem, ich verstehe nicht, woher das kommt.

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

Ich habe keine Bibliothek eingefügt. Oder bin ich völlig blind?

 
Alexey Viktorov #:

Artem, ich verstehe nicht, wo das herkommt.

Ich habe keine Bibliothek eingefügt. Oder bin ich völlig blind?

Dies ist jetzt eine Standardfunktionalität für String-Variablen und Arrays.

 
Artyom Trishkin #:

Dies ist nun eine Standardfunktionalität für String-Variablen und Arrays.

Ich danke Ihnen. Aber in der Dokumentation steht überhaupt nichts darüber. Was für eine Zahl gibt sie zurück. Ist es ein Duplikat von StringLen()?

 
Alexey Viktorov #:

Ich danke Ihnen. Aber in der Dokumentation steht überhaupt nichts darüber. Was für eine Zahl gibt sie zurück. Ist es ein Duplikat von StringLen()?

Ja