Подскажите, как лучше сохранить массивы на жестком диске?

 

Подскажите где можно найти информацию по сохранению массивов и работе с ними в режиме реального времени? В принципе, оперативная память компьютера ни чем не отличается от постоянной памяти (жесткий диск). Единственное отличие - это оперативка стирается при выходе из программ или при выключении компьютера.

Массивы в основном 2-х мерные, но есть и 3-х мерные типа double. Есть ли вариант сохранения и работы с ними по типу глобальных переменных? Глобальные переменные могут сохранять только 1 значение. Или 1 глобальную переменную можно записать как 1 массив?

Работа с файлом дело долгое. Хотелось бы что-то по-быстрее и не слишком сложное...

 

Судя по всему, вы плохо понимаете суть работы памяти - оперативной и дисковой. Потому-то все данные и хранятся в оперативке, что доступ к ней значительно быстрее, чем к диску. Но при этом для долгого хранения используется диск, потому, что он, в отличие от ОЗУ - не теряет информацию при выключении. Глобальные переменные - точно так же записываются сперва в ОЗУ, но потом перекидываются на диск для долгого хранения.

Если вам необходимо сохранить информацию в массиве после выхода из программ или выключения компьютера - единственный путь - запись в файл на диск. (В теории, конечно, можно использовать доступ в сеть, но, скорее всего, он не будет быстрее дискового доступа - поскольку там все равно информация будет храниться на диске)

 

Если копнуть глубже, то понятно, что ПЗУ (программное запоминающее устройство), оно же ОЗУ (основное (или оперативное) запоминающее устройство) и ППЗУ (постоянное программное запоминающее устройство) имеют одни и те же биты для хранения информации.

У меня вопрос. Есть ли какая-нибудь функция в МТ4, с помощью которой можно запоминать на диск то же самое, что и в оперативке, по типу глобальных переменных, но только не 1 значение, а весь массив типа double, состоящий из нескольких миллионов значений?

Запись через файл в формате TXT или CSV производится путем записи каждой ячейки массива в файл. Этот процесс получается очень долгим. Хотелось бы в том же виде, как они находятся в ОЗУ, быстро записать в ППЗУ (на диск), а потом так же быстро вернуть в ОЗУ, чтобы на случай сбоев работы компьютера и других непредвиденных ситуаций не потерять данные и на момент включения быстро без расчетов вернуть все назад.

 
Файлы в бинарном режиме.
 
это как?
 
Дмитрий:

Если копнуть глубже, то понятно, что ПЗУ (программное запоминающее устройство), оно же ОЗУ (основное (или оперативное) запоминающее устройство) и ППЗУ (постоянное программное запоминающее устройство) имеют одни и те же биты для хранения информации.

У меня вопрос. Есть ли какая-нибудь функция в МТ4, с помощью которой можно запоминать на диск то же самое, что и в оперативке, по типу глобальных переменных, но только не 1 значение, а весь массив, состоящий из нескольких миллионов значений?

Запись через файл в формате TXT или CSV производится путем записи каждой ячейки массива в файл. Этот процесс получается очень долгим. Хотелось бы в том же виде, как они находятся в ОЗУ, быстро записать в ППЗУ (на диск), а потом так же быстро вернуть в ОЗУ, чтобы на случай сбоев работы компьютера и других непредвиденных ситуаций не потерять данные и на момент включения быстро без расчетов вернуть все назад.

Мне тоже этого не хватает, штатных средств в MQL я не нашел. Я это представляю как простой и удобный способ записи в файл переменных, массивов и массивов структур с возможностью такого же простого считывания обратно. Ну и в догонку, жду не дождусь штатных средств работы с СУБД, хотя бы insert и select. 
 
Oleg Tsarkov:
Мне тоже этого не хватает, штатных средств в MQL я не нашел. Я это представляю как простой и удобный способ записи в файл переменных, массивов и массивов структур с возможностью такого же простого считывания обратно. Ну и в догонку, жду не дождусь штатных средств работы с СУБД, хотя бы insert и select. 
Чем так сложны файловые операции? Открыл файл, записал в него содержимое буфера, закрыл. Оформляете в виде функции и получаете тот же GlobalVariableSet, но под собственные нужды.
 
Дмитрий:
это как?

Здесь посмотрите. Обратите внимание на FILE_BIN и в левой колонке на функции:

FileReadArray

FileReadBool

FileReadDatetime

FileReadDouble

FileReadFloat

FileReadInteger

FileReadLong

FileReadNumber

FileReadString

FileReadStruct 

-- 

FileWriteArray

FileWriteDouble

FileWriteFloat

FileWriteInteger

FileWriteLong

FileWriteString

FileWriteStruct 

 
Ihor Herasko:
Чем так сложны файловые операции? Открыл файл, записал в него содержимое буфера, закрыл. Оформляете в виде функции и получаете тот же GlobalVariableSet, но под собственные нужды.
Что то я торможу, вы имеете ввиду FileFlush()?
 

Спасибо. Тут есть над чем поразмышлять.

 
Есть же готовые FileWriteArray и FileReadArray, чем не подходят?
Причина обращения: