Вопросы от начинающих MQL5 MT5 MetaTrader 5 - страница 1201
Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь
Я пишу всё в один файл. Запись, с последующим чтением, нескольких структур в один файл проходит нормально.
Но читается массив от начала до конца. Как вы его разбиваете на 3 части? Как вы записали структуру и в тот-же файл умудрились записать массив? Я самоучка, много чего не знаю, но то, что это разные форматы данных, как-то подозреваю.
Я допускаю, что можно исхитриться и вот так, открыв файл для записи один раз впихнуть в него три массива, но так просто его частями не прочитаешь.
Но читается массив от начала до конца. Как вы его разбиваете на 3 части? Как вы записали структуру и в тот-же файл умудрились записать массив? Я самоучка, много чего не знаю, но то, что это разные форматы данных, как-то подозреваю.
Я допускаю, что можно исхитриться и вот так, открыв файл для записи один раз впихнуть в него три массива, но так просто его частями не прочитаешь.
Я же говорю, если в один файл записать только 1 структуру и 3 массива, то потом их оттуда можно прочитать (с условием, что для чтения массивов нужно указать размер каждого из них). Но вот фокус с записью и последующим чтением нескольких таких последовательностей у меня не прокатил. Возможно, нужно двигать указатель, но это уже напряжно...
Я же говорю, если в один файл записать только 1 структуру и 3 массива, то потом их оттуда можно прочитать (с условием, что для чтения массивов нужно указать размер каждого из них). Но вот фокус с записью и последующим чтением нескольких таких последовательностей у меня не прокатил. Возможно, нужно двигать указатель, но это уже напряжно...
Как это напряжно? Лошадиных сил не хватает? А как вы можете быть уверены что запись прошла успешно и как вы это предполагаете, если прочесть не получилось? Насколько мне известно .bin файл глазками не посмотришь.
Артём, можно пример? С учётом, что размер массивов динамический.
Нет, пока примеров не будет - сам ещё не делал, и когда буду делать, буду описывать в статьях. И будет ещё не скоро. Факт в том, что записывать в файл при помощи FileWriteStruct() можно только POD-структуры. Т.е. - простые структуры, не содержащие строки, динамические массивы, виртуальные функции, а также указатели на объекты и функции.
А это значит, что нужно придумывать и тестировать. Но направление я написал. Над реализацией нужно думать.
Нет, пока примеров не будет - сам ещё не делал, и когда буду делать, буду описывать в статьях. И будет ещё не скоро. Факт в том, что записывать в файл при помощи FileWriteStruct() можно только POD-структуры. Т.е. - простые структуры, не содержащие строки, динамические массивы, виртуальные функции, а также указатели на объекты и функции.
А это значит, что нужно придумывать и тестировать. Но направление я написал. Над реализацией нужно думать.
Выходит что как ни крути, а задача не решаема. Ведь у Сергея в примере внутри три динамических массива. Хоть как выстраивай структуру в структуре, она так и останется с динамическим массивом.
А вот если создать массив структур, то проблема решается записью массива. FileWriteArray(). Это уже проверено и в документации чётко сказано о записи массива структур.
Но читается массив от начала до конца. Как вы его разбиваете на 3 части? Как вы записали структуру и в тот-же файл умудрились записать массив? Я самоучка, много чего не знаю, но то, что это разные форматы данных, как-то подозреваю.
Я допускаю, что можно исхитриться и вот так, открыв файл для записи один раз впихнуть в него три массива, но так просто его частями не прочитаешь.
в бинарный файл можете писать любые структуры, массивы, даже отдельные переменные - и все в один файл
НО при чтении Вы должны именно в этом же порядке и читать данные
все будет работать
не смотрел дамп файла при записи с помощью FileWriteArray() , скорее всего размер массива в первых байтах будет записан - но проще просто тестовый скрипт составить, там с десяток строк кода ;)
Выходит что как ни крути, а задача не решаема. Ведь у Сергея в примере внутри три динамических массива. Хоть как выстраивай структуру в структуре, она так и останется с динамическим массивом.
А вот если создать массив структур, то проблема решается записью массива. FileWriteArray(). Это уже проверено и в документации чётко сказано о записи массива структур.
Массив-то структур сохраняется, но.., если бы там были строки, то их можно в массив uchar запаковать внутри структуры, что с успехом делается. А вот массив double в массив uchar никак не влезет. Тем более, что он динамический. А сохранять отдельно три массива в файлы, и потом их пихать в распакованную из файла структуру... Не пробовал. Не думал, не знаю.
в бинарный файл можете писать любые структуры, массивы, даже отдельные переменные - и все в один файл
НО при чтении Вы должны именно в этом же порядке и читать данные
все будет работать
не смотрел дамп файла при записи с помощью FileWriteArray() , скорее всего размер массива в первых байтах будет записан - но проще просто тестовый скрипт составить, там с десяток строк кода ;)
Я не знаю с какого начала вы читали об этой проблеме, на всякий случай напомню: надо записать в файл структуру содержащую три динамических массива. Потом был вопрос о том, что не правильно читается файл.
Форум по трейдингу, автоматическим торговым системам и тестированию торговых стратегий
Вопросы от начинающих MQL5 MT5 MetaTrader 5
Сергей Таболин, 2020.03.24 18:02
Спрашиваю ))))
Попробовал сделать "по своему".
Первая структура и 3 массива считываются нормально (при условии, что массивы приёмники не динамические, иначе в первый массив считываются все данные, записанные после структуры).
Однако, если записей больше, то
выдаёт чёрте чё...
Вот я и рассуждаю: как можно из одного файла, неизвестно как записанного прочесть структуру и три массива.
Потому я и сказал, что я самоучка много чего не знаю, но так просто его частями не прочитаешь.
И прекрасно понимаю, что есть варианты в .bin файл дописать всё что угодно, но чтобы прочесть надо знать что в каком порядке записано. И возможно что не средствами mql.
А вот этого я не понимаю вообще...
Чё тут не то?
Вот я и рассуждаю: как можно из одного файла, неизвестно как записанного прочесть структуру и три массива.
вот и я пишу, что это проще проверить, в течении 10 минут.... проверил, не пишет FileWriteArray() размер массива в заголовок или первый байт, значит пишем самостоятельно эти значения
2020.03.25 10:18:36.058 tst (EURUSD,H1) 1. d_arr
2020.03.25 10:18:36.058 tst (EURUSD,H1) 3.14159 3.14159 3.14159 3.14159 3.14159
2020.03.25 10:18:36.058 tst (EURUSD,H1) 2. i_arr
2020.03.25 10:18:36.058 tst (EURUSD,H1) 1234567890 1234567890 1234567890
2020.03.25 10:18:36.058 tst (EURUSD,H1) 2. c_arr
2020.03.25 10:18:36.058 tst (EURUSD,H1) 127 127 127 127 127 127 127
2020.03.25 10:18:36.058 tst (EURUSD,H1) mstruct.a = 666 , mstruct.b = 123.123000
т.е. если размеры массива динамические - значит самостоятельно пишем размеры массива при записи и при чтении читаем значение размера массива из файла и устанавливаем размеры массивов структуры
в моем примере 2 структуры - одну инициализировали и записали, вторую прочитали, инициализация из данных файла