forked from nique_372/MQLArticles
		
	
		
			
				
	
	
		
			84 lines
		
	
	
	
		
			6.4 KiB
		
	
	
	
		
			MQL5
		
	
	
	
	
	
			
		
		
	
	
			84 lines
		
	
	
	
		
			6.4 KiB
		
	
	
	
		
			MQL5
		
	
	
	
	
	
//+------------------------------------------------------------------+
 | 
						|
//|                                                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
 | 
						|
}
 | 
						|
//+------------------------------------------------------------------+
 |