Использовать файл в бинарном режиме.
FileOpen("filename",FILE_BIN|FILE_READ|FILE_WRITE);
Сначала в файл записываем переменную int с размером массива и следом массив. Если надо дописать в конец файла, перемещаем указатель:
FileSeek(h,0,SEEK_END);
и также сначала пишем int с размером массива, затем массив.
Если надо извлчечь какой-то участок, в цикле вычисляем начало очередного участка (читаем записанные ранее переменные int, умножаем на размер одного элемента массива), пока вычисленное положения указателя не станет равным размеру файла. Можно немного упростить дело, сначала в файл писать int с количеством участков, потом int с размером первого участка и т.д.
Это поможет вычислить размер массива для переноса указателя.
Примерно так... возможны произвольные вариации.
Объявите глобальный массив, и не мучаетесь. Сохраняйте в файл только при перезагрузке.
Глобальный массив есть, но необходима работа с файлами, связанна она с перезагрузкой(выкл. и вкл. советника из торговли)
Использовать файл в бинарном режиме.
Сначала в файл записываем переменную int с размером массива и следом массив. Если надо дописать в конец файла, перемещаем указатель:
и также сначала пишем int с размером массива, затем массив.
Если надо извлчечь какой-то участок, в цикле вычисляем начало очередного участка (читаем записанные ранее переменные int, умножаем на размер одного элемента массива), пока вычисленное положения указателя не станет равным размеру файла. Можно немного упростить дело, сначала в файл писать int с количеством участков, потом int с размером первого участка и т.д.
Это поможет вычислить размер массива для переноса указателя.
Примерно так... возможны произвольные вариации.
Т.е. после того как с помощью выше указанной команды перемещен указатель, затем будет записана следующая строчка массива?
Т.е. после того как с помощью выше указанной команды перемещен указатель, затем будет записана следующая строчка массива?
В бинарном режиме не строчки записываются, а массивы. Как там данные в файле располагаются не важно, нам известен размер массива, тип массива, можно вычислить начало следующего куска данных.
Если файл используется в FILE_CSV, то после установки указателя в конец файла, новая запись будет на новой строке.
Ответьте на вопрос выше, если несложно...
Спасибо Дмитрий! Последний вопрос, получается что массив имеет динамический размер, т.е. сначала double xmas[1][4] (кажется так оформляется мой массив.) затем double xmas[2][4], ... double xmas[k][4]. конкретный пример (кусочек кода) не могли бы прописать?
Сначала просто про массивы пишите, теперь оказывается, что массив многомерный (или не оказывается, а только кажется)...
Можно дописывать:
#define DIM2_SIZE 4 int start(){ int x[2][DIM2_SIZE]; x[0][0]=0;x[0][1]=1;x[0][2]=2;x[0][3]=3; x[1][0]=10;x[1][1]=11;x[1][2]=12;x[1][3]=13; int y[DIM2_SIZE]={20,21,22,23}; // записываем в файл массив x int h=FileOpen("1.txt",FILE_BIN|FILE_WRITE|FILE_READ); FileWriteInteger(h,ArraySize(x),LONG_VALUE); FileWriteArray(h,x,0,ArraySize(x)); FileClose(h); // дописываем в конец массив y h=FileOpen("1.txt",FILE_BIN|FILE_WRITE|FILE_READ); int size=FileReadInteger(h,LONG_VALUE); FileSeek(h,0,SEEK_END); FileWriteArray(h,y,0,ArraySize(y)); FileSeek(h,0,SEEK_SET); FileWriteInteger(h,size+ArraySize(y),LONG_VALUE); FileClose(h); // читаем весь файл в массив z int z[][DIM2_SIZE]; h=FileOpen("1.txt",FILE_BIN|FILE_WRITE|FILE_READ); size=FileReadInteger(h,LONG_VALUE); ArrayResize(z,size/DIM2_SIZE); FileReadArray(h,z,0,size); // смотрим что находится в z for(int i=0;i<ArraySize(z)/DIM2_SIZE;i++){ string s=""; for(int j=0;j<4;j++){ s=s+z[i][j]+" "; } Alert(s); } return(0); }
Сначала просто про массивы пишите, теперь оказывается, что массив многомерный (или не оказывается, а только кажется)...
Можно дописывать:
Согласен вопрос некорректно задал, а правильно заданный вопрос залог правильного ответа, сошлюсь на то, что я человек новый в MQL. Теперь уловил суть, теперь буду делать. Спасибо большое!
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Вы принимаете политику сайта и условия использования
Доброго времени суток!
Необходимо решить следующую задачу:
1 записать массив xmas=(a1,a2,a3,a4) в файл, затем извлечь и использовать в процедуре,
2 на следующем баре xmas=(a5,a6,a7,a8) записать в файл по верх массива пришедшего на предыдущем шаге,
так чтобы в процедуре можно было работать c матрицей
x_history= (a1,a2,a3,a4)
a5,a6,a7,a8
...
k x_history= ( a1, a2,a3,a4)
... ... ... ...
ak ... ... ak+3
как реализовать это на MQL, существенные трудности вызывает лишь запись и чтение из файла так чтобы не удалялась пред история!