Domande dai principianti MQL5 MT5 MetaTrader 5 - pagina 1200

 

Un'altra domanda.

Ho una struttura.

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;

L'ho compilato e voglio salvarlo in un file.

FileWriteStruct(filehandle,vfann);

Il compilatore si lamenta - 'vfann' - strutture o classi contenenti oggetti non sono ammesse

Immagino che non gli piacciano gli array. Ma come posso salvare questa struttura?
 
Сергей Таболин:

Un'altra domanda.

Ho una struttura.

L'ho compilato e voglio salvarlo in un file.

Il compilatore si lamenta - 'vfann' - strutture o classi contenenti oggetti non sono ammesse

Immagino che non gli piacciano gli array. Ma come posso salvare questa struttura?

Sì, non ci dovrebbero essere array.FileWriteStruct

...La struttura non deve contenere stringhe,matrici dinamiche,funzioni virtuali e puntatori a oggetti e funzioni.

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

Un'altra domanda.

Ho una struttura.

L'ho compilato e voglio salvarlo in un file.

Il compilatore si lamenta - 'vfann' - strutture o classi contenenti oggetti non sono ammesse

Immagino che non gli piacciano gli array. Ma come posso salvare questa struttura?
Creare una struttura con una struttura al posto degli array. Per prima cosa, impacchettate ogni array nella propria struttura. Poi impacchetta la struttura risultante nella struttura risultante. Disimballare in ordine inverso.
 
Сергей Таболин:

Ho capito che non gli piacciono gli array. Come si salva questa struttura?

tradurlo in testo, salvarlo elemento per elemento.

 
Artyom Trishkin:
Creare una struttura con una struttura al posto degli array. In primo luogo, ogni array dovrebbe essere impacchettato nella propria struttura. Poi impacchetta la struttura risultante nella struttura risultante. Disimballare in ordine inverso.
Igor Zakharov:

tradurre in testo, salvare elemento per elemento.

Grazie.

Che ne dite di questo:

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.

Poi possiamo leggere tutto nella struttura e negli array nello stesso ordine?

Cosa succede se ci sono più registri di questo tipo?

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

Grazie.

Che ne dite di questo:

FILE_BIN.

Poi puoi leggere tutto nella struttura e negli array nello stesso ordine?

E se ci sono diverse registrazioni di questo tipo?

Sì, anch'io non riuscivo a capire quella punta al volo. Se non riesci a farlo per niente, puoi farlo in questo modo. Ma è ancora meglio capire come fare una struttura dentro una struttura. È sufficiente chiedere come farlo. Allo stesso tempo, imparerò anche qualcos'altro...

 
Alexey Viktorov:

Sì, nemmeno io sono riuscito a capire questo suggerimento al volo. Se non riesci a farlo per niente, puoi farlo in questo modo. Ma è ancora meglio capire come fare una struttura dentro una struttura. È sufficiente chiedere come farlo. Allo stesso tempo, imparerò anche qualcos'altro.

Chiedendo a ))))

Ho cercato di farlo "a modo mio".

La prima struttura e i 3 array leggono bene (purché gli array non siano dinamici, altrimenti il primo array legge tutti i dati scritti dopo la struttura).

Tuttavia, se ci sono più voci, è

   // Проверка
   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à fuori la dannata 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:
Creare una struttura con una struttura al posto degli array. In primo luogo, ogni array dovrebbe essere impacchettato nella propria struttura. Poi impacchetta la struttura risultante nella struttura risultante. Disimballare in ordine inverso.

Artyom, puoi farmi un esempio? Dato che la dimensione degli array è dinamica.

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

Chiedendo a ))))

Ho cercato di farlo "a modo mio".

La prima struttura e i 3 array leggono bene (a condizione che i ricevitori degli array non siano dinamici, altrimenti il primo array legge tutti i dati scritti dopo la struttura).

Tuttavia, se ci sono più voci, è

dà fuori la dannata cosa...

State cercando di scrivere 4 file diversi e di aprirne solo uno. Scusa.... non ci sono parole decenti.

 
Alexey Viktorov:

State cercando di scrivere 4 file diversi e di aprirne solo uno. Scusa.... non ci sono parole decenti.

Scrivo tutto in un file. La scrittura, seguita dalla lettura, di diverse strutture in un file va bene.