Функция explode на mql4

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

В распространенном языке программирования PHP есть одна полезная функция

explode

(PHP 3, PHP 4, PHP 5)

explode — Разбивает строку на подстроки

Описание

array explode ( string separator, string string [, int limit] )

Возвращает массив строк, полученных разбиением строки string с использованием separator в качестве разделителя. Если передан аргумент limit передан, массив будет содержать максимум limit элементов, при этом последний элемент будет содержать остаток строки string.

Если separator — пустая строка («»), explode() возвращает FALSE. Если separator не содержится в string, то explode()возвращает массив, содержащий один элемент string.

По историческим причинам, функции implode() можно передавать аргументы в любом порядке, но для explode()это недопустимо. separator всегда должен содержать разделитель, а string — исходную строку.

Я реализовал подобную функцию explode на языке программирования mql4, параметры немного изменены в связи с особенностями языка, поэтому возврат данных в массив осуществляется через ссылку на параметр.

/*
функция разбивает сроку с разделителем и помещает в буфер, аналог Explode в php
Пример использования:
string param[];
string n=GlobalVariableName(i); //test.buf 
Explode(".",n,param);
результат: param[0]="test"; param[1]="buf";
 
параметры:
string sDelimiter - разделитель,например "."
string sExplode - строка текста
string &sReturn[] - буфер для хранения результат, инициализация и размер выставляются внутри функции
*/
void string.explode(string sDelimiter, string sText, string &sReturn[]){
 
   int ilBegin = -1,ilEnd = 0;
   int ilElement=0;
   while (ilEnd != -1){
      ilEnd = StringFind(sText, sDelimiter, ilBegin+1);
      ArrayResize(sReturn,ilElement+1);
      sReturn[ilElement] = "";     
      if (ilEnd == -1){
         if (ilBegin+1 != StringLen(sText)){
            sReturn[ilElement] = StringSubstr(sText, ilBegin+1, StringLen(sText));
         }
      } else { 
         if (ilBegin+1 != ilEnd){
            sReturn[ilElement] = StringSubstr(sText, ilBegin+1, ilEnd-ilBegin-1);
         }
      }      
      ilBegin = StringFind(sText, sDelimiter,ilEnd);  
      ilElement++;    
   }
}

Как использовать?
Например у нас есть строка с разделителем:

string text="param1;param2;param3;param4";

И нам требуется получить список значений из данной строки, тогда мы используем нашу функцию:

string params[];
string.explode(";",text,params);

Обратите внимание, что нам нет необходимости задавать размерность массива, функция самостоятельно увеличивает размер массива при необходимости.
В массиве params[] после вызова функции будут значения по порядку и доступ к ним можно получить по номеру строки массива:

string p1=params[0];
/*
params[0] -> "param1"
params[1] -> "param2"
params[2] -> "param3"
params[3] -> "param4"
*/

Отправить ответ

Оставьте первый комментарий!

Notify of
wpDiscuz