Можно ли нижний код заменить функцией в одну строку. Сходу не пойму как обратно из текстового получить исходное с переменными.
Как сделать из строки с аргументами строковый аргумент функции более менее понятно, а вот как обратно нет.
Поиск не помог. В общем вопрос, это возможно в MQL или нет.
и никто ничего не понял.
что надо-то в итоге ?
если читать данные из файла, то штатных способов 3:
- читать текст и всё самому парсить
- читать CSV и разбирать какое поле куда
- открыть SQLite и забрать оттуда. Но если кто-то любезно туда записал
и никто ничего не понял.
что надо-то в итоге ?
если читать данные из файла, то штатных способов 3:
- читать текст и всё самому парсить
- читать CSV и разбирать какое поле куда
- открыть SQLite и забрать оттуда. Но если кто-то любезно туда записал
Нужна только запись в CSV файл.
Нижний код заменить на
FuncPrintFile(Handle2,var1," [i]= ",i," NbXt[i]= ",NbXt[i]," Xt[i]= ",Xt[i]," xnXt[i]= ", xnXt[i], " RXt[i]= ",RXt[i],"mx= ",mx," mn= ",mn," m= ",m," VTrend[i] ",VTrend[i])
И что бы в функции проверка результата записи производилась. При этом текст и аргументы могут быть произвольными. Или хотя бы без хендла, одни аргументы с текстом.
При этом текст и аргументы могут быть произвольными.
в C++ / MQL нельзя создать функцию с произвольным количеством аргументов
думаю, Вы просто хотите передавать строку ( string ), тогда Вам просто нужно разобраться как преобразовывать double / int в строку
Или хотя бы без хендла, одни аргументы с текстом.
Вы можете при вызове функции использовать проверку переменной хранящей хендл с модификатором static - если значение меньше нуля, то открыть файл.... в общем можно рассуждать об алгоритме, но проще научиться пользоваться готовыми классами из СБ - CFile или CFileTxt
https://www.mql5.com/ru/docs/standardlibrary/fileoperations
или были статьи по работе с файлами - поиском поищите
в C++ / MQL нельзя создать функцию с произвольным количеством аргументов
думаю, Вы просто хотите передавать строку ( string ), тогда Вам просто нужно разобраться как преобразовывать double / int в строку
Вы можете при вызове функции использовать проверку переменной хранящей хендл с модификатором static - если значение меньше нуля, то открыть файл.... в общем можно рассуждать об алгоритме, но проще научиться пользоваться готовыми классами из СБ - CFile или CFileTxt
https://www.mql5.com/ru/docs/standardlibrary/fileoperations
или были статьи по работе с файлами - поиском поищите
всегда можно извратиться и нафигачить код который съест подобное :
myCSV << double_value_1 << int_value_2 << ( myCSV.Column(7)="the_string") << myCSV.EndOfRecord;
в C++ / MQL нельзя создать функцию с произвольным количеством аргументов
думаю, Вы просто хотите передавать строку ( string ), тогда Вам просто нужно разобраться как преобразовывать double / int в строку
Вы можете при вызове функции использовать проверку переменной хранящей хендл с модификатором static - если значение меньше нуля, то открыть файл.... в общем можно рассуждать об алгоритме, но проще научиться пользоваться готовыми классами из СБ - CFile или CFileTxt
https://www.mql5.com/ru/docs/standardlibrary/fileoperations
или были статьи по работе с файлами - поиском поищите
Спасибо, классы посмотрю и впредь постараюсь не спешить с неподготовленными вопросами.
всегда можно извратиться и нафигачить код который съест подобное :
myCSV << double_value_1 << int_value_2 << ( myCSV.Column(7)="the_string") << myCSV.EndOfRecord;
Спасибо, но не понял, как применить побитовые операции.
Вопрос возник из свойств функций Alert, Print, FileWrite. В них может быть до 63 параметров через запятую. Возможно ли пользовательская функция с такими свойствами.
#property strict int Handle; // Файловый описатель uint Qnt_Symb; // Количество записанных симв. string File_Name="NameFile.csv"; // Имя файла string TextFile; // строка записи в файл// int a = 5; double b = 6.0; int OnInit() { FileOpenF(); // Открываем файл return(INIT_SUCCEEDED); } void OnDeinit(const int reason) { FileClose( Handle ); // Закрываем файл } void OnTick() { // Реализация записи сейчас Qnt_Symb=FileWrite(Handle," a= ",a," b= ",b ); //Запись в файл if(Qnt_Symb<=0) // Если не получилось { Alert("Ошибка записи в файл ",GetLastError());// Сообщение }; // Как хотелось бы TextFile=" ' a= ',a,' b= ',b "; // Но это не вариант, запишет как есть. Возможно дефайны помогут? FileWriteF(TextFile); } //+------------------------------------------------------------------+ int FileOpenF() { Handle=FileOpen(File_Name,FILE_CSV|FILE_WRITE,";");//Открытие файла if(Handle==-1) // Неудача при открытии файла { Alert("Ошибка при открытии файла. ",// Сообщение об ошибке "Возможно, файл занят другим приложением"); } return(Handle); } uint FileWriteF(string TextFiles) { Qnt_Symb=FileWrite(Handle,TextFiles ); //Запись в файл if(Qnt_Symb<=0) // Если не получилось { Alert("Ошибка записи в файл ",GetLastError());// Сообщение }; return Qnt_Symb; }
Вопрос возник из свойств функций Alert, Print, FileWrite. В них может быть до 63 параметров через запятую. Возможно ли пользовательская функция с такими свойствами.
Конечно:
void MyFunc(string sValue1, string sValue2 = "", string sValue3 = "", string sValue4 = "", ..., string sValue63 = "") { }Вместо многоточия нужно вставить описание всех аргументов функции.

- www.mql5.com
Спасибо, классы посмотрю и впредь постараюсь не спешить с неподготовленными вопросами.
Спасибо, но не понял, как применить побитовые операции.
Вопрос возник из свойств функций Alert, Print, FileWrite. В них может быть до 63 параметров через запятую. Возможно ли пользовательская функция с такими свойствами.
class CSomeClass{ ... CSomeClass* const operator << (Type param) {DoSomething(param); return &this;} ... };
Спасибо))) , да мы же можем указать максимальное число параметров, а вводить не все параметры))) Да и в тип текст приводить необязательно,если известно расположение параметров по типам. Хотя числовые не введенные параметры будут нули печатать, тогда лучше привести все параметры к текстовому типу.
Не дорос еще видимо)))) Но все равно спасибо))
Ну количество запятых контролить пустых записей и кавычки ставить. А так, на ура работает) Эх, проще надо быть)))))
результат a= ;5; b= ;6
#property strict int Handle;// Файловый описатель uint Qnt_Symb; // Количество записанных симв. string File_Name="NameFile.csv"; // Имя файла int a = 5; double b = 6.0; int OnInit() { FileOpenF(); return(INIT_SUCCEEDED); } void OnDeinit(const int reason) { FileClose( Handle ); } void OnTick() { FileWriteF(" a= ",string (a)," b= ",string (b),"",""); } //+------------------------------------------------------------------+ int FileOpenF() { Handle=FileOpen(File_Name,FILE_CSV|FILE_WRITE,";");//Открытие файла if(Handle==-1) // Неудача при открытии файла { Alert("Ошибка при открытии файла. ",// Сообщение об ошибке "Возможно, файл занят другим приложением"); } return(Handle); } uint FileWriteF(string Val1,string Val2,string Val3,string Val4,string Val5,string Val6) { Qnt_Symb=FileWrite(Handle,Val1, Val2, Val3, Val4, Val5, Val6 ); //Запись в файл if(Qnt_Symb<=0) // Если не получилось { Alert("Ошибка записи в файл ",GetLastError());// Сообщение }; return Qnt_Symb; }
Да предопределенные переменные сразу не заметил, если они предопределены, то их количество можно не контролировать)))) А ведь все было написано)
uint FileWriteF(string Val1="",string Val2="",string Val3="",string Val4="",string Val5="",string Val6="") {....}

- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Вы принимаете политику сайта и условия использования
Можно ли нижний код заменить функцией в одну строку. Сходу не пойму как обратно из текстового получить исходное с переменными.
Как сделать из строки с аргументами строковый аргумент функции более менее понятно, а вот как обратно нет.
Поиск не помог. В общем вопрос, это возможно в MQL или нет.