初心者の方からの質問 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:
配列の代わりに構造体を用いて作成する。まず、各配列を独自の構造体にまとめる必要があります。そして、出来上がった構造体を、出来上がった構造体の中に詰め込む。逆の手順で開梱します。
イゴール・ザハロフ

をテキストに変換し、要素ごとに保存します。

ありがとうございます。

これはどうでしょう。

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:
配列の代わりに構造体を用いて作成します。まず、各配列を独自の構造体にまとめる必要があります。そして、出来上がった構造体を、出来上がった構造体の中に詰め込む。逆の手順で開梱します。

アルチョム、例を挙げてくれないか?アレイのサイズが 動的であることを考えると

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

聞く )))

自分流」にやってみた。

最初の構造体と3つの配列は正常に読み込まれます(配列のレシーバが動的でない場合、最初の配列は構造体の後に書かれたすべてのデータを読み込む)。

ただし、それ以上のエントリーがある場合は

が出てしまう...。

4種類のファイルを書き込んで、1つしか開けないようにしているのですね。すみません...。まともな言葉がない。

 
Alexey Viktorov:

4種類のファイルを書き込んで、1つしか開けないようにしているのですね。すみません...。まともな言葉がない。

1つのファイルにすべてを書き込んでいます。1つのファイルに複数の構造体を書き込み、その後読み込むと、うまくいきます。

理由: