Yeni başlayanlardan sorular MQL5 MT5 MetaTrader 5 - sayfa 1200

 

Bir soru daha.

bir yapı var

 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;

Doldurdum ve bir dosyaya kaydetmek istiyorum.

 FileWriteStruct (filehandle,vfann);

Derleyici şikayet ediyor - 'vfann' - nesneler içeren yapılara veya sınıflara izin verilmiyor

Anladığım kadarıyla dizileri sevmiyor. Bu yapı nasıl korunabilir?
 
Сергей Таболин :

Bir soru daha.

bir yapı var

Doldurdum ve bir dosyaya kaydetmek istiyorum.

Derleyici şikayet ediyor - 'vfann' - nesneler içeren yapılara veya sınıflara izin verilmiyor

Anladığım kadarıyla dizileri sevmiyor. Bu yapı nasıl korunabilir?

Evet, diziler olmamalıdır. DosyaWriteStruct

... Yapı, dizeler, dinamik diziler , sanal işlevler veya nesnelere ve işlevlere yönelik işaretçiler içermemelidir .

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

Bir soru daha.

bir yapı var

Doldurdum ve bir dosyaya kaydetmek istiyorum.

Derleyici şikayet ediyor - 'vfann' - nesneler içeren yapılara veya sınıflara izin verilmiyor

Anladığım kadarıyla dizileri sevmiyor. Bu yapı nasıl korunabilir?
Diziler yerine bir yapıya sahip olacak bir yapı oluşturun. İlk olarak, her diziyi kendi yapısına paketleyin. Daha sonra elde edilen yapı, elde edilen yapıya paketlenir. Ambalajı ters sırada açın.
 
Сергей Таболин :

Anladığım kadarıyla dizileri sevmiyor. Bu yapı nasıl korunabilir?

metne dönüştürün, öğeyi öğeye kaydedin.

 
Artyom Trishkin :
Diziler yerine bir yapıya sahip olacak bir yapı oluşturun. İlk olarak, her diziyi kendi yapısına paketleyin. Daha sonra elde edilen yapı, elde edilen yapıya paketlenir. Ambalajı ters sırada açın.
İgor Zaharov :

metne dönüştürün, öğeyi öğeye kaydedin.

Teşekkür ederim.

Ve bunu şöyle yaparsanız:

 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

O halde aynı sırayla hepsi bir yapı ve diziler olarak düşünülebilir mi?

Ya birden fazla giriş varsa?

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

Teşekkür ederim.

Ve bunu şöyle yaparsanız:

FILE_BIN

O halde aynı sırayla hepsi bir yapı ve diziler olarak düşünülebilir mi?

Ya birden fazla giriş varsa?

İyi evet. O konseyde ben de çözemedim. Hiç değilse, o zaman yapabilirsiniz. Ama yine de bir yapı içinde bir yapının nasıl oluşturulacağını bulmak daha iyidir. Nasıl yapılacağını sorman yeterli. Aynı zamanda, başka bir şey öğreneceğim ...

 
Alexey Viktorov :

İyi evet. O mecliste ben de çözemedim. Hiç değilse, o zaman yapabilirsiniz. Ama yine de bir yapı içinde bir yapının nasıl oluşturulacağını bulmak daha iyidir. Nasıl yapılacağını sorman yeterli. Aynı zamanda, başka bir şey öğreneceğim ...

Soruyorum))))

Kendi yolumla yapmaya çalıştım.

İlk yapı ve 3 dizi normal olarak okunur (alıcı dizilerin dinamik olmaması şartıyla, aksi takdirde yapıdan sonra yazılan tüm veriler ilk diziye okunur).

Ancak, daha fazla kayıt varsa, o zaman

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

ne saçmalıyor...

Структура
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 :
Diziler yerine bir yapıya sahip olacak bir yapı oluşturun. İlk olarak, her diziyi kendi yapısına paketleyin. Daha sonra elde edilen yapı, elde edilen yapıya paketlenir. Ambalajı ters sırada açın.

Artyom, bir örnek verebilir misin? Dizilerin boyutunun dinamik olduğu göz önüne alındığında.

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

Soruyorum))))

Kendi yolumla yapmaya çalıştım.

İlk yapı ve 3 dizi normal olarak okunur (alıcı dizilerin dinamik olmaması şartıyla, aksi takdirde yapıdan sonra yazılan tüm veriler ilk diziye okunur).

Ancak, daha fazla kayıt varsa, o zaman

ne saçmalıyor...

4 farklı dosya yazmaya çalışıyorsunuz ve sadece birini açıyorsunuz. Üzgünüm .... düzgün kelimeler yok.

 
Alexey Viktorov :

4 farklı dosya yazmaya çalışıyorsunuz ve sadece birini açıyorsunuz. Üzgünüm .... düzgün kelimeler yok.

Her şeyi tek bir dosyada yazıyorum. Birkaç yapıyı tek bir dosyaya yazmak, ardından okumak iyidir.