Preguntas de los principiantes MQL5 MT5 MetaTrader 5 - página 1200

 

Otra pregunta.

Tengo una estructura.

struct Fann
{
   int      answer;
   double   v_main_up;
   double   v_add_up;
   double   v_main_dn;
   double   v_add_dn;
   double   data_1[];
   double   data_2[];
   double   data_3[];
};
Fann vfann;

Lo he rellenado y quiero guardarlo en un archivo.

FileWriteStruct(filehandle,vfann);

El compilador se queja - 'vfann' - las estructuras o clases que contienen objetos no están permitidas

Supongo que no le gustan las matrices. Pero, ¿cómo puedo guardar esta estructura?
 
Сергей Таболин:

Otra pregunta.

Tengo una estructura.

Lo he rellenado y quiero guardarlo en un archivo.

El compilador se queja - 'vfann' - las estructuras o clases que contienen objetos no están permitidas

Supongo que no le gustan las matrices. Pero, ¿cómo puedo guardar esta estructura?

Sí, no debería haber arrays.FileWriteStruct

...La estructura no debe contener cadenas,matrices dinámicas,funciones virtuales y punteros a objetos y funciones.

Документация по MQL5: Файловые операции / FileWriteStruct
Документация по MQL5: Файловые операции / FileWriteStruct
  • www.mql5.com
//|                                          Demo_FileWiteStruct.mq5 | //|                        Copyright 2013, MetaQuotes Software Corp. | //|                                             https://www.mql5.com | //| Структура для хранения данных свечи                              |...
 
Сергей Таболин:

Otra pregunta.

Tengo una estructura.

Lo he rellenado y quiero guardarlo en un archivo.

El compilador se queja - 'vfann' - las estructuras o clases que contienen objetos no están permitidas

Supongo que no le gustan las matrices. Pero, ¿cómo puedo guardar esta estructura?
Crear una estructura con una estructura en lugar de arrays. En primer lugar, empaqueta cada matriz en su propia estructura. A continuación, empaqueta la estructura resultante en la estructura resultante. Desembale en orden inverso.
 
Сергей Таболин:

Tengo entendido que no le gustan las matrices. ¿Cómo se guarda esta estructura?

traducirlo en texto, guardarlo elemento por elemento.

 
Artyom Trishkin:
Crear una estructura con una estructura en lugar de arrays. En primer lugar, cada matriz debe ser empaquetada en su propia estructura. A continuación, empaqueta la estructura resultante en la estructura resultante. Desembale en orden inverso.
Igor Zakharov:

traducir en texto, guardar elemento por elemento.

Gracias.

¿Qué te parece esto?

struct Fann
{
   int      answer;
   double   v_main_up;
   double   v_add_up;
   double   v_main_dn;
   double   v_add_dn;
};
Fann vfann;

   double   data_1[];
   double   data_2[];
   double   data_3[];
...........................
      FileWriteStruct(filehandle,vfann);
      FileWriteArray(filehandle,data_1);
      FileWriteArray(filehandle,data_2);
      FileWriteArray(filehandle,data_3);

FILE_BIN.

Entonces, ¿podemos leerlo todo en la estructura y las matrices en el mismo orden?

¿Y si hay varios registros de este tipo?

 
Сергей Таболин:

Gracias.

¿Qué te parece esto?

FILE_BIN.

Entonces, ¿se puede leer todo en la estructura y las matrices en el mismo orden?

¿Y si hay varios registros de este tipo?

Sí. Yo tampoco pude descubrir ese consejo sobre la marcha. Si no puedes hacerlo en absoluto, puedes hacerlo así. Pero aún así, es mejor averiguar cómo hacer una estructura dentro de una estructura. Basta con preguntar cómo hacerlo. Al mismo tiempo, también aprenderé algo más...

 
Alexey Viktorov:

Sí. Yo tampoco pude descubrir ese consejo sobre la marcha. Si no puedes hacerlo en absoluto, puedes hacerlo así. Pero aún así, es mejor averiguar cómo hacer una estructura dentro de una estructura. Basta con preguntar cómo hacerlo. Al mismo tiempo, también aprenderé algo más.

Preguntando a ))))

Traté de hacerlo "a mi manera".

La primera estructura y los 3 arrays se leen bien (siempre que los arrays no sean dinámicos, de lo contrario el primer array lee todos los datos escritos después de la estructura).

Sin embargo, si hay más entradas, se

   // Проверка
   double   rdata_1[6];
   double   rdata_2[6];
   double   rdata_3[6];
   
   filehandle = FileOpen(filename,FILE_READ|FILE_COMMON|FILE_BIN);
   if(filehandle != INVALID_HANDLE)
   {
      while(!FileIsEnding(filehandle))
      {
         FileReadStruct(filehandle,rfann);
         FileReadArray(filehandle,rdata_1);
         FileReadArray(filehandle,rdata_2);
         FileReadArray(filehandle,rdata_3);
         Print("++++++++++++++++++++++++++++++");
         Print("Структура");
         Print(rfann.v_main_up+"|"+rfann.v_main_dn+"|"+rfann.v_add_up+"|"+rfann.v_add_dn+"|"+rfann.answer);
         Print("Массивы");
         Print("--- 1");
         ArrayPrint(rdata_1);
         Print("--- 2");
         ArrayPrint(rdata_2);
         Print("--- 3");
         ArrayPrint(rdata_3);
      }
   }

da la maldita cosa...

Структура
4.0|-1.0|2.8|-0.7|1
Массивы
--- 1
 1.00000  0.33225 -0.76202 -0.93263 -1.00000 -0.79174
--- 2
-0.14603  0.89562  0.91407  0.93450  0.89481  0.89829
--- 3
 0.89564  0.89217 -0.91174 -0.86623 -1.00000 -0.07680
++++++++++++++++++++++++++++++
Структура
1.839259944929932 e+277|-nan|5.295254096666168 e-315|3.0|-618173028
Массивы
--- 1
 2.10000 -2.00000 -1.40000 -0.85098 -1.00000 -0.79900
--- 2
-0.30490  0.47926  1.00000  0.70827  0.84163  0.84134
--- 3
 0.83925  0.84173  0.84760  0.84678  0.80368 -0.00063
++++++++++++++++++++++++++++++
Структура
9.384173261527221 e-276|5.298850499315376 e-315|2.955277867691187 e+299|-9.638234784517503 e-243|-1705145188
Массивы
--- 1
+0.00000 +0.00000  4.00000  2.80000  0.00000  0.00000
--- 2
 1.00000  0.22097 -0.37383 -0.73115 -0.81752 -1.00000
--- 3
-0.87753  0.46919  0.59706  0.76223  0.82610  0.84312
++++++++++++++++++++++++++++++
 
Artyom Trishkin:
Crear una estructura con una estructura en lugar de arrays. En primer lugar, cada matriz debe ser empaquetada en su propia estructura. A continuación, empaqueta la estructura resultante en la estructura resultante. Desembale en orden inverso.

Artyom, ¿puedes darme un ejemplo? Dado que el tamaño de las matrices es dinámico.

 
Сергей Таболин:

Preguntando a ))))

Traté de hacerlo "a mi manera".

La primera estructura y los 3 arrays se leen bien (siempre que los receptores de los arrays no sean dinámicos, de lo contrario el primer array lee todos los datos escritos después de la estructura).

Sin embargo, si hay más entradas, se

da la maldita cosa...

Estás tratando de escribir 4 archivos diferentes y sólo abres uno. Lo siento.... no hay palabras decentes.

 
Alexey Viktorov:

Estás tratando de escribir 4 archivos diferentes y sólo abres uno. Lo siento.... no hay palabras decentes.

Escribo todo en un solo archivo. La escritura, seguida de la lectura, de varias estructuras en un archivo va bien.

Razón de la queja: