Сдается мне, что у автор недостаточно внятно формулирует проблему.
Похоже, что у него осуществляется какой-то долгий цикл обработки одних и тех же переменных, но вместо того, чтобы произвести его весь, а потом результат записать в файл, автор пытается на каждой итерации писать в файл результат. Неудивительно, что если надо сделать миллион итераций, то обращение к диску на каждой итерации - занимает слишком много времени.
Oleg Tsarkov: Что то я торможу, вы имеете ввиду FileFlush()?
FileFlush - это лишь одна из файловый функций. Речь идет о комплексе работы с файлами именно в том порядке, который указан выше: открыть, записать, закрыть. Ничего сложного.
Ну, 1-мерные и 2-мерные массивы понятно как в файл запишутся.
а как запишутся 3-мерные, 4-мерные, структуры массивов и т.д.?
Двумерные и большей размерности массивы - это исключительно наши представления о них. На самом деле все это одномерные массивы с различным типом индексации. В С++, к примеру нет массивов большей размерности, чем 1. Поэтому такие массивы и структуры стоит воспринимать исключительно как буфер данных. А буфер записывается в файл путем указания количества байт, которые следует записать в этот файл. Чтобы не заморачиваться с подсчетом размера буфера, используется операция sizeof.
FileWriteArray в MT4 неправильно работает с double. double - 16 bit, но FileWriteArray пишет данные на диск как float (8bit). Насчёт mt5 не в курсе.
Вот примерный код, наверное с ошибками ибо не проверял. Код пишет массив double в файл
double doubleArray[];
//тут doubleArray должен быть заполнен какимито даннымиint dataArraySize = ArraySize(dataArray); //записываем в переменную размер массиваint fileHandle = FileOpen("filename.dat", FILE_BIN | FILE_WRITE); // открываем файл на запись в бинарном режиме.FileWriteInteger(fileHandle, dataArraySize);//записываем в файл размер массиваfor(int i=0; i<dataArraySize; i++){
FileWriteDouble(fileHandle, dataArraySize[i]);//записываем в файл все элементы массива по одному
}
FileClose(fileHandle);
Этот код наоборот читает массив double из файла:
double doubleArray[];
int fileHandle = FileOpen("filename.dat", FILE_BIN | FILE_READ); // открываем файл на чтение в бинарном режиме.int dataArraySize = FileReadInteger(fileHandle);//читаем в переменную размер массиваArrayResize(doubleArray, dataArraySize); //изменяем размер массива чтобы вместились все даные из файлаfor(int i=0; i<dataArraySize; i++){
dataArraySize[i] = FileReadDouble(fileHandle);//читаем из файла все элементы массива по одному
}
FileClose(fileHandle);
А если использовать массив float вместо double то вполне можно обойтись FileReadArray и FileWriteArray
FileWriteArray в MT4 неправильно работает с double. double - 16 bit, но FileWriteArray пишет данные на диск как float (8bit). Насчёт mt5 не в курсе.
Вот примерный код, наверное с ошибками ибо не проверял. Код пишет массив double в файл
Этот код наоборот читает массив double из файла:
А если использовать массив float вместо double то вполне можно обойтись FileReadArray и FileWriteArray
Добрый день!
Приложите ваши примеры кода чтения и записи с использованием функций FileReadArray и FileWriteArray Проверили у себя, вычитка дает одинаковые результаты
Сдается мне, что у автор недостаточно внятно формулирует проблему.
Похоже, что у него осуществляется какой-то долгий цикл обработки одних и тех же переменных, но вместо того, чтобы произвести его весь, а потом результат записать в файл, автор пытается на каждой итерации писать в файл результат. Неудивительно, что если надо сделать миллион итераций, то обращение к диску на каждой итерации - занимает слишком много времени.
Что то я торможу, вы имеете ввиду FileFlush()?
Ну, 1-мерные и 2-мерные массивы понятно как в файл запишутся.
а как запишутся 3-мерные, 4-мерные, структуры массивов и т.д.?
Ну, 1-мерные и 2-мерные массивы понятно как в файл запишутся.
а как запишутся 3-мерные, 4-мерные, структуры массивов и т.д.?
https://www.mql5.com/ru/docs/files/filewritearray
Структуры без строк и динамических массивов должны быть.
FileWriteArray в MT4 неправильно работает с double. double - 16 bit, но FileWriteArray пишет данные на диск как float (8bit). Насчёт mt5 не в курсе.
Вот примерный код, наверное с ошибками ибо не проверял. Код пишет массив double в файл
Этот код наоборот читает массив double из файла:
А если использовать массив float вместо double то вполне можно обойтись FileReadArray и FileWriteArray
FileWriteArray в MT4 неправильно работает с double. double - 16 bit, но FileWriteArray пишет данные на диск как float (8bit). Насчёт mt5 не в курсе.
Вот примерный код, наверное с ошибками ибо не проверял. Код пишет массив double в файл
Этот код наоборот читает массив double из файла:
А если использовать массив float вместо double то вполне можно обойтись FileReadArray и FileWriteArray
Добрый день!
Приложите ваши примеры кода чтения и записи с использованием функций FileReadArray и FileWriteArray
Проверили у себя, вычитка дает одинаковые результаты