//+------------------------------------------------------------------+ //| StringToArray.mqh | //| Copyright 2025, Niquel Mendoza. | //| https://www.mql5.com | //+------------------------------------------------------------------+ #property copyright "Copyright 2025, Niquel Mendoza." #property link "https://www.mql5.com" #property strict //+------------------------------------------------------------------+ //| | //+------------------------------------------------------------------+ string StringTrimChar(const string &str, ushort to_delete_character = ' ') { int len = StringLen(str); if(len == 0) return str; int start = 0; int end = len - 1; //--- while(start < len && StringGetCharacter(str, start) == to_delete_character) start++; if(start == len) return ""; // Todo son caracteres a eliminar //--- while(end >= start && StringGetCharacter(str, end) == to_delete_character) end--; return StringSubstr(str, start, end - start + 1); } //+------------------------------------------------------------------+ //| Macro para generar funciones dentro del namespace | //+------------------------------------------------------------------+ namespace StrTo { #define DEFINE_STRING_TO_ARRAY(TYPE, CONVERT_FUNC) \ bool CstArray(TYPE &array_receptor[], const string &cadena, ushort cadena_separator = ',', bool trim = false) \ { \ string result[]; \ ResetLastError(); \ int num = StringSplit(cadena, cadena_separator, result); \ if(num == -1) \ return false; \ \ if(ArrayResize(array_receptor, ArraySize(result)) == -1) \ return false; \ \ for(int i = 0; i < ArraySize(array_receptor); i++) \ { \ string trim_str = trim ? StringTrimChar(result[i]) : result[i]; \ array_receptor[i] = CONVERT_FUNC; \ } \ return true; \ } // Generar funciones sobrecargadas para cada tipo DEFINE_STRING_TO_ARRAY(string, trim_str) DEFINE_STRING_TO_ARRAY(int, (int)StringToInteger(trim_str)) DEFINE_STRING_TO_ARRAY(long, StringToInteger(trim_str)) DEFINE_STRING_TO_ARRAY(short, (short)StringToInteger(trim_str)) DEFINE_STRING_TO_ARRAY(char, (char)StringToInteger(trim_str)) DEFINE_STRING_TO_ARRAY(bool, (StringToInteger(trim_str) != 0)) DEFINE_STRING_TO_ARRAY(uint, (uint)StringToInteger(trim_str)) DEFINE_STRING_TO_ARRAY(ulong, (ulong)StringToInteger(trim_str)) DEFINE_STRING_TO_ARRAY(uchar, (uchar)StringToInteger(trim_str)) DEFINE_STRING_TO_ARRAY(ushort, (ushort)StringToInteger(trim_str)) DEFINE_STRING_TO_ARRAY(double, StringToDouble(trim_str)) DEFINE_STRING_TO_ARRAY(float, (float)StringToDouble(trim_str)) DEFINE_STRING_TO_ARRAY(datetime, StringToTime(trim_str)) DEFINE_STRING_TO_ARRAY(color, StringToColor(trim_str)) #undef DEFINE_STRING_TO_ARRAY } //+------------------------------------------------------------------+