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

Специальные символы в 1С 8.3 — набор специальных символов для строковых типов данных.

Рассмотрим каждый из них подробнее.

Специальные символы в 1С: ВК, ВТаб, НПП, ПС, ПФ, Таб

Спецсимволы вызываются с помощью глобального свойства «Символы», например:

Текст = «Текст до табуляции» + Символы.Таб + » текст после табуляции»;

Получите 267 видеоуроков по 1С бесплатно:

  • ВК (CR) — возврат каретки. В старые времена на матричных или ромашковых принтерах этот код символа использовался как команда, которая возвращала печатающую головку в начало строки.
  • НПП (NBSp) — неразрывный пробел (часто можно увидеть в строках числового вида, например: 1 000).
  • ПС (LF) — Перевод строки (LF - linefeed) - прокручиваем барабан на одну строку вниз, печатающая головка на том же месте.
  • ПФ (FF) — перевод формата. Лист выбрасывается из принтера, печать начинается с нового листа.
  • Таб (Tab) — символ табуляции. Горизонтальная табуляция - способ спозиционироваться для печати на ближайшую колонку, кратную какому-либо числу (например, на 8, 16, 24 …).
  • ВТаб (VTab) — вертикальная табуляция. Аналогична горизонтальной, только позиционируемся на строку. Вызывает некоторую прокрутку барабана принтера (печатающая головка остается на той же позиции (колонке)!)

ПС + ВК - это комбинация, которая выполняет две операции: прокручивает барабан на строку вниз и возвращает печатающую каретку в начало строки, что соответствует тому, что пользователь ожидает получить, нажимая на Enter.

Если Вы начинаете изучать 1С программирование, рекомендуем наш бесплатный курс (не забудьте

Строка — один из примитивных типов данных в системах 1С:Предприятие 8. Переменные с типом строка содержат текст.

Значения переменных типа строка заключаются в двойные кавычки. Несколько переменных данного типа можно складывать.

Пер1 = "Слово 1" ;
Пер2 = "Слово 2" ;
Пер3 = Пер1 + " " + Пер2 ;

В итоге Пер3 будет иметь значение «Слово 1 Слово 2″.

Кроме того, в системах 1С:Предприятие 8 предусмотрены функции для работы со строками. Рассмотрим основные:

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

Строку можно ввести и, зная код символа в кодировке Unicode:

Символ(<КодСимвола>) — код вводится в виде числа.

Буква= Символ(1103 ) ; // Я

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

КодСимвола(<Строка>, <НомерСимвола>) — возвращает номер указанного символа в кодировке Unicode в виде числа.

Функции преобразования регистра текста:

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

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

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

Функции поиска и замены символов в строке:

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

Найти ("Строка" , "ока" ) ; // 4

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

Номер4 Вхождения= СтрНайти ("Обороноспособность" , "о" , НаправлениеПоиска. СНачала, 1 , 4 ) ; // 7

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

СтрЗаменить ("Строка" , "ока" , "" ) ; // Стр

ПустаяСтрока(<Строка>) – проверяет строку на наличие значащих символов. Если значащих символов нет, или вообще никаких символов нет, то возвращается значение Истина . В противном случае — Ложь .

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

СтрЧислоВхождений ("учиться, учиться и еще раз учиться" , "учиться" , "" ) ; // 3

СтрШаблон(<Строка>, <ЗначениеПодстановки1>…<ЗначениеПодстановкиN> — подставляет параметры в строку по номеру. Строка должна содержать маркеры подстановки вида: «%1..%N». Нумерация маркеров начинается с 1. Если значение параметра Неопределено , подставляется пустая строка.

СтрШаблон ("Параметр 1 = %1, Параметр 2 = %2" , "1" , "2" ) ; // Параметр 1= 1, Параметр 2 = 2

Функции преобразования строк:

Лев(<Строка>, <ЧислоСимволов>) – возвращает первые сначала символы строки.

Прав(<Строка>, <ЧислоСимволов>) – возвращает последние символы строки.

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

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

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

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

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

Прочие функции:

СтрДлина(<Строка>) – возвращает количество символов в строке.

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

СтрСравнить(<Строка1>, <Строка2> ) – сравнивает две строки без учета регистра. Функция работает аналогично объекту СравнениеЗначений . Возвращает:

  • 1 — если первая строка больше второй
  • -1 — если вторая строка больше первой
  • 0 — если строки равны

СтрСравнить("Первая строка" , "Вторая строка" ) ; // 1

Информация в 1С может быть представлена: справочником, документом, регистром…

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

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

Виды строк

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

Если строку ввел пользователь на форме, то у элемента формы может стоять галочки «Многострочный режим» и «Расширенное редактирование». Первая значит, что строка может содержать знаки «Переноса строки 1С (Enter)». Вторая – что строка может содержать прочие служебные символы 1С, например TAB.

Если строка взята из файла, например с использованием ЧтениеТекста(), то становится важна и кодировка — при чтении файла нужно указывать кодировку (UTF-8, KOI8 и т.п.).

Служебные символы 1С

Для работы со специальными символами используется перечисление Символы 1С.

Например, строковое значение, состоящее из двух слов:
ТекстоваяСтрока = "Первая строка" + Символы.ПС + "Вторая строка";

Например, поиск перенос строки 1С в тексте:
Позиция = Найти(ТекстоваяСтрока, Символы.ПС);

Работать можно со следующими специальными символами:

  • CR и LF
    Означают перенос строки 1С. Часто встречаются в текстовых файлах.
    Код символа в ASCII – 0x0D и 0x0A, в Unicode – U+000D и U+000A.

    В языке 1С выглядят как Символы.CR и Символы.LF, или по-русски Символы.ВК и Символы.ПС. Для переноса строки 1С при ее создании в коде 1С, достаточно использования ПС.

Прочие символы 1С

Строки в 1С «физически» используются в формате Unicode (Юникод, http://ru.wikipedia.org/wiki/%DE%ED%E8%EA%EE%E4).

Если Вы не сталкивались ранее с «кодированием» символов, кратко заметим:

  • При работе со строками, компьютер использует номера букв, а не сами буквы
  • Так как «человеческих» алфавитов мнозжество (английский, русский, греческий, китайский и др., а еще есть служебные и «непечатные» символы 1С), то существует несколько вариантов компьютерных алфавитов, одним из которых является Unicode, который включает в себя символы 1С всех языков
  • Алфавит Unicode выглядит примерно так:
    o Распространенные «непечатные» служебные символы 1С
    o Знаки препринания и математики
    o Цифры
    o Английский алфавит
    o Доп. символы 1С английского алфавита, которые используются в европейских языках (например в немецком)
    o Греческий алфавит
    o Русский алфавит
    o …

При необходимости в строках 1С возможно использовать все символы 1С, доступные в Unicode.

Во-первых Вы их можно набрать с клавиатуры, если у Вас в Windows установлена раскладка (по-умолчанию на территории России обычно ставится английская и русская).

Во-вторых можно набрать с помощью следующего приема:

В-третьих работать можно из кода программы. Функция Символ(Цифра) возвращает символ с указанным номером, а функция КодСимвола(Строка) возвращает номер символа у первой буквы в строке. Если нужна другая буква в строке, то КодСимвола(Строка, НомерБуквы).

Например, добавим символ Ž к следующей строке:
ТекстоваяСтрока = "Хорошее пиво в городе " + Символ(381) + "drobinek";
//Результат: "Хорошее пиво в городе Ždrobinek"

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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