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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

ЧАСТЬ 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. ЗАКЛЮЧЕНИЕ.

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

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

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

Всем привет
Сегодня попросили меня при печати документа реализации не выводить префикс документа, задачу решил следующим образом.

СтрЗаменить(Номер, Лев (Номер, 3 ), "" );

Когда заглянул в синтакс-помощник так мне это понравилось, что захотелось написать о работе с строками в «1С:Предприятие» .

Строка в 1С относится к примитивному типу данных.

Если посмотреть в справку 1С увидим следующее описание типа Строка (String)
Значения данного типа содержат строку в формате Unicode произвольной длины.
Если своими словами о строках то получится. Строка — константа, состоящая из различных символов, обрамляется всегда кавычками.

Задание строки
Обращение = «Привет пассажир»;

Многострочные строки в типовых конфигурациях чаще всего создаются с помощью вертикального разделителя «|»:
Строка = «Многострочная
|строка
|пиши
|текст»;

Кавычка внутри строки задаются двойными кавычками.
Строка = «»Текст в кавычках»»;

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

Функций по работе со строками

Здесь в краткой форме приведу функций по работе со строками:

ВРег(<Строка>) — Все символы строки функция преобразует в верхний регистр.

КодСимвола(<Строка>, <НомерСимвола>) – Функция получает код символа, расположенного в переданной строке в позиции с указанным номером.

Лев(<Строка>, <ЧислоСимволов>) – Функция выбирает первые слева символы строки.

Найти(<Строка>, <ПодстрокаПоиска>) — Функция находит вхождение искомой строки как подстроки в исходной строке.

НРег(<Строка>) — Функция преобразует все символы строки в нижний регистр.

Прав(<Строка>, <ЧислоСимволов>) Данная функция отличается от функций Лев (Left) тем что выбирает последние справа символы строки.

ПустаяСтрока(<Строка>) — Функция проверяет строку на наличие значащих символов.

Символ(<КодСимвола>) — Функция преобразует код символа в строку, содержащую символ.

СокрЛ(<Строка>) — Функция отсекает незначащие символы, стоящие слева от первого значащего символа в строке.

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

СокрП(<Строка>) — Функция отсекает незначащие символы, стоящие справа от последнего значащего символа в строке.

Сред(<Строка>, <НачальныйНомер>, <ЧислоСимволов>) — Функция выбирает строку символов, начиная с символа <НачальныйНомер>, общим количеством <ЧислоСимволов>.

СтрДлина(<Строка>) — Функция получает количество символов в строке.

СтрЗаменить(<Строка>, <ПодстрокаПоиска>, <ПодстрокаЗамены>) — Функция находит в исходной строке все вхождения подстроки поиска и заменяет ее на подстроку замены.

СтрПолучитьСтроку(<Строка>, <НомерСтроки>) — Функция получает строку многострочной строки по номеру.

СтрЧислоВхождений(<Строка>, <ПодстрокаПоиска>) — Функция вычисляет число вхождений подстроки поиска в исходной строке.

СтрЧислоСтрок(<Строка>) — Функция считает число строк в многострочной строке. В многострочной строке, строки разделены символами перевода строк.

ТРег(<Строка>) — Функция преобразует строку к титульному регистру. Это означает, что у каждого слова первый символ преобразуется к титульному регистру или к верхнему регистру, если титульный регистр для символа не определен. Остальные символы преобразуются к нижнему регистру.

Преобразования типов
Для явного преобразования типов данных существуют функции одноименные с типом данных, к которому происходит преобразование: Строка(<Значение>)

СтрокаИзЧисел= Строка(Число);

Все данные функции подробно описаны в Синтакс-помощник, как начинающему программисту может помочь Синтакс-помощник, я описал в статье .

Примеры по работе с строками

Преобразование числа в строку и обратно.

Для получения строкового представления года следует использовать функцию Формат.

Год = Формат(ТекущаяДата(), "ДФ=yyyy" ) // Год = "2012"

Чтобы преобразовать число к строке без вставки символа-разделителя групп (неразрывного пробела), необходимо применить функцию Формат с параметром ЧГ=0:

Число = 2012 Строка = Формат(Число, "ЧГ=0" ); //Строка = "2012"

Строка Без пробелов.

Тип «Строка» встречается во всех языках программирования. Он является примитивным, и в 1С существует много функций для работы с ним. В данной статье мы подробно рассмотрим различные способы работы со строковыми типами в 1С 8.3 и 8.2 на примерах.

Строка

Для того чтобы преобразовать переменную какого-либо типа в строку, существует одноименная функция «Строка()». Входным параметром будет сама переменная, строковое представление которой необходимо получить.

Строка(Ложь) // возвращает «Нет»
Строка(12345) // возвращает «12 345»
Строка(ТекущаяДата()) //»21.07.2017 11:55:36″

Преобразовывать к строке возможно не только примитивные типы, но и остальные, например элементы справочников, документов.

СокрЛП, СокрЛ, СокрП

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

СокрЛП(» Будут удалены пробелы с обеих сторон «) // «Будут удалены пробелы с обеих сторон»
СокрЛ(» Будут удалены пробелы с обеих сторон «) // «Будут удалены пробелы слева »
СокрП(» Будут удалены пробелы с обеих сторон «) // « Будут удалены пробелы справа»

Лев, Прав, Сред

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

Лев(«Строковая переменная», 4) // возвращает «Стро»
Прав(«Строковая переменная», 7) // возвращает «еременная»
Сред(«Строковая переменная», 2, 5)// возвращает «троко»

СтрДлина

Функция определяет количество символов, которые содержатся в строковой переменной.

СтрДлина(«Слово «) // результатом выполнения будет число 5

Найти

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

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

Найти(«раз, два, раз, два, три», «два») // функция вернет число 6

ПустаяСтрока

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

ПустаяСтрока(«Пупкин Василий Иванович») // функция вернет значение Ложь
ПустаяСтрока(» «) // функция вернет значение Истина

ВРег, НРег, ТРег

Данные функции очень полезны при сравнении и преобразовании строковых переменных. «Врег()» вернет исходную строку в верхнем регистре, «НРег()» в нижнем, а «ТРег()» отформатирует ее так, что первый символ каждого отдельного слова будет с большой буквы, а все последующие с маленькой.

ВРег(«ГеНераЛьныЙ дИРЕктОр») // возвращаемое значение – «ГЕНЕРАЛЬНЫЙ ДИРЕКТОР»
НРег(«ГеНераЛьныЙ дИРЕктОр») // возвращаемое значение – «генеральный директор»
ТРег(«ГеНераЛьныЙ дИРЕктОр») // возвращаемое значение – «Генеральный Директор»

СтрЗаменить

Данная функция является аналогом замены в текстовых редакторах. Она позволяет подменять один символ или набор символов другим в строковых переменных.

СтрЗаменить(«красный, белый, желтый», «,», «;») // вернет «красный; белый; желтый»

СтрЧислоСтрок

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

Цикл, в приведенном ниже примере, пройдет три круга, так как функция СтрЧислоСтрок вернет значение 3:

Для инд=1 по СтрЧислоСтрок(«Строка1» + Символы.ПС + «Строка2» + Символы.ПС + «Строка3») Цикл
<тело цикла>
КонецЦикла;

СтрПолучитьСтроку

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

СтрПолучитьСтроку(«Строка1» + Символы.ПС + «Строка2» + Символы.ПС + «Строка3», 2) // вернет «Строка2»

СтрЧислоВхождений

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

СтрЧислоВложений(«а;б;в;г; «, «;») // функция вернет число 4

Символ и КодСимвола

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

КодСимвола(«А») // функция вернет число 1 040
КодСимвола(1040) // функция вернет «А»

Частые задачи при работе со строками

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

Чтобы объединить несколько строк (произвести конкатенацию) достаточно использовать оператор сложения.

«Строка 1″ + » Строка 2″ //результатом сложения двух строк будет «Строка 1 Строка 2»

Преобразование типов

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

Строка(1000) // вернет «1 000»

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

СтрЗаменить(Строка(1000),Символы.НПП,»») // вернет «1000»

Строка(Формат(1000,»ЧГ=»)) // вернет «1000»

Кавычки в строке

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

Заголовок = Строка(«ООО «»Рога и копыта»» — это мы!») // вернет «ООО «Рога и копыта» — это мы!»

Многострочность, перенос строки

Для того, чтобы создать многострочный текст достаточно добавить в него символы переноса строки (Символы.ПС).

МногострочныйТекст = «Первая строка» + Символы.ПС + «Вторая строка»

Как убрать пробелы

Для того, чтобы убрать пробелы справа или слева можно воспользоваться функцией «СокрЛП()» (а так же «СокрЛ()» и «СокрП()»):

СтрокаБезПробелов = СокрЛП(» Много букв «) // функция вернет значение «Много букв»

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

СтрокаБезПробелов = СтрЗаменить(Строка(99999),Символы.НПП,»») // вернет «99999»

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

СтрокаБезПробелов = СтрЗаменить(« п р и в е т», » » ,»») // вернет «привет»

Сравнение строк между собой

Сравнить сроки можно обычным знаком равенства. При сравнении учитывается регистр.

«Здраствуйте» = «здравствуйте» // вернет Ложь
«Здраствуйте» = «Здравствуйте» // вернет Истина
«Здраствуйте» = «До свидания» // вернет Ложь



Статьи по теме