Привязка данных к ордеру - страница 3

 
_SERG_:

Переразмерить массив для ордеров не есть проблема.

В структуре используется массив, и структура работает, с учётом того, то используются разнотипные данные.

Проблема возникает при сохранении структуры, при использовании FileWriteStruct(), наличие строковых данных вызывает ошибку.

Хотя по логике FileWriteStruct() этого не должно быть, всё равно пишется бинарный файл. (Про кодовые таблицы пока пропустим.)

Нет проблем и при хранении в отдельных массивах, но напряжно передавать в процедуры все 17 а то и чуть больше параметров, а так структуру кинул и всё, но сохранить её в файлик не получается.

В определении сруктуры, разработчиками написано:"Структура является набором элементов произвольного типа ( кроме типа void). Таким образом, структура объдиняет логически связанные данные разных типов.", в определении FileWriteStruct(). написано:"Записывает в bin-файл содержимое структуры, переданной в качестве параметра, с текущего положения файлового указателя.", но в описании параметра функции вдруг возникает не логичная оговорка:"... Структура не должна содержать строки, динамические массивы и виртуальные функции."


Без кода или хотя бы алгоритма трудно сказать что то конкретное, но так на вскидку могу предложить при сохранении и загрузке результатов разделение "FileWriteStruct" на последовательность "FileWriteArray" и "FileWriteString" (оба работают с BIN файлами),

т.е. не строковые массивы структуры пишем через "FileWriteArray", а строковые в цикле через "FileWriteString" (предварительно сохранив количество строк (и длину строки перед сохранением каждой строки для "FileReadString" из bin файла)).

Не самый красивый, но вполне рабочий, обход проблемы и если сохранение происходит через значительные промежутки времени, то даже на тесте потеря в скорости будет не большая. А если параметры объявить глобально, то с передачей меньше проблем.

 
Alex.Ru:


Без кода или хотя бы алгоритма трудно сказать что то конкретное, но так на вскидку могу предложить при сохранении и загрузке результатов разделение "FileWriteStruct" на последовательность "FileWriteArray" и "FileWriteString" (оба работают с BIN файлами),

т.е. не строковые массивы структуры пишем через "FileWriteArray", а строковые в цикле через "FileWriteString" (предварительно сохранив количество строк (и длину строки перед сохранением каждой строки для "FileReadString" из bin файла)).

Не самый красивый, но вполне рабочий, обход проблемы и если сохранение происходит через значительные промежутки времени, то даже на тесте потеря в скорости будет не большая. А если параметры объявить глобально, то с передачей меньше проблем.

https://forum.mql4.com/ru/62930/page2#960502 тут код и алгоритм.

Несколько способов обращения, и печать данных структуры в журнал, для проверки их правильности и наличия вообще.

Надо подправить размер массива, цифирьку записать, а остальное всё есть.

Приатачены исходняк и журнал.

А в бинарнике, что символов с кодами от 0 до 256 быть не может?

ASCII или другие кодировки?

Поэтому и вопрос:" В чём проблема записи в бинарник строковых данных?" например из структуры?

Эти, "не самые красивые" решения, живы лишь потому, что не доделаны правильные и красивые.

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