Возвращает первое вхождение подстроки в исходную строку
Синтаксис
Функция Найти()
имеет следующий синтаксис:
Число Найти(ИсходнаяСтрока, ПодстрокаПоиска)
А также альтернативный англоязычный синтаксис:
number Find(SourceString, Substring)
Параметры
Описание параметров функции Найти()
:
Имя параметра* | Тип | Описание |
---|---|---|
ИсходнаяСтрока | Строка | Исходная строка. |
ПодстрокаПоиска | Строка | Искомая подстрока. |
*Жирным шрифтом выделены обязательные параметры |
Возвращаемое значение
Число
Позиция первого знака найденной подстроки.
Описание
Функция Найти()
находит первое вхождение искомой подстроки в исходной строке и возвращает номер позиции. Нумерация символов в строке начинается с 1. Если строка не содержит указанной подстроки, то возвращается 0. Если параметр ПодстрокаПоиска
— пустая строка, то возвращает 1. Если оба обязательных параметра — пустые строки, то возвращает 1.
Внимание! Сравнение выполняется с учетом регистра (см. пример)
Внимание!! Функция является устаревшей! Рекомендуется использовать функцию СтрНайти()
Доступность
Тонкий клиент, веб-клиент, мобильный клиент, сервер, толстый клиент, внешнее соединение, мобильное приложение(клиент), мобильное приложение(сервер).
Пример использования
Пример кода с использованием функции Найти()
:
ИсходнаяСтрока = "abc"; Если Найти(ИсходнаяСтрока, "ab") > 0 Тогда Сообщить("Нашли ab"); КонецЕсли; //обращайте внимание на регистр! //следующая строка не будет найдена: Если Найти(ИсходнаяСтрока, "Ab") = 0 Тогда Сообщить("Не нашли Ab"); КонецЕсли; //чтобы найти, необходимо привести строку к одному регистру Если Найти(Нрег(ИсходнаяСтрока), Нрег("Ab")) > 0 Тогда Сообщить("Нашли Ab"); КонецЕсли;
Читайте также:
- Новые строковые функции 1С 8.3
- Функция СтрНайти()
Поделиться страницей в соц.сетях
В предыдущей статье мы узнали, как работать со строками в 1С 8.3. В этой статье изучим самые часто применяемые функции для работы со строками 1С.
Статья о строках в 1С
Длина строки 1С
В платформе 1С имеется функция, которая вычисляет длину строки – СтрДлина. Эта функция имеет единственный параметр – строку, и возвращает количество символов в этой строке, т.е. её длину. Причем считаются все символы, в том числе пробелы.
Рассмотрим пример.
СтрокаПримера1= "результат "; СтрокаПримера2= "результат"; ДлинаСтроки1 = СтрДлина(СтрокаПримера1); ДлинаСтроки2 = СтрДлина(СтрокаПримера2); Сообщить("Длина строки:""" + СтрокаПримера1 + """ = " + ДлинаСтроки1); Сообщить("Длина строки:""" + СтрокаПримера2 + """ = " + ДлинаСтроки2);
И результат.
Регистр строки 1С
В 1С имеются функции для работы с регистрами строк.
НРег – переводит строку в нижний регистр
ВРег – переводит строку в верхний регистр
ТРег – переводит строку в титульный регистр (каждое слово начинается с заглавной буквы).
Рассмотрим пример.
СтрокаПримера= "пРивет оЛег!"; Сообщить(НРег(СтрокаПримера)); Сообщить(ВРег(СтрокаПримера)); Сообщить(ТРег(СтрокаПримера));
И результат.
Замечу, эти функции не изменяют строку в параметре, а создают новую строку в нужном регистре.
Убрать пробелы в строке 1С
Часто возникает, что в строке 1С в начале строки или в конце строки есть лишние пробелы, которые нужно убрать. Для этих целей служат следующие функции.
СокрЛ — убирает пробелы слева строки.
СокрП — убирает пробелы справа строки.
СокрЛП – убирает пробелы справа и слева строки.
Рассмотрим пример (добавлю символы перед и после функциями, чтобы было понятно как они работают).
СтрокаПримера= " результат выгрузки "; Сообщить("|" + СокрЛ(СтрокаПримера) + "|"); Сообщить("|" + СокрП(СтрокаПримера) + "|"); Сообщить("|" + СокрЛП(СтрокаПримера) + "|");
И результат.
Эти функции, также, не изменяют строку в параметре, а создают новую строку с обрезанными пробелами.
Сократить строку 1С
Если предыдущие функции сокращали только пробелы, то в платформе 1С имеется возможность сократить и саму строку на нужное количество символов. Или наоборот – оставить нужное количество символов. Для этих целей служат следующие функции.
Лев – оставляет нужное количество символов слева. Имеет следующий синтаксис: Лев(<Cтрока>,<ЧислоСимволов>)
Прав – оставляет нужно количество символов справа. Имеет следующий синтаксис: Лев(<Cтрока>,<ЧислоСимволов>)
Сред – оставляет нужное количество символов в строке. Имеет следующий синтаксис: Лев(<Cтрока>,<НачальныйНомер>, <ЧислоСимволов>).
Поясним.
Функции Лев и Прав – создают новую строку, в которой оставлено слева и справа соответственно, то количество символов, которое указанно во втором параметре.
Функция Сред также создает новую строку, в которой оставлено то количество символов, которое указано в третьем параметре. Но, если предыдущие функции оставлялись символы или с начала строки, или с конца, то эта функция оставляет символы с любого места строки. Для этого во втором параметре нужно указать номер символа, с которого будут оставлены остальные символы (включая символ, номер которого мы указали).
Рассмотрим пример.
СтрокаФИО = "Иванов Иван Иванович"; СтрокаО = Прав(СтрокаФИО,8); СтрокаФ = Лев(СтрокаФИО,6); СтрокаИ = Сред(СтрокаФИО,8,4); Сообщить(СтрокаФ); Сообщить(СтрокаИ); Сообщить(СтрокаО);
По сути, эти функции позволяют сокращать как нужно строки, но работают наоборот – они оставляют то количество символов, которое необходимо.
Найти в строке 1С
Иногда нужно найти в строке или нужный символ, или нужную группу символов. Для этих целей применятся функция СтрНайти(). Эта функция имеет следующий синтаксис.
СтрНайти(<Cтрока>,<ПодстрокаПоиска>,<НаправлениеПоиска>,<НачальнаяПозиция>,<НомерВхождения>)
Данная функция возвращает позицию первого знака подстроки, которая была найдена. Если 0, то ни чего не найдено.
Разберем параметры:
Строка – строка, по которой осуществляется поиск;
ПодстрокаПоиска – подстрока (или символ), которая ищется в строке поиска;
НаправлениеПоиска – системное перечисление, которое задает в какую сторону осуществляется поиск. Имеет два значения: НаправлениеПоиска.Сначала, НаправлениеПоиска.Сконца. Необязательный параметр.
НачальнаяПозиция – номер символа, с которого начинается поиск. Должен быть в диапазоне от 1 до количества символов, иначе будет ошибка. Необязательный параметр. Если он не задан и установлен параметр НаправлениеПоиска, то в случае поиска Сначала по умолчанию равен 1, а если поиск СКонца, то по умолчанию равен количеству символов в строке.
НомерВхождения – искомая подстрока (или символ) может несколько раз входить в исходную строку, этот параметр указывает, какое вхождение нас интересует. По умолчанию равен 1.
Рассмотрим примеры.
СтрокаФИО = "Иванов Сидоров Иванов"; Сообщить(СтрокаФИО); //ищем с настройками по умолчанию НомерИванова = СтрНайти(СтрокаФИО,"Иванов"); Сообщить("Номер подстроки ""Иванов"" в строке " + НомерИванова); //ищем с конца НомерИванова = СтрНайти(СтрокаФИО,"Иванов",НаправлениеПоиска.СКонца); Сообщить("Номер подстроки ""Иванов"" в строке " + НомерИванова); //ищем с конца но начиная с 10 символа НомерИванова = СтрНайти(СтрокаФИО,"Иванов",НаправлениеПоиска.СКонца,10); Сообщить("Номер подстроки ""Иванов"" в строке " + НомерИванова); //ищем с начала, но второе вхождение НомерИванова = СтрНайти(СтрокаФИО,"Иванов",НаправлениеПоиска.СНачала,,2); Сообщить("Номер подстроки ""Иванов"" в строке " + НомерИванова);
И результат работы функции
Т.е. когда мы ищем в строке «Иванов Сидоров Иванов» подстроку «Иванов», то при поиске без дополнительных параметров функция возвращает 1, это номер символа с которого начинается искомая подстрока. Если же мы ищем в направлении СКонца, то возвращается номер символа, с которого начинается второе вхождение подстроки в строку. В третьем случае мы искали в направлении СКонца, но указали номер символа, с которого нужно искать строку, поэтому функция вернула 1, поскольку при поиске начиная с 10 символа с конца строки, искомая подстрока находится только в начале строки. И в последнем примере, мы ищем подстроку с начала, но ищем второе вхождение этой подстроки.
Заменить в строке 1С
В платформе 1С 8.3. имеется метод, при помощи которого можно менять в строке определенные символы на другие символы.
Этот метод СтрЗаменить, и он имеете следующий синтаксис: СтрЗаменить(<Строка>,<СтрокаПоиска>,<СтрокаЗамены>)
Данные метод возвращается строку, в которой будет выполнена замена или нет, в зависимости от того найдена строка поиска или нет.
Пример.
ФИОНеПравильное = "Иванов_Андрей_Игоревич"; Сообщить(ФИОНеПравильное); ФИОВерное = СтрЗаменить(ФИОНеПравильное,"_"," "); Сообщить(ФИОВерное); ФИОБезОтчетства = СтрЗаменить(ФИОВерное," Игоревич",""); Сообщить(ФИОБезОтчетства);
Результат:
Как видите, при помощи этого метода можно не только менять символы, но и вырезать не нужные символы.
Функции для многострочных строк в 1С
Из предыдущей статьи вы знаете, что в 1С можно задать многострочную строку, делается это при помощи символа «|». Сейчас мы разберем несколько функций, которые могут пригодиться при работе с многострочной строкой.
СтрЧислоСтрок(<Строка>) – позволяет узнать, сколько в строке строк.
Пример.
СтрокаСПереносом = "Первая |Вторая |Третья"; КоличествоСтрок = СтрЧислоСтрок(СтрокаСПереносом); Сообщить(СтрокаСПереносом); Сообщить("Количество строк: " + КоличествоСтрок);
Результат
СтрПолучитьСтроку – позволяет получить строку из многострочной строки по номеру, имеете следующий синтаксис: СтрПолучитьСтроку(<Строка>, <НомерПолучаемойСтроки>). <НомерПолучаемойСтроки> — начинается с единицы.
Пример
СтрокаСПереносом = "Первая |Вторая |Третья"; ВтораяСтрока = СтрПолучитьСтроку(СтрокаСПереносом,2); Сообщить(СтрокаСПереносом); Сообщить("Вторая строка из предыдущей стороки с переносом: |" + ВтораяСтрока);
Результат
В этой статье я разобрал основные функции, которые были в платформе 8.1, в платформе 8.2 и перешли в платформу 8.3 (кроме функции СтрНайти, но это улучшенная версия функция Найти, которая была в старых платформах) . В следующей статье рассмотрим функции работы со строками, которые появились в платформе 8.3:
Функции строк в 1С. Часть 2
Символы в 1С
Статьи о примитивных типах
Примитивный тип Строка
Примитивный тип Булево
Примитивный тип Число
Более подробно и основательно начальные вопросы программирования в 1С есть вы можете изучить в
Книга «Программировать в 1С за 11 шагов»
Изучайте программирование в 1С в месте с моей книгой «Программировать в 1С за 11 шагов»
Книга написана понятным и простым языком — для новичка.
- Книга посылается на электронную почту в формате PDF. Можно открыть на любом устройстве!
- Научитесь понимать архитектуру 1С;
- Станете писать код на языке 1С;
- Освоите основные приемы программирования;
- Закрепите полученные знания при помощи задачника.
О том как разрабатывать под управляемым приложением 1С, читайте в книге Книга «Основы разработки в 1С: Такси»
Отличное пособие по разработке в управляемом приложении 1С, как для начинающих разработчиков, так и для опытных программистов.
- Очень доступный и понятный язык изложения
- Книга посылается на электронную почту в формате PDF. Можно открыть на любом устройстве!
- Поймете идеологию управляемого приложения 1С
- Узнаете, как разрабатывать управляемое приложение;
- Научитесь разрабатывать управляемые формы 1С;
- Сможете работать с основными и нужными элементами управляемых форм
- Программирование под управляемым приложением станет понятным
Промо-код на скидку в 15% — 48PVXHeYu
Эти книги, плюс книга по программированию оперативного учета имеются в едином комплекте: комплект книг по разработке в 1С.
Только для читателей моего блога,
промо-код на скидку в 300 рублей на весь комплект: blog
Если Вам понравился этот урок, был полезен или помог решить какую-нибудь проблему, то Вы можете поддержать мой проект, перечислив любую сумму.
можно оплатить вручную:
Яндекс.Деньги — 410012882996301
Web Money — R955262494655
Вступайте в мои группы:
Вконтакте: https://vk.com/1c_prosto
Фейсбуке: https://www.facebook.com/groups/922972144448119/
ОК: http://ok.ru/group/52970839015518
Твиттер: https://twitter.com/signum2009
Строка — один из примитивных типов данных в системах 1С:Предприятие 8. Переменные с типом строка содержат текст.
Значения переменных типа строка заключаются в двойные кавычки. Несколько переменных данного типа можно складывать.
Пер1 = «Слово 1»;
Пер2 = «Слово 2»;
Пер3 = Пер1 + » « + Пер2;
В итоге Пер3 будет иметь значение «Слово 1 Слово 2″.
Кроме того, в системах 1С:Предприятие 8 предусмотрены функции для работы со строками. Рассмотрим основные:
ВвестиСтроку(<Строка>, <Подсказка>, <Длина>, <Многострочность>) — функция предназначена для вывода диалогового окна, в котором пользователь может указать значение переменной типа Строка. Параметр <Строка> является обязательным и содержит имя переменной, в которую будет записана введенная строка. Параметр <Подсказка> необязательный — это заголовок диалогового окна. Параметр <Длина> необязательный, показывает максимальную длину вводимой строки. По умолчанию равен нулю, что означает неограниченную длину. Параметр <Многострочность> необязательный. Определяет режим ввода многострочного текста: Истина — ввод многострочного текста с разделителями строк; Ложь — ввод простой строки.
Строку можно ввести и, зная код символа в кодировке Unicode:
Символ(<КодСимвола>) — код вводится в виде числа.
Существует и обратная функция, позволяющая узнать код какого-либо символа.
КодСимвола(<Строка>, <НомерСимвола>) — возвращает номер указанного символа в кодировке 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С 8.2 и 8.3
- Строка
- СтрДлина
- СокрЛП, СокрЛ, СокрП
- Лев, Прав, Сред
- ВРег, НРег, ТРег
- Найти
- СтрЧислоВхождений
- СтрЗаменить
- ПустаяСтрока
- СтрЧислоСтрок
- СтрПолучитьСтроку
- Символ, КодСимвола
- Символы
- ЗначениеВСтрокуВнутр, ЗначениеИзСтрокиВнутр
- ВвестиСтроку
- Функции для работы со строками начиная с версии 8.3.6.1977
- СтрШаблон
- СтрСравнить
- СтрНайти
- СтрНачинаетсяС, СтрЗаканчиваетсяНа
- СтрРазделить, СтрСоединить
- Типовые задачи при работе со строками в 1С 8.2 и 8.3
- Сложение строк
- Преобразования строка-число, число-строка
- Кавычки в строке
- Символ переноса строки
- Сравнение строк
- Разделение строки по разделителю
Функции для работы со строками в 1С 8.2 и 8.3
Строка
Функция Строка(x) возвращает текстовое представление переданного ей значения “x”.
&НаКлиенте Процедура ТестСтрока(Команда) Сообщить(Строка(35)); //35 Сообщить(Строка(Истина)); //Да Сообщить(Строка(‘20170425151515’)); //25.04.2017 15:15:15 КонецПроцедуры |
СтрДлина
Функция СтрДлина(x) вычисляет количество символов в строке “x”, учитывая пробелы и ничего не значащие символы.
&НаКлиенте Процедура ТестСтрока(Команда) Сообщить(СтрДлина(«тестовая строка»)); //15 КонецПроцедуры |
СокрЛП, СокрЛ, СокрП
Функции СокрЛП(x), СокрЛ(x) и СокрП(x) убирают пробелы и ничего не значащие символы у переданной строки “x” с обеих сторон, слева и справа соответственно.
&НаКлиенте Процедура ТестСтрока(Команда) Сообщить(СокрЛ(» тест «)); //»тест « Сообщить(СокрП(» тест «)); //» тест» Сообщить(СокрЛП(» тест «)); //»тест» КонецПроцедуры |
Лев, Прав, Сред
Функции Лев(x, y) и Прав(x, y) возвращают количество символов “y” с левого или правого края переданной им строки “x”. А функция Сред(x, y, z) возвращает количество символов “z” из указанного места “y” переданной строки “x”.
&НаКлиенте Процедура ТестСтрока(Команда) Сообщить(Лев(«тестовая строка», 5)); //»тесто» Сообщить(Прав(«тестовая строка», 5)); //»трока» Сообщить(Сред(«тестовая строка», 5)); //»овая строка» Сообщить(Сред(«тестовая строка», 5, 5)); //»овая» КонецПроцедуры |
ВРег, НРег, ТРег
Функция ВРег(x) преобразует все символы переданной строки “x” в верхний регистр, НРег(x) — в нижний регистр, ТРег(x) — первую букву каждого слова преобразует в верхний регистр, а все остальные нижний.
&НаКлиенте Процедура ТестСтрока(Команда) Сообщить(ВРег(«Верхний регистр»)); //ВЕРХНИЙ РЕГИСТР Сообщить(НРег(«Нижний регистр»)); //нижний регистр Сообщить(ТРег(«Каждое слово с заглавной буквы»)); //Каждое Слово С Заглавное Буквы КонецПроцедуры |
Найти
Функция Найти(x, y) возвращает номер первого символа первого вхождения подстроки “y” в строку “x”, если, конечно, такое вхождение найдено (при этом нумерация начинается с 1). Если же вхождений не найдено, то функция возвращает 0.
&НаКлиенте Процедура ТестСтрока(Команда) Сообщить(Найти(«тестовая строка», «с»)); //3 Сообщить(Найти(«тестовая строка», «м»)); //0 КонецПроцедуры |
СтрЧислоВхождений
Функция СтрЧислоВхождений(x, y) возвращает количество вхождений подстроки “y” в строку “x”.
&НаКлиенте Процедура ТестСтрока(Команда) Сообщить(СтрЧислоВхождений(«тестовая строка», «т»)); //3 КонецПроцедуры |
СтрЗаменить
Функция СтрЗаменить(x, y, z) позволяет в указанной строке “x” заменить все вхождения одной подстроки “y” на другую “z”, результатом выполнения функции будет строка с проведенными заменами.
&НаКлиенте Процедура ТестСтрока(Команда) Сообщить(СтрЗаменить(«тест1,тест2,тест3,тест4», «,», » «)); //тест1 тест2 тест3 тест4 КонецПроцедуры |
ПустаяСтрока
Функция ПустаяСтрока(x) сравнивает переданную ей строку “x” с пустой и возвращает результат этого сравнения — Истина или Ложь, при этом строка состоящая из пробелов и/или ничего не значащих символов приравнивается к пустой.
&НаКлиенте Процедура ТестСтрока(Команда) Сообщить(ПустаяСтрока(» «)); //Да Сообщить(ПустаяСтрока(«тестовая строка»)); //Нет КонецПроцедуры |
СтрЧислоСтрок
Функция СтрЧислоСтрок(x) возвращает количество строк в многострочном тексте “x”.
&НаКлиенте Процедура ТестСтрока(Команда) МногострочныйТекст = СтрЗаменить(«тест1,тест2,тест3,тест4», «,», Символы.ПС); //тест1 тест2 тест3 тест4 Сообщить(СтрЧислоСтрок(МногострочныйТекст)); //4 КонецПроцедуры |
СтрПолучитьСтроку
Функция СтрПолучитьСтроку(x, y) возвращает строку с номером “y” из многострочного текста “x”.
&НаКлиенте Процедура ТестСтрока(Команда) МногострочныйТекст = СтрЗаменить(«тест1,тест2,тест3,тест4», «,», Символы.ПС); //тест1 тест2 тест3 тест4 Сообщить(СтрПолучитьСтроку(МногострочныйТекст, 2)); //тест2 КонецПроцедуры |
Символ, КодСимвола
Функция Символ(x) получает код символа “x” и возвращает строку содержащую соответствующий символ (в кодировке Unicode). Функция КодСимвола(x) делает обратное действие — получает символ “x” и возвращает его код в кодировке Unicode. Таблицу символов Unicode можно найти, например, тут.
&НаКлиенте Процедура ТестСтрока(Команда) Сообщить(Символ(1046)); //Ж Сообщить(КодСимвола(«Ж»)); //1046 КонецПроцедуры |
Символы
Это не функция, а набор наиболее часто используемых специальных символов, состоит из:
- ВК (CR) — возврат каретки;
- ВТаб (VTab) — вертикальная табуляция;
- НПП (NBSp) — неразрывный пробел;
- ПС (LF) — перевод строки;
- ПФ (FF) — перевод формы;
- Таб (Tab) — символ горизонтальной табуляции.
ЗначениеВСтрокуВнутр, ЗначениеИзСтрокиВнутр
Функция ЗначениеВСтрокуВнутр(x) возвращает системное строковое представление значения “x”. Функция ЗначениеИзСтрокиВнутр(x) проделывает обратную операцию и возвращает значение, полученное из строкового системного представления “x”. Обе эти функции используются для сохранения функциональной совместимости с версией 7.7. Использование для каких-либо других целей не рекомендуется. В новых версиях платформы данные функции не работают (хотя их описание присутствует в справке).
ВвестиСтроку
Функция ВвестиСтроку(x, y, z, w) вызывает диалог для ввода строки, введенная строка записывается в переменную “x”, кроме этого можно указать подсказку “y”, длину вводимой строки “z”, отметку многострочности вводимого текста “w”. Функция возвращает Истина — если ввод был произведен, Ложь — если пользователь отказался от ввода. Выглядит это окно примерно так:
&НаКлиенте Процедура ТестСтрока(Команда) НовСтр = «»; ВвестиСтроку(НовСтр, «Введите имя», 50, Ложь); КонецПроцедуры |
Функции для работы со строками начиная с версии 8.3.6.1977
В обновлении 8.3.6.1977 набор функций для работы со строками был серьезно расширен.
СтрШаблон
Функция СтрШаблон(x, y1-y10) является аналогом функции printf из языка C++ и многих других. В исходной строке “x” можно использовать маркеры подстановки “%1, %2..%10” (не более 10), которые впоследствии заменяются на соответствующие “y1, y2..y10”. Функция возвращает результат этой замены. Если количество маркеров замены не соответствует количеству параметров “y1, y2..y10”, то генерируется ошибка.
&НаКлиенте Процедура ТестСтрока(Команда) Сообщить(СтрШаблон(«%1,%2,%3,%4,%5,%6,%7,%8,%9,%10», 101, 102, 103, 104, 105, 106, 107, 108, 109, 110)); //101,102,103,104,105,106,107,108,109,110 КонецПроцедуры |
СтрСравнить
Функция СтрСравнить(x, y) выполняет лексикографическое сравнение переданных ей строк “x” и “y” и возвращает одно из трех значений:
- 0 — строки равны;
- 1 — строка “x” больше строки “y”;
- -1 — строка “x” меньше строки “y”.
&НаКлиенте Процедура ТестСтрока(Команда) Сообщить(СтрСравнить(«ааа», «ааб»)); //-1 КонецПроцедуры |
СтрНайти
Функция СтрНайти(x, y, z, w, v) призвана полность заменить функцию Найти(), так как она ее полность повторяет (строка “x” и подстрока поиска “y”), а также позволяет указать необязательные дополнительные параметры поиска: направление поиска “z”, начальную позицию “w” и номер вхождения “v”.
&НаКлиенте Процедура ТестСтрока(Команда) Сообщить(СтрНайти(«тестовая строка», «т», НаправлениеПоиска.СНачала)); //1 Сообщить(СтрНайти(«тестовая строка», «т», НаправлениеПоиска.СНачала, 2)); //4 Сообщить(СтрНайти(«тестовая строка», «т», НаправлениеПоиска.СНачала,, 3)); //11 Сообщить(СтрНайти(«тестовая строка», «т», НаправлениеПоиска.СКонца)); //11 КонецПроцедуры |
СтрНачинаетсяС, СтрЗаканчиваетсяНа
Функции СтрНачинаетсяС(x, y) и СтрЗаканчиваетсяНа(x, y) проверяют начинается/заканчиватся ли строка “x” с/на подстроку “y” и возвращают результат — Истина или Ложь.
&НаКлиенте Процедура ТестСтрока(Команда) Сообщить(СтрНачинаетсяС(«тестовая строка», «т»)); //Да Сообщить(СтрНачинаетсяС(«тестовая строка», «п»)); //Нет Сообщить(СтрЗаканчиваетсяНа(«тестовая строка», «а»)); //Да Сообщить(СтрЗаканчиваетсяНа(«тестовая строка», «б»)); //Нет КонецПроцедуры |
СтрРазделить, СтрСоединить
Функция СтрРазделить(x, y, z) разделяет строку “x” по разделителю “y” и возвращает получившийся массив строк, параметр “z” позволяет указать, нужно ли включать в этот массив пустые строки. Функция СтрСоединить(x, y) выполняет обратную задачу — склеивает массив строк “x” в одну строку через разделитель “y” (если этот разделитель указан).
&НаКлиенте Процедура ТестСтрока(Команда) МассивСтрок = СтрРазделить(«тест1,тест2,тест3,тест4», «,», Ложь); Сообщить(МассивСтрок[0]); //тест1 Сообщить(СтрСоединить(МассивСтрок, «+»)); //тест1+тест2+тест3+тест4 КонецПроцедуры |
Типовые задачи при работе со строками в 1С 8.2 и 8.3
Сложение строк
В языке 1С работает сложение как непосредственно строк, так и сложение переменных:
&НаКлиенте Процедура ТестСтрока(Команда) Мама = «Мама «; Мыла = «мыла «; Раму = «раму»; Сообщить(«Мама «+»мыла «+»раму»); //Мама мыла раму Сообщить(Мама+Мыла+Раму); //Мама мыла раму Сообщить(«Мама «+Мыла+»раму»); //Мама мыла раму КонецПроцедуры |
Преобразования строка-число, число-строка
Помимо специальных функций:
- Строка(x) — подробно описана выше;
- Число(x) — подробно описана в статье о числах в 1С.
Кроме этого прекрасно работает приведение типов «на лету», тут все завит от того, что с чем складывает (какой тип данных идет первым), в случае если приведение типов невозможно, будет вызвана исключительная ситуация и показана соответствующая ошибка:
&НаКлиенте Процедура ТестСтрока(Команда) Сообщить(6+»6″); //12 — Число Сообщить(«6″+6); //66 — Строка Сообщить(«»+6+»6»); //66 — Строка КонецПроцедуры |
Кавычки в строке
Одинарные кавычки не нуждаются в каком-либо экранировании, а для использования внутри строки двойных кавычек каждую двойную кавычку нужно продублировать:
&НаКлиенте Процедура ТестСтрока(Команда) Сообщить(«‘Мама’ «»мыла»» ‘раму'»); //’Мама’ «мыла» ‘раму’ Сообщить(«»»»); //» КонецПроцедуры |
Символ переноса строки
Символ переноса строки (и все остальные специальные символы) ведут себя точно также как и простые строки, т.е. могут складываться с другими строками. При сложении символа переноса строк с другими строками получается много строчный текст, для работы с которым существуют специальные функции описанные выше:
&НаКлиенте Процедура ТестСтрока(Команда) МногострочныйТекст = «тест1″+Символы.ПС+»тест2″+Символы.ПС+»тест3″+Символы.ПС+»тест4»; КонецПроцедуры |
Сравнение строк
При сравнении строк будет разумно (в зависимости от задачи, конечно) обрезать все не значащие символы и привести строки к одному регистру:
&НаКлиенте Процедура ТестСтрока(Команда) Строка1 = » тЕсТ «; Строка2 = » ТЕсТ «; Если НРег(СокрЛП(Строка1)) = НРег(СокрЛП(Строка2)) Тогда Сообщить(«Строки равны»); КонецЕсли; КонецПроцедуры |
Разделение строки по разделителю
Для того чтобы разбить строку по разделителю в языке 1С существует два способа, старый:
&НаКлиенте Процедура ТестСтрока(Команда) СтрокаСРазделителями = «тест1,тест2,тест3,тест4»; МногострочныйТекст = СтрЗаменить(СтрокаСРазделителями, «,», Символы.ПС); Для Счетчик = 1 По СтрЧислоСтрок(МногострочныйТекст) Цикл Сообщить(СтрПолучитьСтроку(МногострочныйТекст,Счетчик)); КонецЦикла; КонецПроцедуры |
Начиная с версии 8.3.6.1977 в языке 1С существует специальная функция позволяющая разложить строку по разделителю в массив строк:
&НаКлиенте Процедура ТестСтрока(Команда) МассивСтрок = СтрРазделить(СтрокаСРазделителями, «,»); Для Каждого ТекСтрока Из МассивСтрок Цикл Сообщить(ТекСтрока); КонецЦикла; КонецПроцедуры |
Если Вы нашли ошибку или неточность, пожалуйста, выделите фрагмент текста и нажмите Ctrl+Enter.
Загрузка…
Вступайте в мою группу помощник программиста.
В ней мы обсуждаем программирование в 1С.
&НаКлиенте Процедура ВыполнитьКод(Команда) /// Как найти длину строки в 1с 8.3, 8.2 Сообщить(СтрДлина("123456789")); // 9 /// Как взять часть строки в 1с 8.3, 8.2 // как взять N символов слева Строка = "Иван Грозный"; Сообщить(Лев(Строка, 4)); // Иван // как взять N символов справа Строка = "Иван Грозный"; Сообщить(Прав(Строка, 7)); // Грозный // как взять строку из середины Строка = "Мама, папа, я."; // возьмём начиная с 7 индекса 4 символа Сообщить(Сред(Строка, 7, 4)); // папа /// Как найти подстроку в 1с 8.3, 8.2 Строка = "Привет, мир!"; Индекс = СтрНайти(Строка, "Привет"); // 1, строки индексируются с единицы /// Как узнать число вхождений подстроки в строку в 1с 8.3, 8.2 Сообщить(СтрЧислоВхождений("я, я и ещё раз я.", "я")); // 3 /// Как заменить подстроку в строке в 1с 8.3, 8.2 Сообщить(СтрЗаменить("Идёт сильный дождь.", "дождь", "снег")); /// Как проверить на пустую строку в 1с 8.3, 8.2 Если ПустаяСтрока(" ") Тогда Сообщить("Строка пустая, то есть не содержит значащих символов."); КонецЕсли; /// Как удалить незначащие символы из строки в 1с 8.3, 8.2 // слева Сообщить(СокрЛ(" из лесу ёлочку ")); // "из лесу ёлочку " // справа Сообщить(СокрП(" из лесу ёлочку ")); // " из лесу ёлочку" // с двух сторон Сообщить(СокрЛП(" из лесу ёлочку ")); // "из лесу ёлочку" /// Как вставить в строку перенос в 1с 8.3, 8.2 Строка = "Первая строка" + Символы.ПС + "Вторая строка" + Символы.ПС + "Третья строка"; /// Как работать с многострочными строками (нумерация с /// единицы) в 1с 8.3, 8.2 Сообщить(СтрЧислоСтрок(Строка)); // 3 Сообщить(СтрПолучитьСтроку(Строка, 2)); // "Вторая строка" /// Верхний, нижний и титульный регистры в 1с 8.3, 8.2 Сообщить(ВРег("россия - родина моя!")); // РОССИЯ - РОДИНА МОЯ! Сообщить(НРег("МИР, ТРУД, МАЙ!")); // мир, труд, май Сообщить(ТРег("мама мыла раму")); // Мама Мыла Раму /// Как получить код символа строки в 1с 8.3, 8.2 // код отдельного символа: // туда Сообщить(КодСимвола("A")); // 65 // и обратно Сообщить(Символ(65)); // "A" // код третьего символа в строке Сообщить(КодСимвола("ABC", 3)); //67 // код первого символа в строке КодПервогоСимволаФамилии = КодСимвола("Грозный"); Сообщить(КодПервогоСимволаФамилии); // 1043, потому что Unicode. /// Как преобразовать строку в число в 1с 8.3, 8.2 Сообщить(Число("125.36")); // 125,36 Сообщить(Число("125,36")); // 125,36 /// Как преобразовать число в строку в 1с 8.3, 8.2 Сообщить(25 + "10"); // 35 // если же нужно сложить число и строку как строки Сообщить(Строка(25) + "10"); // 2510 /// Как разбить строку с разделителями в 1с 8.3, 8.2 Разделитель = ","; Строки = СтрЗаменить("январь, февраль, март", Разделитель, Символы.ПС); Для Индекс = 1 По СтрЧислоСтрок(Строки) Цикл Сообщить(СтрПолучитьСтроку(Строки, Индекс)); КонецЦикла; КонецПроцедуры &НаСервереБезКонтекста Процедура ВыполнитьКодНаСервере() /// Как сериализовать значение в строку в 1с 8.3, 8.2 Массив = Новый Массив(3); Массив[0] = 1; Массив[1] = "Земля"; Массив[2] = 3.14; Стр = ЗначениеВСтрокуВнутр(Массив); Сообщить(Стр); //{"#",51e7a0d2-530b-11d4-b98a-008048da3034, // {3, // {"N",1}, // {"S","Земля"}, // {"N",3.14} // } //} /// Как десериализовать значение из строки в 1с 8.3, 8.2 МассивКопия = ЗначениеИзСтрокиВнутр(Стр); Элемент = МассивКопия[1]; Сообщить(Элемент); // Земля КонецПроцедуры /// Скачать и выполнить эти примеры на компьютере