Скачать MetaTrader 5

Подскажите как решить данную проблемку...

Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий
I_Alex_I
177
I_Alex_I  

Мне нужно сохранить строку в структуру, а структуру затем сохранить в файл, но структуры со строками не сохраняются в файл, как мне сделать так чтобы строка была ограниченная либо сделать массив из символов?!

Тоесть на делфи это было бы примерно так:

buf: array[1..150] of char;

либо еще проще:

str1: string[150]; 

Возможно ли как-то так описать строку в структуре на mql5, чтобы затем мне можно было сохранить структуру в файл? 

Заранее всем спасибо...

Rashid Umarov
Админ
12608
Rashid Umarov  

Добавьте в струтуру функцию, которая возвращает строковое представление структуры. Например, toString():

   //+------------------------------------------------------------------+
   //|  строковое представление                                         |
   //+------------------------------------------------------------------+
   string toString()
     {
      string result;
      result=StringFormat("%s ; %.2f ; %.2f ; %.2f ; %d",symbol,deal_return,MAE,MFE,deal_ticket);
      return(result);
     };
  };

 А потом вызывайте эту функцию для вывода в файл, например:

   //+------------------------------------------------------------------+
   //|                                                                  |
   //+------------------------------------------------------------------+
   void PrintMAEStats()
     {
      int size=ArraySize(returns);
      Print("Всего возвратов с данными MAE-MFE: ",size);
      for(int i=0;i<size;i++)
        {
         Print(returns[i].toString());
        }
      Print("");
     }


I_Alex_I
177
I_Alex_I  

Простите меня наверное за мою тупость... чесн слово не очень разбираюсь в программировании.., и пишу программы на уровне моего понимания mql5, но вот точный пример структуры которую мне нужно вывести в бинарный файл:

struct simpl1
  {
   string            Name;                            // Вот это мне нужно както преобразовать в массив или чтото вроде этого
   short             per1[MAX1][MAX2];
   char              per2[MAX1][MAX2];
   char              per3[MAX1];      
   int               per4[MAX1]; 
   int               per5[MAX1];
   datetime          per6[MAX1];     
   short             per7[MAX1]; 
   short             per8[MAX1]; 
   short             per9[MAX1];  
   double            per10[MAX1];  
   int               count;           
  };
Структуру я хочу сохранять полностью, в этом не должно возникнуть проблемм, так как динамических массивов не использую, а вот строка бы мне потребовалась!

Можно конечно уйти от применения  строки в структуре путем вывода в небинарный файл с темже названием....

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

Документация по MQL5: Основы языка / Типы данных / Объект динамического массива
Документация по MQL5: Основы языка / Типы данных / Объект динамического массива
  • www.mql5.com
Основы языка / Типы данных / Объект динамического массива - Документация по MQL5
Rashid Umarov
Админ
12608
Rashid Umarov  
Если Вы хотите писать структуру именно функцией FileWriteStruct, то я сходу ничего предложить не могу.


PS. Вы можете попробовать создать для каждой структуры свою собственную функцию записи в бинарный файл с помощью функций:

Но как это сделать, я ответить не готов. Не пробовал.

I_Alex_I
177
I_Alex_I  

Да именно этой функцией удобнее всего будет писать структуру... и считывать ей обратной...

Возможно можете предложить какое-то другое решение данной проблеммы...

я вот думаю может всентаки использовать несколько файлов с одним названием... но разными расширениями, тоесть например бинарный файл с данными, аналогичный файл с пояснением... и допстим 3й файл с параметрами для обработки...

Вообщем что-то вроде этого! 

Плохо что нельзя ограничить строку как например в делфи:

и в дальнейшим это уже можно было бы использовать в структуре и писать в файл... в делфи я все это успешно реализовывал..

str1: string[100]; 

I_Alex_I
177
I_Alex_I  

кажется придумал...

если забить преобразование каждого символа в код с помощью функции, то можно будет иуспользовать массив:

uchar str[10][200];

что будет равно  10 строкам по 200 символов.

:) вот решение само собой и нашлось, благодарю за предложенные варианты!!!

Slava
Модератор
6972
Slava  

Есть функции преобразования строк в массивы https://www.mql5.com/ru/docs/convert/stringtochararray, https://www.mql5.com/ru/docs/convert/stringtoshortarray и обратные функции https://www.mql5.com/ru/docs/convert/chararraytostring, https://www.mql5.com/ru/docs/convert/shortarraytostring 

Заведите в структуре массив с заранее заданным размером. И записывайте в этот массив строку. Это и будет строка с заранее определённым размером. 

Документация по MQL5: Преобразование данных / StringToCharArray
Документация по MQL5: Преобразование данных / StringToCharArray
  • www.mql5.com
Преобразование данных / StringToCharArray - Документация по MQL5
I_Alex_I
177
I_Alex_I  
stringo:

Есть функции преобразования строк в массивы https://www.mql5.com/ru/docs/convert/stringtochararray, https://www.mql5.com/ru/docs/convert/stringtoshortarray и обратные функции https://www.mql5.com/ru/docs/convert/chararraytostring, https://www.mql5.com/ru/docs/convert/shortarraytostring 

Заведите в структуре массив с заранее заданным размером. И записывайте в этот массив строку. Это и будет строка с заранее определённым размером. 

Благодарю... Просто документация мною изучена очень плохо! Спасибо, то что мне и было нужно!
Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий