初学者的问题 MQL5 MT5 MetaTrader 5 - 页 1200

 

另一个问题。

我有一个结构。

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;

我已经填好了,想把它保存到一个文件里。

FileWriteStruct(filehandle,vfann);

编译器抱怨--'vfann'--不允许包含对象的结构或类。

我猜它不喜欢数组。但我怎样才能保存这个结构呢?
 
Сергей Таболин:

另一个问题。

我有一个结构。

我已经填好了,想把它保存到一个文件里。

编译器抱怨--'vfann'--不允许包含对象的结构或类。

我猜它不喜欢数组。但我怎样才能保存这个结构呢?

是的,不应该有数组。FileWriteStruct

...该结构不能包含字符串、动态 数组虚拟函数 以及指向对象和函数的指针

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

另一个问题。

我有一个结构。

我已经填好了,想把它保存到一个文件里。

编译器抱怨--'vfann'--不允许包含对象的结构或类。

我猜它不喜欢数组。但我怎样才能保存这个结构呢?
用结构代替数组创建一个结构。首先,将每个数组打包成自己的结构。然后将产生的结构打包到产生的结构中。按相反的顺序拆包。
 
Сергей Таболин:

我知道它不喜欢数组。你如何保存这个结构?

将其翻译成文本,逐个元素保存。

 
Artyom Trishkin:
用结构代替数组创建一个结构。首先,每个数组应该被打包到自己的结构中。然后将产生的结构打包到产生的结构中。按相反的顺序拆包。
Igor Zakharov:

翻译成文本,逐个元素保存。

谢谢你。

这样吧。

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

然后我们就可以按照相同的顺序将其全部读入结构和数组?

如果有几个这样的记录怎么办?

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

谢谢你。

这样吧。

FILE_BIN

然后你就可以按照相同的顺序将其全部读入结构和数组?

如果有几个这样的记录呢?

是的,我也没能在短时间内弄清这个提示。如果你根本做不到,你可以用这种方式做。但还是要弄清楚如何在结构中做一个结构。问一下怎么做就够了。同时,我也会学到别的东西......

 
Alexey Viktorov:

是的,我也没能在短时间内弄清这个提示。如果你根本做不到,你可以用这种方式做。但还是要弄清楚如何在结构中做一个结构。问一下怎么做就够了。同时,我也会学到别的东西。

询问))))

试图以 "我的方式 "行事。

第一个结构和3个数组的读取很好(前提是数组不是动态的,否则第一个数组会读取所有写在结构之后的数据)。

然而,如果有更多的条目,它

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

它发出了那该死的东西...

Структура
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:
用结构代替数组创建一个结构。首先,每个数组应该被打包到自己的结构中。然后将产生的结构打包到产生的结构中。按相反的顺序拆包。

Artyom,你能给我一个例子吗?鉴于数组的大小 是动态的。

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

询问))))

试图以 "我的方式 "行事。

第一个结构和3个数组读起来很好(前提是数组的接收者不是动态的,否则第一个数组会读取所有写在结构之后的数据)。

然而,如果有更多的条目,那么

它发出了那该死的东西...

你试图写4个不同的文件,而只打开一个。对不起....没有像样的语言。

 
Alexey Viktorov:

你试图写4个不同的文件,而只打开一个。对不起....没有像样的语言。

我把所有东西都写在一个文件里。写入,然后读取,将几个结构写入一个文件,进展顺利。