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
|
|
}
|
|
//+------------------------------------------------------------------+
|