Perguntas de Iniciantes MQL5 MT5 MetaTrader 5 - página 1200

 

Outra questão.

Eu tenho uma estrutura.

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;

Preenchi-o e quero guardá-lo num ficheiro.

FileWriteStruct(filehandle,vfann);

O compilador queixa-se - 'vfann' - estruturas ou classes contendo objectos não são permitidas

Acho que não gosta de arrays. Mas como posso salvar esta estrutura?
 
Сергей Таболин:

Outra questão.

Eu tenho uma estrutura.

Preenchi-o e quero guardá-lo num ficheiro.

O compilador queixa-se - 'vfann' - estruturas ou classes contendo objectos não são permitidas

Acho que não gosta de arrays. Mas como posso salvar esta estrutura?

Sim, não deve haver matrizes.FileWriteStruct

...A estrutura não deve conter cordas,arrays dinâmicos,funções virtuais e apontadores para objectos e funções.

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

Outra questão.

Eu tenho uma estrutura.

Preenchi-o e quero guardá-lo num ficheiro.

O compilador queixa-se - 'vfann' - estruturas ou classes contendo objectos não são permitidas

Acho que não gosta de arrays. Mas como posso salvar esta estrutura?
Criar uma estrutura com uma estrutura em vez de arrays. Em primeiro lugar, embalar cada conjunto na sua própria estrutura. Em seguida, embalar a estrutura resultante na estrutura resultante. Desembalar em ordem inversa.
 
Сергей Таболин:

Compreendo que não gosta de arrays. Como é que se salva esta estrutura?

traduzi-lo em texto, guardá-lo elemento por elemento.

 
Artyom Trishkin:
Criar uma estrutura com uma estrutura em vez de arrays. Primeiro, cada conjunto deve ser embalado na sua própria estrutura. Em seguida, embalar a estrutura resultante na estrutura resultante. Desembalar em ordem inversa.
Igor Zakharov:

traduzir em texto, salvar elemento por elemento.

Obrigado.

Que tal isto?

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.

Então podemos ler tudo na estrutura e nas matrizes na mesma ordem?

E se existirem vários registos deste tipo?

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

Obrigado.

Que tal isto?

FILE_BIN.

Então pode ler tudo na estrutura e nas matrizes na mesma ordem?

E se houver vários registos deste tipo?

Sim. Também não consegui perceber essa dica na mosca. Se não o pode fazer de todo, pode fazê-lo dessa forma. Mas é ainda melhor descobrir como fazer uma estrutura dentro de uma estrutura. Basta perguntar como o fazer. Ao mesmo tempo, também vou aprender outra coisa...

 
Alexey Viktorov:

Sim, também não consegui perceber essa dica na mosca. Se não o pode fazer de todo, pode fazê-lo dessa forma. Mas é ainda melhor descobrir como fazer uma estrutura dentro de uma estrutura. Basta perguntar como o fazer. Ao mesmo tempo, também vou aprender outra coisa.

Perguntando ))))

Tentei fazê-lo "à minha maneira".

A primeira estrutura e 3 matrizes lêem bem (desde que as matrizes não sejam dinâmicas, caso contrário a primeira matriz lê todos os dados escritos após a estrutura).

No entanto, se houver mais entradas, é

   // Проверка
   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);
      }
   }

dá o raio da coisa...

Структура
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:
Criar uma estrutura com uma estrutura em vez de arrays. Primeiro, cada conjunto deve ser embalado na sua própria estrutura. Em seguida, embalar a estrutura resultante na estrutura resultante. Desembalar em ordem inversa.

Artyom, pode dar-me um exemplo? Dado que o tamanho das matrizes é dinâmico.

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

Perguntando ))))

Tentei fazê-lo "à minha maneira".

A primeira estrutura e 3 matrizes lêem bem (desde que os receptores das matrizes não sejam dinâmicos, caso contrário, a primeira matriz lê todos os dados escritos após a estrutura).

No entanto, se houver mais entradas, então

dá o raio da coisa...

Está a tentar escrever 4 ficheiros diferentes e apenas abrir um. Desculpe.... não há palavras decentes.

 
Alexey Viktorov:

Está a tentar escrever 4 ficheiros diferentes e apenas abrir um. Desculpe.... não há palavras decentes.

Escrevo tudo num só ficheiro. A escrita, seguida de leitura, de várias estruturas num só ficheiro corre bem.