Маленький IT блог с характером 1С.
Страницы
Поиск по блогу
вторник, 5 июля 2016 г.
Супер-пупер быстрая конкатенация(сложение) строк
И снова сложно о простом. Что бы присоединить одну строку к другой, в платформу 1С заложена операция конкатенации («+»).
При выполнении конкатенации:
- длина результирующей строки равна сумме длин соединяемых строк;
- в случае несовпадения типа данных второго или последующих операндов со строковым типом, их значение преобразуется к строковому типу в соответствии с правилами преобразования типов.
Пример: ФИО = Фамилия + » » + Имя + » » + Отчество;
Выполним операцию конкатенации 100000 раз по алгоритму:
ИтоговаяСтрока = «»;
Для Счетчик = 1 По Объект.КоличествоИтераций Цикл
ИтоговаяСтрока = ИтоговаяСтрока + Объект.РеквизитСтрока;
КонецЦикла;
Переменные содержат следующие значения:
- Объект.КоличествоИтераций = 100000;
- Объект.РеквизитСтрока = «ПроизвольнаяСтрока».
Произведем замер длительности выполнения алгоритма (см. рисунок 1).
![]() |
Рисунок 1. Замер скорости операции конкатенации |
Время выполнения алгоритма составило почти 52 секунды, что не очень быстро. Существует еще один способ конкатенации строк, который работает заметно быстрее, я бы сказал, значительно быстрее.
Язык программирования 1С имеет в своем арсенале объект ЗаписьXML, который предназначен для создания XML-файлов. Данный объект умеет писать данные не только в файл, но и в строку, что позволяет его использовать для конкатенации строк. Роль операции конкатенации выполняет метод ЗаписатьБезОбработки().
Выполним операцию конкатенации 100000 раз по алгоритму:
ЗаписьXML = Новый ЗаписьXML;
ЗаписьXML.УстановитьСтроку();
Для Счетчик = 1 По Объект.КоличествоИтераций Цикл
ЗаписьXML.ЗаписатьБезОбработки(Объект.РеквизитСтрока);
КонецЦикла;
ИтоговаяСтрока = ЗаписьXML.Закрыть();
Войдите как ученик, чтобы получить доступ к материалам школы
Язык запросов 1С 8.3 для начинающих программистов: функции для работы со строками
Автор уроков и преподаватель школы: Владимир Милькин
Функции для работы со строками в запросе
Прямо скажем механизмов для работы со строками в запросах 1С мало. Во-первых, строки можно складывать . Во-вторых, от строки можно взять подстроку . Во-третьих, строки можно сравнивать , в том числе по шаблону . Вот пожалуй и всё, что можно делать со строками. Вы читаете ознакомительную версию урока, полноценные уроки находятся здесь.
Когда мы говорим строка в запросе, то имеется в виду либо строковая константа:
либо реквизит таблицы, у которого тип СТРОКА:
Сложение строк
Для сложения используется операция +
Функция ПОДСТРОКА
Данная функция предназначена для выделения подстроки из строки.
В качестве параметров принимает:
- строку , из которой необходимо выделить подстроку;
- позицию символа, с которого начинается выделяемая из строки подстрока;
- длину выделяемой подстроки.
Функция ПОДОБНО
Если нужно убедиться, что строковый реквизит соответствует определённым критериям мы его сравниваем. Например, так:
А что, если нужно более хитрое сравнение? Не просто на равенство или неравенство, а на подобие определенному шаблону? Вот как раз для этого и создана функция ПОДОБНО.
Если быть совсем точным, то это даже не функция, а оператор, который позволяет сравнить значение выражения, указанного слева от него, со строкой шаблона, указанной справа.
Значение выражения должно иметь тип строка. Если значение выражения удовлетворяет шаблону – результатом оператора будет ИСТИНА, иначе – ЛОЖЬ.
Давайте уже рассмотрим пример, чтобы ситуация прояснилась:
Результатом выполнения данного запроса будет вся еда, наименование которой начинается на букву «К»:
Думаю вы догадались, что здесь вся «хитрость» сосредоточена в строке шаблона «[К]%». Буква «К» в квадратных скобках в данном случае означает, что первым символом наименования должна быть буква «К». Знак «%», идущий следом означает, что после буквы «К» могут идти (или не идти) любые символы в любом количестве. Вы читаете ознакомительную версию урока, полноценные уроки находятся здесь.
Конечно, я всё это не из головы придумал. При формировании строки шаблона есть определенные правила, которые нужно соблюдать:
- % означает любое количество произвольных символов
- _ означает один произвольный символ
- [] означает любой одиночный символ, перечисленный внутри скобок
- [^] означает любой одиночный символ, кроме тех, что перечислены внутри скобок после ^
Примеры шаблонов с пояснениями:
«%» абсолютно любая строка (в том числе пустая):
«___» строка из трёх символов (любых):
«[ЧЛ]%[ЫН]» строка, начинающаяся с буквы Ч или Л и оканчивающаяся на Ы или Н:
«[^К]%» строка, не содержащая в начале букву К:
«[А-К]%» строка, начинающаяся с буквы из диапазона с А по К:
Обратите внимание на приём, использованный в шаблоне «[А-К]%». Вместо того, чтобы перечислять все буквы от А до К, например так «[АБВГДЕЁЖЗИЙК]%» мы указали диапазон значений через дефис. Квадратные скобки это позволяют делать.
Рецепты решения проблем с компьютерами и программами
это нужно, например, чтобы в условии запроса сначала сложить строки, а потом сделать их результат проверяемым параметром. Или просто с помощью этого можно получить строку образованную сложением и преобразованием в строку различных значений, например, строк.