Новые функции работы со строками. Новые функции работы со строками 1с найти позицию в строке

ЧАСТЬ 1. МЕТОДЫ (26).

1.1. Базовые методы (10). Независимые, построены на своих простых алгоритмах.

Стр_Дополнить() (дополнение справа-слева указанными символами).

Стр_Инверс () (инверсия - символы справа на лево).

Стр_Коды() (коды символов через ”,” и массив с кодами)

Стр_Символы() (строка из кодов через ”,” или из массива с кодами)

Стр_ЗаменитьСимволы() (замена одних символов на другие).

Стр_ИзМассива() (строка из массива фрагментов через разделитель)

Стр_НайтиВх() (поиск подстроки (в т.ч справа) с указ. номером вхождения).

Стр_НайтиГр() (Поиск группы символов, входящих в указанный набор символов)

Стр_НайтиЧисл() (Поиск числа, в т. ч справа с указанным номером вхождения)

Стр_Интерпретировать() (в массив, согласно установленному синтаксису)

1.2. Производные методы (12). Собственно, это применение четырёх обобщенных методов-алгоритмов (см. Часть 2)

Стр_Число() (с начала и с конца строки, не ”боиться” нецифровых символов.

Стр_Найти() (поиск подстроки (в т.ч без учета регистра и справа) с указ. номером вхождения).

Стр_Заменить() (искать (в т.ч. без учета регистра и справа), и заменять подстроки-разделители).

Стр_Кусок() (кусок строки между указанными вхождениями разделителя (слева или справа)).

Стр_ЗаменитьКусок() (замена в исходной строке ”куска ” на указанную строку).

Стр_ВМассив() (между указанными вхождениями разделителя (в т.ч. справа и без регистра).

Стр_ПеренестиПоСлогам() (разбить на подстроки ”Жёстко”, с дефисом).

Стр_ПеренестиПоСловам() (разбить на подстроки “Мягко”)

Стр_Разрезать() (“Разрезать” на подстроки указанных длин)

Стр_СокрЛ() (заменить лев. группу "сокращаемых" символов на "строку замены"

Стр_СокрП() (заменить прав. группу "сокращаемых" символов на "строку замены"

Стр_СокрС() (заменить посредине группы "сокращаемых" символов на "строку замены"

Стр_Расширить (расширение до указ. длины за счет увеличения колич. указанных символов)

1.3. Детализованные методы (3). "Препарирование" строки с переносом в таблицу с детальной информацией.

Стр_вТаблВх() (в таблицу согласно системе вложенных разделителей).

Стр_вТаблГр (в таблицу согласно многоуровневому фильтру).

Стр_вТаблЧисел (в таблицу с числами и фрагментами между ними).

ЧАСТЬ 2. ОБОБЩЕННЫЕ МЕТОДЫ-АЛГОРИМЫ (3).

Стр_Вхождение() (методы ”Найти” и ”Заменить”).

Стр_Фрагменты() (методы ”Кусок”,”ЗаменитьКусок,”ВМассив”,”вТаблВх”).

Стр_Сокр () (методы "СокрЛ","СокрП","СокрС","Расширить”.

Стр_Разбить() (методы “ПеренестиПоСлогам”,”ПеренестиПоСловам”,”Разрезать”).

ЧАСТЬ 3. УНИВЕРСАЛЬНАЯ ФУНКЦИЯ.

Это своего рода условный программный интерфейс, позволяющий

применять к строке сразу несколько методов. Реализован в виде

функции с семью параметрами ("Демо" построено на этой функции):

Стр_(Методы, Подметоды, Вход, Парам1, Парам2, Длины_Номера_Позиции, ДопВыход)

Параметры:

- ” Методы” - несколько ”совмещаемых” и (или) один “монопольный” метод

(односимвольные коды или названия, можно через ",")

- ”Подметоды” - несколько ”совмещаемых” и(или) “монопольный ” варианты

“монопольного” метода (односимвольные коды или названия);

- “Вход” - Строка, или Массив или Таблица значений;

- “Парам1” - строка поиска, замещения, разделители, фильтры;

- “Парам2” - замещающая строка или символы;

- “Длины_Номера_Позиции ” -Число, Числа через разделитель или массив с Числами;

- “ДопВыход ” - Число или Строка или Массив или Таблица значений;

Имена и(или) односимвольные Коды методов-подметодов, а также числа в

(Длины_Номера_Позиции) могут быть в любом регистре и отделены

любым из следующих разделителей: ”, :;”.

ЧАСТЬ 4. НЕКОТОРЫЕ ПРИМЕРЫ.

ЕстьЧислаВСтроке=(Стр_НайтиЧисл(ВхСтрока)<>Неопределено);

ЕстьЦифрыВСтроке=(Стр_НайтиГр(ВхСтрока,"+0123456789")>0);

ЕстьЛатиница=(Стр_НайтиГр(ВхСтр, Стр_Интерпретировать("lL"))>0);

ЕстьУказанныеЗнаки=(Стр_НнайтиГр(ВхСтр, "+к рогЮ.0р9")>0);

ЕстьНеПечатные=(Стр_НайтиГр(ВхСтр, Стр_Интерпретировать("-l-L-р-Р-П-З-Ц"))>0);

ЧАСТЬ 5. ЗАКЛЮЧЕНИЕ.

Где возможно, обходился одним проходом по строке. Второй проход - обычно уже по фрагментам. Не пользовался встроенной функцией СтрЧислоВхождений().

Использованы встроенные функции: Лев(),Прав()Сред(),СтрДлина()

- (позиционирование и получение части строки -должны быть "быстрыми").

Реализовано в версии 8.3.6.1977.

Мы расширили набор функций, предназначенных для работы со строками. Мы это сделали для того, чтобы дать вам более развитые инструменты для разбора строковых данных. Новые функции будут удобны и полезны в технологических задачах анализа текста. В задачах, связанных с разбором текста, который содержит данные в форматированном виде. Это может быть анализ каких-то файлов, полученных от оборудования, или, например, анализ технологического журнала.

Все действия, которые выполняют новые функции, вы могли выполнять и раньше. С помощью более или менее сложных алгоритмов, написанных на встроенном языке. Поэтому новые функции не дают вам каких-то принципиально новых возможностей. Однако они позволяют сократить количество кода, сделать код более простым и понятным. А кроме этого они позволяют ускорить выполнение действий. Потому что функции, реализованные в платформе, работают, конечно же, быстрее, чем аналогичный алгоритм, написанный на встроенном языке.

Функция форматирования СтрШаблон()

Эта функция подставляет параметры в строку. Потребность в таком преобразовании часто возникает, например, при выводе предупреждающих сообщений. Синтаксис этой функции выглядит следующим образом:

СтрШаблон(<Шаблон>, <Значение1-Значение10>)

<Шаблон> - это строка, в которую нужно подставить представления параметров.

<Значение1> , ... <Значение10> - это параметры (максимально - десять), представления которых нужно подставить в строку.

Чтобы указать конкретное место в шаблоне, в которое нужно выполнить подстановку, нужно использовать маркеры вида %1, ... %10. Количество маркеров, задействованных в шаблоне, и количество параметров, содержащих значения, должны совпадать.

Например, результатом выполнения такого оператора:

будет строка:

Ошибка в данных в строке 2 (требуется тип Дата)

Функция работы со строками СтрСравнить()

Эта функция сравнивает две строки без учёта регистра. Например, так:

Это же действие вы могли выполнить и раньше с помощью объекта СравнениеЗначений:

Однако использование новой функции выглядит более простым. А кроме этого функция, в отличие от объекта СравнениеЗначений, работает и в тонком клиенте, и в веб-клиенте.

Функции работы со строками СтрНачинаетсяС(), СтрЗаканчиваетсяНа()

Эти функции определяют, начинается ли строка с указанной подстроки, заканчивается ли строка указанной подстрокой. Алгоритм этих функций несложно реализовать на встроенном языке, но их наличие позволяет писать более чистый и понимаемый код. И работают они быстрее.

Например, их удобно использовать в операторе Если:

Функции работы со строками СтрРазделить(), СтрСоединить()

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

Функция работы со строками СтрНайти()

Вместо старой функции Найти() мы реализовали новую функцию, которая имеет дополнительные возможности:

  • Поиск в разных направлениях (с начала, с конца);
  • Поиск с указанной позиции;
  • Поиск вхождения с указанным номером (второе, третье и т.д.).

Фактически она дублирует возможности старой функции. Так сделано для того, чтобы сохранить совместимость с модулями, скомпилированными в старых версиях. Старую функцию Найти() рекомендуется больше не использовать.

Ниже приведён пример, использующий новые возможности поиска. Поиск в обратном направлении удобен тогда, когда вам нужен последний фрагмент формализованной строки, например, полное имя файла в URL. А поиск с указанной позиции помогает в тех случаях, когда нужно искать в известном фрагменте, а не во всей строке.

Механизмов для работы со строками в запросах 1С мало. Во-первых, строки можно складывать. Во-вторых, от строки можно взять подстроку. В-третьих, строки можно сравнивать, в том числе по шаблону. Вот пожалуй и всё, что можно делать со строками.

Сложение строк

Для сложения строк в запросе используется операция «+». Складывать можно только строки ограниченной длины.

ВЫБРАТЬ "Наименование: " + Контрагенты.Наименование КАК Колонка1 ИЗ Справочник.Контрагенты КАК Контрагенты ГДЕ Контрагенты.Ссылка = &Ссылка

Функция Подстрока

ПОДСТРОКА(<Строка>, <НачальнаяПозиция>, <Длина>)

Аналог функции Сред() из объектной модели. Функция Подстрока() может применяться к данным строкового типа и позволяет выделить фрагмент <Строки> , начинающийся с символа номер <НачальнаяПозиция> (символы в строке нумеруются с 1) и длиной <Длина> символов. Результат вычисления функции имеет строковый тип переменной длины, причем длина будет считаться неограниченной, если <Строка> имеет неограниченную длину и параметр <Длина> не является константой или превышает 1024.

Если длина строки меньше, чем указана во втором параметре, то функция вернет пустую строку.

Внимание! Использование функции ПОДСТРОКА() с целью приведения строк неограниченной длины к строкам ограниченной длины не рекомендуется. Вместо нее лучше использовать операцию приведения типа ВЫРАЗИТЬ().

Функция Подобно

Если нужно убедиться, что строковый реквизит соответствует определённым критериям мы его сравниваем:

ВЫБРАТЬ Контрагенты.Наименование КАК Колонка1 ИЗ Справочник.Контрагенты КАК Контрагенты ГДЕ Контрагенты.Наименование = "Газпром"

А что, если нужно более хитрое сравнение? Не просто на равенство или неравенство, а на подобие определенному шаблону? Вот как раз для этого и создана функция ПОДОБНО.

ПОДОБНО — Оператор проверки строки на подобие шаблону. Аналог LIKE в SQL.

Оператор ПОДОБНО позволяет сравнить значение выражения, указанного слева от него, со строкой шаблона, указанной справа. Значение выражения должно иметь тип строка. Если значение выражения удовлетворяет шаблону – результатом оператора будет ИСТИНА, иначе – ЛОЖЬ.

Следующие символы в строке шаблона являются служебными и имеют смысл, отличный от символа строки:

  • % (процент): последовательность, содержащая любое количество произвольных символов;
  • _ (подчеркивание): один произвольный символ;
  • […] (в квадратных скобках один или несколько символов): любой одиночный символ из перечисленных внутри квадратных скобок. В перечислении могут встречаться диапазоны, например a-z, означающие произвольный символ, входящий в диапазон, включая концы диапазона;
  • [^…] (в квадратных скобках значок отрицания, за которым следует один или несколько символов): любой одиночный символ, кроме тех, которые перечислены следом за значком отрицания.

Любой другой символ означает сам себя и не несет никакой дополнительной нагрузки. Если в качестве самого себя необходимо записать один из перечисленных символов, то ему должен предшествовать <Спецсимвол>. Сам <Спецсимвол> (любой подходящий символ) определяется в этом же операторе после ключевого слова СПЕЦСИМВОЛ.