existe-t-il une fonction "StringToEnum" ou une alternative ?

 

Bonjour, si je le fais :

string a = EnumToString(MODE_SMMA) ;

j'obtiens :

a ="MODE_SMMA"

Maintenant, je voudrais une fonction qui fasse exactement le contraire, je veux dire quelque chose comme :

int b = StringToEnum("MODE_SMMA") ;

b = 2

où 2 est la valeur int associée à la constante :"MODE_SMMA".


Salutations, cyberglassed.

 
MODE_SMMA

est déjà la valeur entière 2.

Print(IntegerToString(MODE_SMMA));
 
https://www.mql5.com/en/docs/convert dispose d'une large liste de fonctions de conversion.
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:

est déjà la valeur entière 2.

Ce que vous dites ne correspond pas à mes besoins. Comme vous pouvez le lire dans ma question, je sais comment convertir une valeur d'énumération en chaîne de caractères, mais ce que je veux faire est exactement le contraire :

avec le code :

int b = StringToEnum("MODE_SMMA") ;

Je veux obtenir ce qui suit :

b = 2

 

Il n'y a pas de StringToEnum.

MODE_SMMA

est déjà la valeur entière 2.

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



int b;

string StringToEnum="MODE_SMMA";

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

Print("b= ",b);



 
cyberglassed:

Ce que vous dites ne correspond pas à mes besoins. Comme vous pouvez le lire dans ma question, je sais comment convertir une valeur d'énumération en chaîne de caractères, mais ce que je veux faire est exactement le contraire :

avec le code :

int b = StringToEnum("MODE_SMMA") ;

Je veux obtenir ce qui suit :

b = 2

Vous avez également demandé s'il y avait une alternative, ce que Marco a indiqué.
 

merci les gars

 

merci Alain pour ton conseil mais en fait je n'ai pas de bonne solution pour mon problème,
donc je dois prendre des solutions de contournement bizarres.
Il serait vraiment bien que mql5 supporte l'évaluation dynamique du code comme la fonction eval(...) en PHP et Javascript,
alors nous pourrions charger de petits morceaux de codes depuis des fichiers externes (parfois très intéressants) et même implémenter la fonction : StringToEnum facilement comme :

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

En d'autres termes, avec le soutien de la fonction eval(...), nous pourrions résoudre de nombreuses choses en même temps.

Cela pourrait être un conseil très intéressant pour l'équipe de développeurs MT5.

Merci, Cyberglassed.
 
cyberglassed:

merci Alain pour ton conseil mais en fait je n'ai pas de bonne solution pour mon problème,
donc je dois prendre des solutions de contournement bizarres.
Il serait vraiment bien que mql5 supporte l'évaluation dynamique du code comme la fonction eval(...) en PHP et Javascript,
alors nous pourrions charger de petits morceaux de codes depuis des fichiers externes (parfois très intéressants) et même implémenter la fonction : StringToEnum facilement comme :

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

En d'autres termes, avec le soutien de la fonction eval(...), nous pourrions résoudre de nombreuses choses en même temps.

Cela pourrait être un conseil très intéressant pour l'équipe de développeurs MT5.

Merci, Cyberglassed.
La possibilité existe déjà dans MQL de charger des bibliothèques externes (comme les DLL) ou des fichiers #include spécifiques et de faire en sorte que cela se passe de cette façon. Comme MQL est également un langage OOP, en théorie, vous pourriez écrire le code de cette fonction vous-même, et simplement l'inclure dans vos programmes pour lesquels vous avez besoin de cette fonctionnalité particulière. Soit dans le code de votre EA, soit dans un fichier externe.
 
JD4:
La possibilité existe déjà dans MQL de charger des bibliothèques externes (comme les DLL) ou des fichiers #include spécifiques et de faire en sorte que cela se passe de cette façon. Comme MQL est aussi un langage OOP, en théorie, vous pourriez écrire ce code de fonction vous-même, et juste l'inclure dans vos programmes dont vous avez besoin de cette fonctionnalité particulière. Soit dans le code de votre EA, soit comme un fichier externe.

merci JD4, mais malheureusement cela ne répond pas à mes besoins car lorsque vous chargez des DLLs externes, vous leur passez des paramètres et obtenez un résultat basé sur ces paramètres, c'est bien, mais là vous programmez dans un autre langage/environnement/emplacement et pas exactement dans mql5. J'ai programmé des DLLs personnalisées et les ai chargées dans mql5 quand pour moi le langage qui traitera mes paramètres n'a pas d'importance, mais sur ce fil, je voulais que les données soient traitées dans mql5 pour pouvoir utiliser (par exemple) les variables locales et globales. Si vous utilisez des DLL externes, là vous ne connaîtrez pas les valeurs des variables locales et globales, car c'est comme une machine de traitement externe. Ensuite, si vous avez une fonction comme eval(...) disponible dans mql5 (pour l'instant ce n'est pas le cas car elle n'est pas implémentée) alors vous pouvez utiliser les variables globales et locales, et même les fonctions.