¿Cómo hacer la conversión inversa? (de cadena a estructura)
conststring Str = DATA_STRING::ToString(a); // Traducir la estructura en una cadena.
str_Message Tmp[1];
// Obtener un array de estructuras a partir de la cadenaif (DATA_STRING::FromString(Str, Tmp))
{
ArrayPrint(Tmp);
Print(Tmp[0].str[]);
Print(_R(Tmp) == a); // Verificar que los datos coinciden con los datos originales.
}
// Obtener la estructura de la cadena.// Tmp[0] = DATA_STRING::FromString<str_Mensaje>(Str); // Esto es posible si no hay operador de asignación (ver STRING120::operador =).
He escrito una función para guardar cadenas de cualquier longitud en variables globales utilizando su biblioteca. No lo entiendo todo, así que seguro que no la he usado al 100%.
¿Alguna idea sobre un uso más eficiente?
#include <TypeToBytes.mqh>
//--------------------------------------------------------------------------------------------------string
GVarGetString(string name) {
double dbl[];
// Leer las partes de la variable: Nombre, Nombre(1), Nombre(2), ...for (int i = 0; ; ++i) {
string s = (i == 0)? "" : "(" + (string)i + ")";
double t = GlobalVariableGet(name + s);
if (t == 0)
break;
MyArrayResize(dbl, i + 1);
dbl[i] = t;
}
uchar tmp0[], tmp[], tmp1[];
_ArrayCopy(tmp0, dbl);
if (tmp0[0] != 0)
// Sin comprimirreturnCharArrayToString(tmp0);
else {
// Con compresiónArrayCopy(tmp, tmp0, 0, 1);
CryptDecode(CRYPT_ARCH_ZIP, tmp, tmp1, tmp1);
returnCharArrayToString(tmp1);
}
}
//--------------------------------------------------------------------------------------------------void
GVarSetString(string name, string val) {
double dbl[];
uchar tmp[];
uchar zero[1];
int cnt = CryptEncode(CRYPT_ARCH_ZIP, _R(val).Bytes, tmp, tmp);
if (cnt >= StringLen(val)) {
// Sin comprimirstring str[1];
str[0] = val;
_ArrayCopy(dbl, str);
}
else {
// Con compresión
_ArrayCopy(dbl, zero, 0, 0, 1); // Byte[0] == 0 - con compresión
_ArrayCopy(dbl, tmp, 1); // De byte[1] datos
}
// Escribe las partes de la variable: Nombre, Nombre(1), Nombre(2), ...
cnt = ArraySize(dbl);
for (int i = 0; i < cnt; ++i) {
string s = (i == 0)? "" : "(" + (string)i + ")";
GlobalVariableSet(name + s, dbl[i]);
}
GlobalVariablesFlush();
}
и динамическое формирование имени массива не обязательно строкового. Отдельный тип глобальных переменных - скорее всего не добавят. таким образом можно записывать и считывать из глобальных переменных строки
El código convierte una estructura en una cadena
¿Cómo hacer la conversión inversa? (de cadena a estructura)
El código convierte la estructura en una cadena
¿Cómo hacer la conversión inversa? (de cadena a estructura)
La línea amarilla de código ya no compila. Da el siguiente error (build 2980):
¿Alguna idea para solucionar el problema?
La línea amarilla de código ya no compila. Genera el siguiente error (compilación 2980):
¿Alguna idea para solucionar el problema?
Foro sobre trading, sistemas automatizados de trading y testeo de estrategias de trading
Bibliotecas: SingleTesterCache
fxsaber, 2021.06.21 02:42 pm.
En TypeToBytes.mqh, sustituye {0} por {} en todas partes.
Actualizado. Evita una característica que se encontró. Anteriormente podía afectar negativamente a _ArrayCopy y CONTAINER.
He escrito una función para guardar cadenas de cualquier longitud en variables globales utilizando su biblioteca. No lo entiendo todo, así que seguro que no la he usado al 100%.
¿Alguna idea sobre un uso más eficiente?
¿Alguna idea sobre un uso más eficiente?
Echa un vistazo a esta opción.
También sería conveniente usar CONTAINER<double> para las variables globales .
Echa un vistazo a esta opción.
También sería conveniente utilizar CONTAINER<double> para las variables globales .
Gracias