Скачать MetaTrader 5

Ошибка в функциях FileWriteArray(), FileReadArray()

Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий
Написал программу? Опубликуй ее в Code Base!
Forex Trader
114255
Forex Trader 2006.02.12 07:56 
Здравствуйте, почему то функции FileWriteArray(), FileReadArray() не работает с многомерными массивами
например FileWriteArray() вроде записывает 2-мерный массив, а FileReadArray() уже читает оттуда какой-то мусор. в то же время одномерные массивы успешно записываются и читаются.
объясните пожалуйста, или это MQL4 еще настолько игрушечный, что работа с многомерными массивами через файлы для него непосильная задача, или разработчики считают небезопасным для пользователя записывать многомерные массивы в файл :))
вобщем я в недоумении
MetaQuotes Software Corp.
Модератор
181050
MetaQuotes Software Corp. 2006.02.12 17:25  
Уважаемый Pavel VL,

Многие тоже в недоумении от Ваших слабооформленных вопросов. Ряд вопросов и резких утверждений, сформулированных Вами за последнее время, позволяет сделать некоторые выводы.

Придерживайтесь, пожалуйста, следующих моментов:
1) если есть вопрос, то четко его формулируйте
2) прикладывайте спорный код (желательно полностью)
3) воздержитесь от выводов
Forex Trader
114255
Forex Trader 2006.02.12 18:25  
пожалуйста код. загнал в скрипт.
//+------------------------------------------------------------------+
//|                                                    CopyRates.mq4 |
//|                      Copyright © 2006, MetaQuotes Software Corp. |
//|                                        http://www.metaquotes.net |
//+------------------------------------------------------------------+
#property copyright "Copyright © 2006, MetaQuotes Software Corp."
#property link      "http://www.metaquotes.net"
int Fd;
//+------------------------------------------------------------------+
//| script program start function                                    |
//+------------------------------------------------------------------+
int start()
  {
//----

MFileWR();
Sleep(5000);
MFileRD();   
//----
   return(0);
  }
double MFileWR(){
string FileName;          
double array1[][6];
//ArrayResize(array1,ml);
int handle;
ArrayCopyRates(array1,Symbol(),Period());
Fd = ArrayRange( array1,0);
Print(Fd);


Print("Current bar ",TimeToStr(array1[0][0])," Open Price ", array1[0][1]," Total 1 dim ",Fd);

FileName="RATES_Script_"+Symbol()+Period(); 
 // запись массива в файл
  handle=FileOpen(FileName,FILE_BIN|FILE_READ|FILE_WRITE);
  if(handle>0)
    {
     FileWriteArray(handle, array1, 0,Fd); 
     FileFlush(handle); 
     FileClose(handle);
     
    }


return(0);
}
//+------------------------------------------------------------------+

double MFileRD(){
string FileName;          
double array1[100000][6];
int handle;
int LastError;
FileName="RATES_Script_"+Symbol()+Period(); 
 // чтение массива из файла
  
  handle=FileOpen(FileName,FILE_BIN|FILE_READ|FILE_WRITE);
  if(handle>0)
    {
int Fdr = FileReadArray(handle, array1, 0,Fd); 
Print("Elements Read ",Fdr);
LastError=GetLastError();
if(LastError>0)Print(LastError/*," ",ErrorDescription(LastError)*/);     
     FileFlush(handle); 
     FileClose(handle);
    }

Fd = ArrayRange( array1, 0);
Print(Fd);
for (int i=0; i<Fd; i++){
Print("Open Time: ",TimeToStr(array1[i][0]));
Print("Open price : ",array1[i][1]);
Print("Low : ",array1[i][2]);
Print("High : ",array1[i][3]);
Print("Close : ",array1[i][4]);
Print("Volume : ",array1[i][5]);
}
return(0);
}
MetaQuotes Software Corp.
Модератор
181050
MetaQuotes Software Corp. 2006.02.12 21:48  
К сожалению, Вы упустили из виду саму чуть функции чтения массива.
Записали количество записей по первой размерности, забыв, что надо бы умножить на 6 (вторая размерность). Постарайтесь самостоятельно разобраться в своем коде.

Многомерные массивы нормально записываются и читаются:
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
double MFileWR()
  {
   double array1[4][4];
   int    handle;
//---- заполним массив
   for(int i=0;i<4;i++)
     for(int j=0;j<4;j++) array1[i][j]=i*4+j;
//---- запись массива в файл
   handle=FileOpen("TestFile",FILE_BIN|FILE_WRITE);
   if(handle>0)
     {
      FileWriteArray(handle,array1,0,16); 
      FileFlush(handle); 
      FileClose(handle);
     }
//----
   return(0);
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
double MFileRD()
  {
   double array1[4][4];
   int    handle;
//----
   handle=FileOpen("TestFile",FILE_BIN|FILE_READ);
   if(handle>0)
     {
      FileReadArray(handle,array1,0,16); 
      FileClose(handle);
     }
//---- распечатаем массив
   for(int i=0;i<4;i++)
     {
      string str="";
      for(int j=0;j<4;j++) { str=str+array1[i][j]+" "; }
      Print("#",i," ",str);
     }
//----
   return(0);
  }
//+------------------------------------------------------------------+
//| script program start function                                    |
//+------------------------------------------------------------------+
int start()
  {
//----
   MFileWR();
   MFileRD();   
//----
   return(0);
  }
Forex Trader
114255
Forex Trader 2006.02.12 23:43  
Renat 12.02.06 17:25
Уважаемый Pavel VL,
Многие тоже в недоумении от Ваших слабооформленных вопросов. Ряд вопросов и резких утверждений, сформулированных Вами за последнее время, позволяет сделать некоторые выводы.


А так как я не обязан быть приторно корректным, то скажу пряма !!!
Pavel VL - вы крикливый мозгоклюй. Доказательство - все ваши посты.
Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий