Histxmas[qq][0]
Точнее, вижу, но почти уверен, что это все, что Вы делали.
Вы пользовались функцией ArrayResize()? Массив недостаточно просто объявить, надо еще и следить за его размером и увеличивать его когда надо (либо сразу, если знаете будущий размер, либо в цикле).
Короче, вот код, который должен работать:int qq=0; double Histxmas[ ][5]; while (FileIsEnding(h3)==false) { ArrayResize[ Histxmas, qq + 1 ]; Histxmas[qq][0]=StrToDouble(FileReadString(h3)); Print("Histxmas[",qq,"][",0,"]=",Histxmas[qq][0]); Histxmas[qq][1]=StrToDouble(FileReadString(h3)); Print("Histxmas[",qq,"][",1,"]=",Histxmas[qq][1]); Histxmas[qq][3]=StrToDouble(FileReadString(h3)); Print("Histxmas[",qq,"][",2,"]=",Histxmas[qq][2]); Histxmas[qq][4]=StrToDouble(FileReadString(h3)); Print("Histxmas[",qq,"][",3,"]=",Histxmas[qq][3]); qq++; }
Заполнение файла, там вроде все как надо...
void SaveSignal() { //формируем предысторию int hd=FileOpen("history.csv",FILE_CSV|FILE_WRITE|FILE_READ,";"); if(hd<1) { Print("Файл history.csv не найден : ", GetLastError()); return(false); } FileSeek(hd, 0, SEEK_END); FileWrite(hd,xmas[0],xmas[1],xmas[2],xmas[3]); FileClose(hd); }
Сформировав файл(вроде как надо все там), теперь его надо загнать в массив...
double Histxmas[][4];//массив исторических значений индикатора int h3=FileOpen("history.csv",FILE_CSV|FILE_WRITE|FILE_READ,";"); if(h3<1) { Print("Файл history.csv не найден : ", GetLastError()); return(false); } /*----------- Блок "Считывание истории из файла" -------------------------*/ int qq=0; while (FileIsEnding(h3)==false) { Histxmas[qq][0]=StrToDouble(FileReadString(h3)); Print("Histxmas[",qq,"][",0,"]=",Histxmas[qq][0]); Histxmas[qq][1]=StrToDouble(FileReadString(h3)); Print("Histxmas[",qq,"][",1,"]=",Histxmas[qq][1]); Histxmas[qq][3]=StrToDouble(FileReadString(h3)); Print("Histxmas[",qq,"][",2,"]=",Histxmas[qq][2]); Histxmas[qq][4]=StrToDouble(FileReadString(h3)); Print("Histxmas[",qq,"][",3,"]=",Histxmas[qq][3]); qq++; } Print("Определили количество строк в ХистМас"); int N=qq+1; //Это количество строк массива Histxmas, поэтому можем переопределить его размер ArrayResize(Histxmas,N); //переопределяем размер массива исторических значений /*----------- Коней блока "Считывание истории из файла" -------------------*/
В конце использую функцией ArrayResize(), как в учебнике написано сделал, объявил Histxmax[][4]
Нет, не так, orb. ArrayResize() нужно пользовать до записи данных в массив - иначе Вы выходите за пределы массива (хотя компилятор и не ругается). Или увеличивать в цикле, если неизвестно, каким будет размер массива.
Во время Вашего цикла размер массива так и остается равным нулю.
Можно делать и так, как советует FAQ, сам так нередко делаю.
Не в этом случае. Четверка динамические массивы не поддерживает. размер массива определяется на этапе компиляции и резервируется место в памяти. а так как размер файла заранее неизвестен . то будет организован пустой массив куда ничего не запишешь. это прокатывает при работе с котирами, но там значения не передаются - даеться ссыль на масиив котира. так что массивы надо объявлять заранее и побольше.
вот переделал
/*----------- Блок "Считывание истории из файла" -------------------------*/ int qq=1; while (FileIsEnding(h3)==false) { ArrayResize(Histxmas,qq); Histxmas[qq-1][0]=StrToDouble(FileReadString(h3)); Print("Histxmas[",qq-1,"][",0,"]=",Histxmas[qq-1][0]); Histxmas[qq-1][1]=StrToDouble(FileReadString(h3)); Print("Histxmas[",qq-1,"][",1,"]=",Histxmas[qq-1][1]); Histxmas[qq-1][3]=StrToDouble(FileReadString(h3)); Print("Histxmas[",qq-1,"][",2,"]=",Histxmas[qq-1][2]); Histxmas[qq-1][4]=StrToDouble(FileReadString(h3)); Print("Histxmas[",qq-1,"][",3,"]=",Histxmas[qq-1][3]); qq++; } Print("Определили количество строк в ХистМас"); int N=qq; //Это количество строк массива Histxmas, поэтому можем переопределить его размер //переопределяем размер массива исторических значений /*----------- Коней блока "Считывание истории из файла" -------------------*/
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Вы принимаете политику сайта и условия использования
Есть проблема при считывании из файла, значения в массив присваиваются равными 0, есть подозрения, что кол-во знаков после запятой не то. Код прилагаю, а так же строчку из файла, чтобы было понятно о чем речь идет.
Через Print выдает при тестировании:
Histxmas[0][0]=0; Histxmas[0][1]=0; Histxmas[0][2]=0; Histxmas[0][3]=0. А на картинке видно, что эти значения маленькие, но не равные нулю.
Массив объявлен: double Histxmas[][4];
Код:
Файл: