Сохранение в файл многомерного массива - страница 2

 
Yuriy Asaulenko:

Придется глянуть.))

WHOLE_ARRAY не пробовали? 

Если спецификации массивов по выделяемой памяти в С++ и MQL совпадают, то можно попробовать нач. индекс 0 и конечный 400*15-1. 

https://www.mql5.com/ru/docs/files/filewritearray 

пустой файл. Видимо тоже для одномерных...

Пишу так:

filehandle = FileOpen(InpDirectoryName+"//"+InpFileName,FILE_READ|FILE_WRITE|FILE_BIN);
//--- запишем данные массива в конец файла
FileSeek(filehandle,0,SEEK_END);
FileWriteArray(filehandle,param,0,WHOLE_ARRAY);
//--- закрываем файл
FileClose (filehandle);  


 

 
Artem Mordvinkin:

пустой файл. Видимо тоже для одномерных...

Пишу так:

FileOpen(InpDirectoryName+"//"+InpFileName,FILE_READ|FILE_WRITE|FILE_BIN);
//--- запишем данные массива в конец файла
FileSeek(filehandle,0,SEEK_END);
FileWriteArray(filehandle,param,0,WHOLE_ARRAY);
//--- закрываем файл
FileClose (filehandle);  


 

А массив где? Сильно подозреваю, что он пуст. 
 
Artem Mordvinkin:

пустой файл. Видимо тоже для одномерных...

Пишу так:

filehandle = FileOpen(InpDirectoryName+"//"+InpFileName,FILE_READ|FILE_WRITE|FILE_BIN);
//--- запишем данные массива в конец файла
FileSeek(filehandle,0,SEEK_END);
FileWriteArray(filehandle,param,0,WHOLE_ARRAY);
//--- закрываем файл
FileClose (filehandle);  


 

Попробуйте кол-во элементов 400*15-1. Заодно посмотрим спецификацию по распределению памяти в MQL.

Для начала, я бы одномерный массив туда бросил, для проверки работоспособности. 

Зы Там кол-во, а не последний индекс, так что нужно  400*15.

 
Yuriy Asaulenko:

Попробуйте кол-во элементов 400*15-1. Заодно посмотрим спецификацию по распределению памяти в MQL.

Для начала, я бы одномерный массив туда бросил, для проверки работоспособности. 

Зы Там кол-во, а не последний индекс, так что нужно  400*15.


params[1] = 232323;
filehandle= FileOpen(InpDirectoryName+"//"+InpFileName,FILE_READ|FILE_WRITE|FILE_BIN);
//--- запишем данные массива в конец файла
//FileSeek(filehandle,0,SEEK_END);
FileWriteArray(filehandle,params,0,1);
//--- закрываем файл
FileClose (filehandle);

пустой файл 

 

Слеши не в ту степь повернуты. Файл не открыт, и в него ничего не пишется. В справке

  string filename=terminal_data_path+"\\MQL5\\Files\\"+"fractals";

 Хорошо бы массив чем-нибудь инициализировать, чтобы можно было идентифицировать незаполненные значения. Убрать FILE_READ, соответственно, не нужен FileSeek().

 
Artem Mordvinkin:


пустой файл 

Я бы не стал в этой ситуации пренебрегать FileSeek(filehandle,0,SEEK_END); Только SEEK_SET, а не SEEK_END. Хотя, конечно, указатель сам должен встать на начало.

А файл создается? 

 
Yuriy Asaulenko:

Я бы не стал в этой ситуации пренебрегать FileSeek(filehandle,0,SEEK_END); Только SEEK_SET, а не SEEK_END. Хотя, конечно, указатель сам должен встать на начало.

А файл создается? 

да, создается
 
Artem Mordvinkin:
да, создается

Тогда не понимаю. Я не вижу в чем косяк. Давайте прямо из справки экзэмпл возьмем. И оттуда будем плясать. Он то должен работать.) 

ЗЫ Там, кстати, можно просто имя файла написать, без всяких путей. Он сам найдет куда записаться. Там папка для записи - раз и все. У MQ это называется экосистема.)

PS файлы перед началом удалите. Пусть прога сама создает. Может выясниться, что вы не тот файл смотрите.) 

 
Yuriy Asaulenko:

Тогда не понимаю. Я не вижу в чем косяк. Давайте прямо из справки экзэмпл возьмем. И оттуда будем плясать. Он то должен работать.) 

ЗЫ Там, кстати, можно просто имя файла написать, без всяких путей. Он сам найдет куда записаться. Там папка для записи - раз и все. У MQ это называется экосистема.)

PS файлы перед началом удалите. Пусть прога сама создает. Может выясниться, что вы не тот файл смотрите.) 

файл тот - решил просто алгоритм записи поменять. Массив создается черед double param[400][15]. Все вроде бы по примеру и пустой файл. Более того, воспользовался примером https://www.mql5.com/ru/forum/105027
Запись многомерного массива в файл
Запись многомерного массива в файл
  • www.mql5.com
Вот такой вопрос : при записи в файл одномерного массива проблем не возникает , а вот при попытке записать многомерный массив сам файл создается, н...
 
Artem Mordvinkin:
файл тот - решил просто алгоритм записи поменять. Массив создается черед double param[400][15]. Все вроде бы по примеру и пустой файл. 

Так у вас даже одномерный не писался и был пустой.

ЗЫ В теме по ссылке для многомерных массивов все как мы и говорили. 

 ЗЫ А вы его инициализировали, массив, прежде чем писать?

ЗЫ2 У вас одномерный массив инициализирован и объявлен некорректно (или вы не весь код привели). 

Уж если инициализировать, то int param[1]; param[0]=2345; или  double param[1]; param[0]=23,45;. Можно и по другому - эт в справке посмотрите.

Причина обращения: