Gibt es eine "StringToEnum"-Funktion oder eine Alternative?

 

Hallo, wenn ich das tue:

string a = EnumToString(MODE_SMMA);

erhalte ich:

a ="MODE_SMMA"

Nun hätte ich gerne eine Funktion, die genau das Gegenteil macht, ich meine etwas wie:

int b = StringToEnum("MODE_SMMA");

b = 2

wobei 2 der int-Wert ist, der der Konstante"MODE_SMMA" zugeordnet ist.


Mit freundlichen Grüßen, cyberglassed.

 
MODE_SMMA

ist bereits der ganzzahlige Wert 2.

Print(IntegerToString(MODE_SMMA));
 
https://www.mql5.com/en/docs/convert verfügt über eine umfangreiche Gruppenliste von Konvertierungsfunktionen.
Documentation on MQL5: Conversion Functions
Documentation on MQL5: Conversion Functions
  • www.mql5.com
Conversion Functions - Reference on algorithmic/automated trading language for MetaTrader 5
 
Marco vd Heijden:

ist bereits der ganzzahlige Wert 2.

Was Sie sagen, passt nicht zu meinen Bedürfnissen. Wie Sie in meiner Frage lesen können, weiß ich, wie man einen Enum-Wert in eine Zeichenkette umwandelt, aber was ich tun möchte, ist genau das Gegenteil:

mit dem Code:

int b = StringToEnum("MODE_SMMA");

Ich möchte das Folgende erhalten:

b = 2

 

Es gibt keinen StringToEnum.

MODE_SMMA

ist bereits der Integer-Wert 2.

   int b=MODE_SMMA;
   Print("b= ",b);



int b;

string StringToEnum="MODE_SMMA";

if(StringToEnum=="MODE_SMMA"){b=2;}

Print("b= ",b);



 
cyberglassed:

Was Sie sagen, passt nicht zu meinen Bedürfnissen. Wie Sie in meiner Frage lesen können, weiß ich, wie man einen Enum-Wert in eine Zeichenkette umwandelt, aber was ich tun möchte, ist genau das Gegenteil:

mit dem Code:

int b = StringToEnum("MODE_SMMA");

Ich möchte das Folgende erhalten:

b = 2

Sie haben auch gefragt, ob es eine Alternative gibt, auf die Marco hingewiesen hat.
 

Ich danke euch, Jungs

 
Alain Verleyen:
Ich warte immer noch auf einen gültigen Anwendungsfall für die StringToEnum-Funktion:-)

Vielen Dank, Alain, für deinen Rat, aber eigentlich habe ich keine gute Lösung für mein Problem,
also muss ich einige seltsame Workarounds nehmen.
Es wäre wirklich schön, wenn mql5 die dynamische Code-Auswertung wie die eval(...) -Funktion in PHP und Javascript unterstützen würde,
dann könnten wir kleine Codestücke aus externen Dateien laden (manchmal sehr interessant) und sogar die Funktion: StringToEnum einfach wie:

int StringToEnum(string enumId) {
eval("return " + enumId + ";");
}

Mit anderen Worten, mit der Unterstützung der eval(...) -Funktion könnten wir viele Dinge gleichzeitig lösen.

Das könnte ein sehr interessanter Ratschlag für das MT5-Entwicklerteam sein.

Vielen Dank, Cyberglassed.
 
cyberglassed:

danke Alain für deinen Rat, aber eigentlich habe ich keine gute Lösung für mein Problem,
also muss ich einige seltsame Workarounds nehmen.
Es wäre wirklich schön, wenn mql5 eine dynamische Code-Auswertung wie die eval(...) -Funktion in PHP und Javascript unterstützen würde,
dann könnten wir kleine Codestücke aus externen Dateien laden (manchmal sehr interessant) und sogar die Funktion: StringToEnum einfach wie:

int StringToEnum(string enumId) {
eval("return " + enumId + ";");
}

Mit anderen Worten, mit der Unterstützung der eval(...) -Funktion könnten wir viele Dinge gleichzeitig lösen.

Das könnte ein sehr interessanter Ratschlag für das MT5-Entwicklerteam sein.

Vielen Dank, Cyberglassed.
In MQL gibt es bereits die Möglichkeit, entweder externe Bibliotheken (als DLLs) oder bestimmte #include-Dateien zu laden und es auf diese Weise geschehen zu lassen. Da MQL auch eine OOP-Sprache ist, könnten Sie theoretisch diesen Funktionscode selbst schreiben und ihn einfach in Ihre Programme einfügen, für die Sie diese spezielle Funktionalität benötigen. Entweder innerhalb des Codes Ihres EA oder als externe Datei.
 
JD4:
In MQL gibt es bereits die Möglichkeit, entweder externe Bibliotheken (als DLLs) oder bestimmte #include-Dateien zu laden und es auf diese Weise geschehen zu lassen. Da MQL auch eine OOP-Sprache ist, könnten Sie theoretisch diesen Funktionscode selbst schreiben und ihn einfach in Ihre Programme einfügen, für die Sie diese spezielle Funktionalität benötigen. Entweder innerhalb des Codes Ihres EA oder als externe Datei.

Danke JD4, aber leider löst das meine Anforderungen nicht, denn wenn man externe DLLs lädt, übergibt man ihnen einige Parameter und erhält ein Ergebnis, das auf diesen Parametern basiert, das ist OK, aber da programmiert man in einer anderen Sprache/Umgebung/Ort und nicht genau in mql5. Ich habe benutzerdefinierte DLLs programmiert und sie in mql5 geladen, wenn es für mich keine Rolle spielt, in welcher Sprache meine Parameter verarbeitet werden, aber in diesem Thread wollte ich, dass die Daten in mql5 verarbeitet werden, damit ich (zum Beispiel) lokale und globale Variablen nutzen kann. Wenn Sie externe DLLs verwenden, werden Sie die Werte der lokalen und globalen Variablen nicht kennen, da es sich um eine externe Verarbeitungsmaschine handelt. Wenn Sie dann eine Funktion wie eval(...) in mql5 zur Verfügung haben (im Moment ist das nicht der Fall, weil nicht implementiert), können Sie globale und lokale Variablen und sogar Funktionen verwenden.

Grund der Beschwerde: