Перейти к содержимому

Как сравнить строки в 1с

  • автор:

Новые функции работы со строками

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Как сравнить строки в 1с

Войдите как ученик, чтобы получить доступ к материалам школы

Внутренний язык программирования 1С 8.3 для начинающих программистов: работа со строками в 1С

Автор уроков и преподаватель школы: Владимир Милькин

Друзья, сегодня будет интереснейший урок. Мы научимся выполнять операции со строками (мы проходили их здесь).

Наверное, не найдётся ни одного языка программирования, который не давал бы возможностей для обработки строк. Настолько это фундаментальный и необходимый тип данных.

И 1с в этом смысле не исключение. Я, как обычно, прошу вас повторять и проверять у себя весь код, который мы будем писать в этом уроке.

Откуда в программе появляются строки

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

. и далее использовать его по своему усмотрению:

Бывает и так, что значение строки должен ввести сам пользователь. Это делается при помощи команды ВвестиСтроку:

Из чего состоит строка

Любая строка состоит из символов.

К примеру, строка «привет» состоит из символов ‘п’, ‘р’, ‘и’, ‘в’, ‘е’, ‘т’.

К этим символам можно обращаться по их порядковому номеру. При этом нумерация символов в строке (в отличие от коллекций) начинается не с 0, а с 1.

Узнать общее количество символов в строке можно при помощи функции СтрДлина. Она принимает на вход строку и возвращает нам число символов в этой строке.

Таким образом, цикл обхода строки будет таким:

Если мы запустим эту программу на компьютере, то увидим такой результат:

Мы научились получать номера символов в строке, но как получать сами символы?

За получение нужного символа (или даже группы символов) из строки отвечает функция Сред (сокращение от слов «средина», «средний»).

Она принимает три параметра:

  • Саму строку.
  • Номер символа в строке, который нужно получить.
  • Количество символов, которое нужно получить.

В нашем случае мы будем получать по одному символу, поэтому третий параметр у нас всегда будет равен 1.

Итак, перепишем наш код вот так:

Теперь вывод будет совсем другим:

Что представляет из себя символ

Мне иногда кажется, что всё в этом мире есть числа . И символы строки, кстати, не исключение.

И это на самом деле так, ведь каждому значению символа соответствует определенное число, его код.

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

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

Давайте выведем числовой код каждого символа нашей строки:

Запустим эту программу, вывод будет таким:

Получается, что, к примеру, символу ‘п’ соответствует числовой код 1087? Да, это действительно так. Проверим это.

Для этого я сообщу вам способ для обратного перевода: из числового кода в символ. За такой перевод отвечает функция Символ. Она принимает на вход числовой код, а возвращает символ.

Объединение строк

Давайте представим, что у нас есть две вот такие строки .

. и мы хотим сложить (ещё говорят «склеить», «объединить») эти строки вместе, чтобы за значением первой строки сразу следовало значение второй.

Это делается при помощи оператора плюс (+), вот так:

Выведем эту строку пользователю:

Выглядит не очень, правда?

Давайте усложним задачу — требуется объединить эти строки, но между ними вставить пробел, а в конце добавить восклицательный знак.

Вот так гораздо лучше!

Поиск в строке

Давайте рассмотрим такую интересную задачу. Попросим пользователя ввести любой текст, но чтобы в нём встречалось (или нет) слово «счастье».

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

К примеру, если пользователь введёт строку «высыпаться по утрам — счастье», то программа должна ему сказать, что слово «счастье» есть в строке и оно находится в позиции 23.

Будем писать программу по частям.

Сначала напишем ввод строки от пользователя:

За поиск в строке отвечает функция СтрНайти.

На вход она принимает 2 параметра (на самом деле параметров больше, но мы рассмотрим только первые два):

  • Строку, в которой надо искать.
  • Часть строки (её ещё называют «подстрока»), которую надо найти.

Функция возвращает 0, если вхождение не найдено и позицию в строке, если вхождение найдено. Функция ищет только первое вхождение подстроки в строку.

С учётом этого продолжим написание программы вот так:

Замена в строке

А давайте подшутим над пользователем?

Пусть он введёт строку со словом «счастье», а мы выведем его же строку, в которой заменим слово «счастье», например, на «удовольствие».

За замену одной части строки на другую отвечает функция СтрЗаменить.

На вход она принимает 3 параметра:

  • Строку, в которой нужно сделать замену.
  • Подстроку, которую надо найти и заменить.
  • Подстроку, на которую нужно заменить.

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

Верхний и нижний регистры

А вы заметили, что один и тот же символ может иметь два варианта, например: ‘п’ и ‘П’. Первый вариант называется «нижний регистр», а второй — «верхний регистр».

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

Именно поэтому для компьютера, к примеру, строка «привет» будет не равна строке «Привет»:

Компьютер при сравнении строк сравнивает числовой код каждого символа одной строки с соответствующим ему (по порядку) числовым кодом символа другой строки. И если есть хотя бы одно неравенство — строки считаются различными.

Но у нас есть замечательная возможность менять регистр строк: из верхнего в нижний и наоборот. За это отвечают функции НРег (сокращение от «нижний регистр») и ВРег (сокращение от «верхний регистр»).

Когда это может быть полезно? Вспомните задачу, когда мы заменяли слово «счастье» на «удовольствие».

Функция СтрЗаменить (как и Найти) ищет подстроку с учётом регистра. То есть если пользователь введет вместо «счастье», например, «Счастье», то программа не найдёт этого вхождения.

И чтобы поиск и замена не зависели от того в каком регистре ввёл строку пользователь, мы напишем вот так:

Теперь, даже если пользователь введёт «Любимая работа — это СЧАСТЬЕ!» программа сможет найти слово «счастье» и вывести пользователю «любимая работа — это удовольствие!».

Подведём итоги

Мы рассмотрели основные операции над строками, но на самом деле их больше.

Некоторые из них вы можете изучить вместе с примерами в справочнике по языку 1с.

Работа со строками в языке запросов

Существует несколько видов взаимодействия со строками в языке запросов 1С: конкатенация, выбор подстроки и сравнение.

Конкатенация

Конкатенация строк в языке запросов реализована с помощью оператора "+".
Пример:

или например сложим две строки, только одну получим из таблицы БД

"Товар: " + Номеклатура.Наименование КАК Наименование

Из Справочник.Номенклатура КАК Номеклатура

В результате получим все наименования из справочника Номенклатура, к которым вначале добавилась строка "Товар: ". Например "Товар: Coca-Cola".

или например сложим две строки, только одну строку получим выражением ПРАВ()

"Товар: " + Выразить( Прав(Номеклатура.Код,1) как строка(1)) КАК Наименование

Из Справочник.Номенклатура КАК Номеклатура

В результате получим сумму строки "Товар: " с последним символом кода номенклатуры. Например "Товар: 1".

Функции работы со строками

ПОДСТРОКА()

Функция для работы со строками ПОДСТРОКА позволяет выделить часть строки, указанной длины из исходной строки, начиная с указанной позиции.

Синтаксис функции ПОДСТРОКА:
ПОДСТРОКА(<Строка>, <НачальнаяПозиция>, <Длина>).
Строка — Исходная строка, последовательность символов, слово.
Начальная позиция — Номер первого символа части строки, которую хотим получить в результате. Следует учитывать, что нумерация символов в строке начинается с 1, так же можно использовать и числа меньше 1 для указания начальной позиции, но все они в результате работы функции будут приведены к 1.
Длина — Количество символов после начальной позиции, которые должны попасть в результат.
Пример:

ПОДСТРОКА ( "Привет, мир!" , 9 , 3 ) // Результат "мир"

Функция преобразует в строку значения примитивных типов. При попытке преобразования в строку значения не примитивного типа будет выдана ошибка выполнения запроса. Так же при применении к значению NULL, в результате так же будет NULL.
В качестве примера преобразуем к строке число 42

СТРОКА ( 42 ) // Результат строка "42"

ДлинаСтроки()

Функция ДлинаСтроки возвращает количество символов в переданной строке в качестве значения.

ДлинаСтроки ( "Привет, мир!" ) // Результат 12

СокрЛ()

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

СокрЛ ( " Привет, мир!" ) // Результат "Привет, мир!"

СокрП()

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

СокрП ( "Привет, мир! " ) // Результат "Привет, мир!"

СокрЛП()

Функция объединяет в себе две другие функции СокрЛ и СокрП, и удаляет незначащие символы стоящие перед первым значащим символом в строке и незначащие символы стоящие после последнего значащего символа в строке. Под незначащими символами понимаются пробелы(обычный, неразрывный), символы табуляции, перевода каретки и т.д.

Пример: в этой строке есть лишние пробелы вначале, середине и в конце. Пробелы слева и справа удалились, но в середине остались.

СокрЛП ( " Привет, мир! " ) // Результат "Привет, мир!"

Лев()

Функция позволяет получить часть символов из строки, находящихся слева, по переданному количеству символов.

Синтаксис
Лев (Значение, ЧислоСимволов)

Пример, получим 6 символов с начала строки:

Лев ( "Привет, мир!" , 6 ) // Результат "Привет"

Прав()

Функция позволяет получить часть символов из строки, находящихся справа, по переданному количеству символов.

Синтаксис
Прав(Значение, ЧислоСимволов)

Пример, получим 4 символа с конца строки:

Прав ( "Привет, мир!" , 4 ) // Результат "мир!"

СтрНайти()

Функция производит поиск в строке и возвращает номер первого символа найденного вхождение искомой строки. Регистр при поиске не учитывается. Если ничего не найдено, то в результате вернется 0

Синтаксис

ВРег()

Функция приводит все буквы содержащиеся в переданной строке в верхний регистр

ВРег ( "Привет, мир!" ) // Результат "ПРИВЕТ, МИР!"

НРег()

Функция приводит все буквы содержащиеся в переданной строке в нижний регистр

НРег ( "Привет, мир!" ) // Результат "привет, мир!"

СтрЗаменить()

Функция находит в переданном строковом значении все вхождения искомой строки и заменяет их на строку замены. Регистр не учитывается.
Синтаксис

СтрЗаменить(Строка, ПодстрокаПоиска, ПодстрокаЗамены)

Пример, заменим все буквы "р", на буквы "л":

Сравнение строк

Сравнение строк может происходит с помощью оператора "=". При сравнении регистр не учитывается.

Пример, сравним две строки:

"Привет" = "привет" // Результат Истина

Оператор ПОДОБНО

Предназначен для сравнения строковых выражений с заданным шаблоном. Результатом такой проверки будет «Ложь» или «Истина». Отличие от оператора "=" заключается в возможности использования спецсимволов. Шаблон оператора ПОДОБНО задается с помощью специальных символов:
%(процент) — символ или последовательность символов, имеющая любое количество произвольных символов
_(подчеркивание) — один произвольный символ
[ ] (квадратные скобки) — позволяют указать один или несколько символов, один из которых может содержаться в искомой строке
СПЕЦСИМВОЛ — Позволяет использовать один из перечисленных спецсимволов, в качестве обычного символа, если такой символ имеется в строке.

Оператор ПОДОБНО можно использовать:

  • В полях выборки, как на примере выше
  • В условии ГДЕ
  • В конструкции ВЫБОР КОГДА

Синтаксис
<Строковое выражение> ПОДОБНО <"Шаблон">

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

"_test@mail.ru" Подобно "\_%@mail.ru" СПЕЦСИМВОЛ "\" // Результат Истина

Пример, найдем все элементы справочника Номенклатура, содержащие слово "Фрукт" в названии:

Функции строк в 1С. Часть 2

В этой статье я продолжу изучать функции строк. Если функции из предыдущей статьи были и в старых версиях 1С (1С 8.1, 1С 8.2), то в этой статье разберем функции, которые появились уже в платформе 8.3.

Сравнение строк в 1С

Начиная с режима совместимости 8.3.6, появилась возможность сравнивать строки по длине. Это выполняет метод СтрСравнить(<ПерваяСтрока>,<ВтораяСтрока>). В качестве параметров этого метода указываются сравниваемые строки. А возвращает этот метод следующие значения

0 – строки равные

1 – первая строка больше второй

-1 – первая строка меньше второй

Обе строки приравниваются к одинаковому регистру. Причем можно сравнивать, как сами строки, так и переменные с типом строка.

То есть вот так:

Результат сравнения этих строк будет следующий:

Сравнение строк в 1С

Причем не имеет значение, имеются в строке пробелы или нет.

Сравнение строк в 1С c пробелами

В этом случае метод вернул -1, хоть и Строка2 отличается от Строка1 только пробелами.

Функции СтрНачинаетсяС и СтрЗаканчиваетсяНа в 1С

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

Например, у нас имеется строка «Привет, Владимир Петрович, как дела?». Мы можем определить, начинается эта строка на слове «Привет», и заканчивается ли она словами «как дела?».

И посмотрим, какой результат будет у этих функций

Функции СтрНачинаетсяС СтрЗаканчиватесяНа

Обе функции возвращают истину, если строка начинается указанной подстрокой или заканчивается. Причем регистр подстроки важен!

Функции СтрНачинаетсяС СтрЗаканчиватесяНа

Разделить и соединить строку в 1С

Начиная с режима совместимости 8.3.6, в платформе 1С появилась возможность разъединять и соединять строки. Делается это при помощи функции СтрРазделить и СтрСоединить.

Функция СтрРазделить разделяет строки по определенному разделителю и возвращает массив со строками, которые получились в результате разделения.

Функция СтрСоединить принимает массив строки и соединят их в одную.

Разберем подробнее и с примерами.

Функция СтрРазделить имеете следующий синтаксис СтрРазделить(<Строка>,<Разделитель>, <ВключатьПустые>).

Строка – разделяемая строка

Разделитель – символ или символы, по которым строка будет разделена

ВключатьПустые – тип булево, если Истина, то в разделенных строках будут пустые строки, именное пустые — «».

Разделим строку с каким-то кодом «DGFTF-SQ2WC-2XSD2—SDFR1» на отдельные значения, разделителем в нашем случае будет символ «-». Причем, я намеренно сделал два символа-разделителя вместе, чтобы показать, как работает второй параметр ВключатьПустые.

В этом примере два массива, посмотрим в отладке на первый

Разделить строку в 1С с пустыми символами

А также на второй:

Разделить строку в 1С без пустых символов

Точно также, как разложили строку, мы можем соединить её из строк в массиве, используя метод СтрСоединить. Этот метод является функцией, которая возвращает соединенную строку и имеет следующий синтаксис.

МассивСтрок – массив или фиксированный массив строк, которые нужно будет соединить.

Разделитель – символ или строка, которая будет вставлена между соединяемыми строками. Необязательный параметр. Если его не будет, то строки будут соединены слитно.

Доработаем предыдущий пример: объединим строки в массиве без пустого символа, поставив наклонную черту в качестве разделителя.

Получится следующий результат:

Объединить строку в 1С

Другие статьи о примитивных типах:

Более подробно и основательно начальные вопросы программирования в 1С есть вы можете изучить в
Книга «Программировать в 1С за 11 шагов»

Изучайте программирование в 1С в месте с моей книгой «Программировать в 1С за 11 шагов»

Программировать в 1С за 11 шагов

Книга написана понятным и простым языком — для новичка.

  1. Книга посылается на электронную почту в формате PDF. Можно открыть на любом устройстве!
  2. Научитесь понимать архитектуру 1С;
  3. Станете писать код на языке 1С;
  4. Освоите основные приемы программирования;
  5. Закрепите полученные знания при помощи задачника.

О том как разрабатывать под управляемым приложением 1С, читайте в книге Книга «Основы разработки в 1С: Такси»

Отличное пособие по разработке в управляемом приложении 1С, как для начинающих разработчиков, так и для опытных программистов.

Основы разработки в 1С такси

  1. Очень доступный и понятный язык изложения
  2. Книга посылается на электронную почту в формате PDF. Можно открыть на любом устройстве!
  3. Поймете идеологию управляемого приложения 1С
  4. Узнаете, как разрабатывать управляемое приложение;
  5. Научитесь разрабатывать управляемые формы 1С;
  6. Сможете работать с основными и нужными элементами управляемых форм
  7. Программирование под управляемым приложением станет понятным

Промо-код на скидку в 15% — 48PVXHeYu

Эти книги, плюс книга по программированию оперативного учета имеются в едином комплекте: комплект книг по разработке в 1С.
Только для читателей моего блога,
промо-код на скидку в 300 рублей на весь комплект: blog


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

можно оплатить вручную:

Яндекс.Деньги — 410012882996301
Web Money — R955262494655

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *