Скачать MetaTrader 5

Как организовать хранение данных в виде 2-мерной таблицы через массивы в MQL4?

Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий
Forex Trader
114267
Forex Trader 2006.07.21 19:54 
Привет подскажите как в MQL4 можно в массивах хранить информацию в виде 2 мерной таблицы значений главное интересует как в них ее записать и как считать хотелось бы хранить информацию такого типа:
таблица
---------------
| a | 1 | a1 |
| b | 4 | a2 |
| c | 2 | b4 |
| d | 4 | c5 |
| e | 7 | c4 |

хотелось бы использовать многомерный массив но шо то не соображу никак как таблицу в него запихнуть видимо сказывается пятница :))
MetaQuotes Software Corp.
Модератор
182378
MetaQuotes Software Corp. 2006.07.21 20:30  
int MyArray[3][4];
MyArray[2][3]=10;
Forex Trader
114267
Forex Trader 2006.07.22 05:36  
Благодарю Ренат, но в приведенном примере я вижу лишь что объявлен невыровненный массив с вложенным массивом и что 3 индексу вложенного массива присвоено значение 10 :) с этим то у меня нет никаких проблем я бы очень хотел увидеть на примере как можно занести в массив именно 2 мерную таблицу со строковыми данными а потом получить ее в Print() если можно приведите пожалуйста такой пример я уже сколько бьюсь не получается засунуть туда строковую таблицу.
Forex Trader
114267
Forex Trader 2006.07.22 07:43  
string MyArray[5][3];
for(int i=0;l<5;i++){
   for(int j=0;j<3;j++){
      MyArray[i][j]="Строка № "+i+" Колонка № "+j;
   }
}





Forex Trader
114267
Forex Trader 2006.07.22 08:47  
Спасибо с таблицей разобрался, появилась другая проблема не хочет записываться и корректно считываться массив из бинарного файла:

//+------------------------------------------------------------------+
//| script program start function                                    |
//+------------------------------------------------------------------+
int start()
  {
//----
string MyArray[5][3];
for(int i=0;i<5;i++){
   for(int j=0;j<3;j++){
      MyArray[i][j]="Строка № "+i+" Колонка № "+j;
   }
} 
 Print("Содержимое массива до записи в файл");
 for(int a=0;a<5;a++){
   for(int b=0;b<3;b++){
      Print(MyArray[a][b]);
   }
} 

 int handle=FileOpen("mydata.dat", FILE_BIN|FILE_WRITE);
  if(handle>0)
    {
     FileWriteArray(handle, MyArray, 0,500000); // запись последних 7 элементов
     FileClose(handle);
    }

  int handle1;
  double varray[5][3];
  handle1=FileOpen("mydata.dat", FILE_BIN|FILE_READ);
  if(handle1>0)
    {
     FileReadArray(handle1, varray,0,500000);
     FileClose(handle1);
    }
Print("Содержимое массива загруженного из файла");
for(int k=0;k<5;k++){
   for(int l=0;l<3;l++){
      Print(varray[k][l]);
   }
} 
  
//----
   return(0);
  }
//+------------------------------------------------------------------+


до записи в бинарник из массива все корректно считывается и выводится в Print() а после записи в файл и чтения оттуда выводится всякая хрень:

11:43:09 RW_Array2 GBPUSD,H1: loaded successfully
11:43:09 RW_Array2 GBPUSD,H1: Содержимое массива до записи в файл
11:43:09 RW_Array2 GBPUSD,H1: Строка № 0 Колонка № 0
11:43:09 RW_Array2 GBPUSD,H1: Строка № 0 Колонка № 1
11:43:09 RW_Array2 GBPUSD,H1: Строка № 0 Колонка № 2
11:43:09 RW_Array2 GBPUSD,H1: Строка № 1 Колонка № 0
11:43:09 RW_Array2 GBPUSD,H1: Строка № 1 Колонка № 1
11:43:09 RW_Array2 GBPUSD,H1: Строка № 1 Колонка № 2
11:43:09 RW_Array2 GBPUSD,H1: Строка № 2 Колонка № 0
11:43:09 RW_Array2 GBPUSD,H1: Строка № 2 Колонка № 1
11:43:09 RW_Array2 GBPUSD,H1: Строка № 2 Колонка № 2
11:43:09 RW_Array2 GBPUSD,H1: Строка № 3 Колонка № 0
11:43:09 RW_Array2 GBPUSD,H1: Строка № 3 Колонка № 1
11:43:09 RW_Array2 GBPUSD,H1: Строка № 3 Колонка № 2
11:43:09 RW_Array2 GBPUSD,H1: Строка № 4 Колонка № 0
11:43:09 RW_Array2 GBPUSD,H1: Строка № 4 Колонка № 1
11:43:09 RW_Array2 GBPUSD,H1: Строка № 4 Колонка № 2
11:43:09 RW_Array2 GBPUSD,H1: Содержимое массива загруженного из файла
11:43:09 RW_Array2 GBPUSD,H1: -0
11:43:09 RW_Array2 GBPUSD,H1: -349292260054055120000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
11:43:09 RW_Array2 GBPUSD,H1: 0
11:43:09 RW_Array2 GBPUSD,H1: -0
11:43:09 RW_Array2 GBPUSD,H1: -349292260054055120000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
11:43:09 RW_Array2 GBPUSD,H1: 0
11:43:09 RW_Array2 GBPUSD,H1: -0
11:43:09 RW_Array2 GBPUSD,H1: -349292260054055120000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
11:43:09 RW_Array2 GBPUSD,H1: 0
11:43:09 RW_Array2 GBPUSD,H1: -0
11:43:09 RW_Array2 GBPUSD,H1: -349292260054065400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
11:43:09 RW_Array2 GBPUSD,H1: 0
11:43:09 RW_Array2 GBPUSD,H1: -0
11:43:09 RW_Array2 GBPUSD,H1: -349292260054065400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
11:43:09 RW_Array2 GBPUSD,H1: 0
11:43:09 RW_Array2 GBPUSD,H1: removed


Таким образом получается что при чтении невыровненного или многомерного массива из файла информация из массива теряется!
этого кстати не происходит если массив не имеет вложенных массивов или имеет только одно измерение т.е вот такой массив: Myarray[10]; нормально прочитается из бинарника.
как решить проблему, подскажите пожалуйста :)

Forex Trader
114267
Forex Trader 2006.07.22 09:50  
может количество элементов равное 500000 для этого массива не подойдет? Если указать реальное количество элементов и при записи и при считывании.
Forex Trader
114267
Forex Trader 2006.07.22 10:44  
может количество элементов равное 500000 для этого массива не подойдет? Если указать реальное количество элементов и при записи и при считывании.

неа дело не в этом я эту мелочь уже проверял, если ставить 500000 то команда FileWriteArray(handle, MyArray, 0,500000) запишет элементы массива от 0 по количество элементов но не больше.
если поставить 15 будет тоже самое
Forex Trader
114267
Forex Trader 2006.07.22 10:52  
возможно это небольшой глюк платформы МТ4, или специальное ограничение я думаю здесь могут помочь только разработчики :)
Forex Trader
114267
Forex Trader 2006.07.22 12:36  
Renat подскажите пожалуйста чем вызвана эта ошибка ведь судя по всему функции FileWriteArray() и FileReadArray() нормально
выполняются но после чтения массива из бинарника содержимое массива или теряется или возвращается в другом формате
который нужно преобразовывать...
вобщем я теряюсь в догадках :)
MetaQuotes Software Corp.
Модератор
182378
MetaQuotes Software Corp. 2006.07.22 17:05  
Записывать Вы можете хоть 1млн - запишется все равно столько, сколько есть.
А вот читать надо столько, сколько надо.

Вы попробуйте при записи сначала записать количество элементов, а потом сам массив. А при чтении сначала вычитывайте размер, а лишь затем сам массив.
Forex Trader
114267
Forex Trader 2006.07.23 14:49  
неа тут как раз все было ОК, тупеж тут заключался в том что массив который сохраняется объявлялся
как string а в который считывается как double :))
Спасибо разобрался...
Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий