Функция фильтр со временем

 

Добрый всем день. Подскажите кто чем сможет.

Вводится текст формата "11:30,12:45". Надо разделить по парам час 11 минуты 30 - час 12 минуты 45. Пробелов нет, разделители точка с запятой и запятая. Сама функция возвращает да или нет, лежит ли текущее время в этом промежутке.

 
miron_like:

Добрый всем день. Подскажите кто чем сможет.

Вводится текст формата "11:30,12:45". Надо разделить по парам час 11 минуты 30 - час 12 минуты 45. Пробелов нет, разделители точка с запятой и запятая. Сама функция возвращает да или нет, лежит ли текущее время в этом промежутке.


В чем сложность? 

StringSplit

Получает из указанной строки подстроки по заданному разделителю и возвращает количество полученных подстрок.

int  StringSplit( 
   const string   string_value,       // строка для поиска подстрок 
   const ushort   separator,          // разделитель, по которому в строке будут искаться подстроки 
   string         & result[]          // массив, переданный по ссылке, для получения найденных подстрок 
   );

1.)  Посредством StringSplit разделите на 2 строки. Эти строки преобразуйте в 2 переменные datatime.

2.) Сравнивайте Текущее время с переменными полученными из строк.

 
а для чего разделять чч:мм ? 
можно сразу переводить в нужное время и сравнивать с текущим
 
Taras Slobodyanik:
а для чего разделять чч:мм ? 
можно сразу переводить в нужное время и сравнивать с текущим

Хорошо. Есть такой момент, у меня 2 разделителя: это ; и , как разделять при помощи двух? Допусти запись в таком виде 21:00;22:05 или в таком 21:00,22:05 

 
miron_like:

Хорошо. Есть такой момент, у меня 2 разделителя: это ; и , как разделять при помощи двух? Допусти запись в таком виде 21:00;22:05 или в таком 21:00,22:05 


  string TimeBegin="00:00"; 
  string TimeEnd="00:00";

  dtBegin=StrToTime(TimeToStr(TimeCurrent(), TIME_DATE)+" "+TimeBegin);
  dtEnd  =StrToTime(TimeToStr(TimeCurrent(), TIME_DATE)+" "+TimeEnd);

там прбел

ну, как то так

оп, это для 4 наверное и для 5ки как то так

 
miron_like:

Хорошо. Есть такой момент, у меня 2 разделителя: это ; и , как разделять при помощи двух? Допусти запись в таком виде 21:00;22:05 или в таком 21:00,22:05 

Ключевое слово ИЛИ. Если в одной строке не присутствуют разные разделители, то ничего сложного нет.

Если функция StringGetCharacter

ushort  StringGetCharacter(
   string  string_value,     // строка
   int     pos               // позиция символа в строке
   );

вернула -1, то надо применить другой разделитель и продолжить. Это один вариант.

Второй вариант это найти второй разделитель функцией StringFind, заменить его функцией StringReplace 

int  StringReplace(
   string&         str,              // строка, в которой будет осуществляться замена
   const string    find,             // искомая подстрока
   const string    replacement       // подстрока, которая будет вставлена в найденные места
   );

и продолжить извлечение подстрок.

Документация по MQL5: Строковые функции / StringReplace
Документация по MQL5: Строковые функции / StringReplace
  • www.mql5.com
Строковые функции / StringReplace - справочник по языку алгоритмического/автоматического трейдинга для MetaTrader 5