Суммирование (соединение) строк
Суммирование строк является, пожалуй, самой частой операцией со строками. В MQL5 её можно выполнить с помощью операторов '+' или '+='. Первый состыковывает две строки (операнды слева и справа от '+') и создает временную объединенную строку, которую можно присвоить целевой переменной или передать в другую часть выражения (например, в вызов функции). Второй присоединяет строку справа от оператора '+=' к строке (переменной), стоящей слева от этого оператора.
В дополнение к этому MQL5 API предоставляет пару функций для составления строк из других строк или элементов других типов.
Примеры использования функций приведены в скрипте StringAdd.mq5, который рассматривается после их описания.
bool StringAdd(string &variable, const string addition)
Функция присоединяет к концу строковой переменной variable указанную строку addition. По возможности система использует имеющийся буфер строки variable (если его размера хватает для объединенного результата) без перевыделения памяти и копирования строк.
Функция эквивалента оператору variable += addition. Временные затраты и расход памяти примерно одинаковы.
Функция возвращает true в случае успеха, и false в случае ошибки.
int StringConcatenate(string &varibale, void argument1, void argument2 [, void argumentI...])
Функция преобразует в строковое представление два или более аргументов встроенных типов и объединяет их в строке variable. Аргументы для слияния передаются, начиная со второго параметра функции. В качестве аргументов не поддерживаются массивы, структуры, объекты, указатели.
Количество аргументов должно быть от 2 до 63.
Аргументы-строки добавляются в результирующую переменную как есть.
Аргументы типа double преобразуются с максимальной точностью (до 16 значащих знаков), при этом может быть выбрана научная нотация с показателем степени, если она получается более компактной. Аргументы типа float отображаются с 5 знаками.
Значения типа datetime конвертируются в строку со всеми полями даты и времени ("YYYY.MM.DD hh:mm:ss").
Перечисления, однобайтовые и двухбайтовые символы выводятся как целые числа.
Значения типа color отображаются в виде тройки компонент "R,G,B" или названия цвета (если он имеется в списке стандартных web-цветов).
При конвертации типа bool используются строки "true" или "false".
Функция StringConcatenate возвращает длину получившейся строки.
StringConcatenate предназначена для построения строки из других источников (переменных, выражений), отличных от приемной переменной. Использовать StringConcatenate для пристыковки новых порций данных к одной и той же строке путем вызова StringConcatenate(variable, variable, ...) не рекомендуется. Такой вызов функции не оптимизирован и выполняется крайне медленно по сравнению с опертором '+' и StringAdd.
Функции StringAdd и StringConcatenate тестируются в скрипте StringAdd.mq5, который использует макрос PRTE и вспомогательную функцию StrOut из предыдущего раздела.
void OnStart()
|
В результате его выполнения в лог выводятся следующие строки:
'message' [7] 0
|
В скрипте также подключен заголовочный файл StringBenchmark.mqh с классом Benchmark. Он представляет основу для классов-наследников, реализованных в скрипте для измерения быстродействия различных способов сложения строк. В частности, они позволяют убедиться, что сложение строк при помощи оператора '+' и функции StringAdd сопоставимы. Этот материал оставлен для самостоятельного изучения.
Дополнительно с книгой поставляется скрипт StringReserve.mq5: он проводит наглядное сравнение скорости сложения строк в зависимости от использования или неиспользования буфера (StringReserve).