Вопросы от начинающих MQL5 MT5 MetaTrader 5 - страница 1200
Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь
Выходит что как ни крути, а задача не решаема. Ведь у Сергея в примере внутри три динамических массива. Хоть как выстраивай структуру в структуре, она так и останется с динамическим массивом.
А вот если создать массив структур, то проблема решается записью массива. 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 структуры - одну инициализировали и записали, вторую прочитали, инициализация из данных файлавот и я пишу, что это проще проверить, в течении 10 минут.... проверил, не пишет FileWriteArray() размер массива в заголовок или первый байт, значит пишем самостоятельно эти значения
Игорь, я не говорил что совсем невозможно. Ну чуток повнимательней прочтите мои слова.
Alexey Viktorov:
...
как можно из одного файла, неизвестно как записанного прочесть структуру и три массива.
...
Причём в том примере есть открытие файла, чтение структуры, чтение трёх массивов и нет закрытия файла. Тут и задумаешься, а есть-ли закрытие файла после записи?
А в вашем примере чтение массивов и элементов структуры, а не FileReadStruct().
Спасибо за пример. При необходимости вспомню и воспользуюсь.
Игорь, я не говорил что совсем невозможно. Ну чуток повнимательней прочтите мои слова.
Причём в том примере есть открытие файла, чтение структуры, чтение трёх массивов и нет закрытия файла. Тут и задумаешься, а есть-ли закрытие файла после записи?
А в вашем примере чтение массивов и элементов структуры, а не FileReadStruct().
Спасибо за пример. При необходимости вспомню и воспользуюсь.
я не знаю как еще обьяснить ))))
ну Вы верите в какую то магию - мол сторонние программы могут узнать формат записанных данных в бинарный файл - никто не может прочитать данные из бинарного файла не зная структуру данных!
бинарный файл это большой массив байтов доступ к которому происходит последовательно - и все, что Вы записали? что прочитали? - знаете только Вы, если не знаете, то и будете читать не пойми чего
)))
ЗЫ: понятное дело, что хочется массив писать(читать) одной командой ArrayWrite и структуру так же - да это возможно, но если использовать фиксированный размер данных и писать каждую структуру/массив в отдельный файл
Igor Makanu:
ну Вы верите в какую то магию - мол сторонние программы могут узнать формат записанных данных в бинарный файл - никто не может прочитать данные из бинарного файла не зная структуру данных!
Вы меня не правильно поняли. Я говорил точно то-же только другими словами. Это был не вопрос как сделать, а ... даже без вопросительного знака...
Подскажите, пожалуйста, как создать пользовательский символ в мт5, если я хочу залить туда график акций с фонды? Брокер Открытие, если что)
Я пробовал сделать следующее:
1. Скачиваю историю котировок в csv с финама
2. Конвертирую csv в json
{ "root": { "row": [ { "TICKER": "FXRU", "PER": "1", "DATE": "20190502", "TIME": "100100", "OPEN": "748.7000000", "HIGH": "749.7000000", "LOW": "747.7000000", "CLOSE": "749.7000000", "VOL": "115" }, ] } }3. Не помогает.
вот и я пишу, что это проще проверить, в течении 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 структуры - одну инициализировали и записали, вторую прочитали, инициализация из данных файлаСпасибо, очень впечатляюще.
А если в файл записать 2 структуры, то, очевидно, таким же образом можно их и считать.
ПС Простая структура (в любом количестве) записывается и считывается штатной функцией без проблем.