Получить консультацию

Строки в языке 1С. Примеры работы

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

Содержание

Функции для работы со строками в языке 1С

Значения типа Строка широко применяются в языке 1С. Литералом строкового типа является набор символов, заключенный в двойные кавычки.

//Пустая строка
ПустаяСтрока = "";

Удаление лишних пробелов

//Часто при обработке полученных значений требуется очистить их от лишних пробелов

СтрокаБезПробеловСлева = СокрЛ("  строка с пробелами  "); // "строка с пробелами  "
СтрокаБезПробеловСправа = СокрП("  строка с пробелами  "); // "  строка с пробелами"
СтрокаБезПробеловСлеваИСправа = СокрЛП("  строка с пробелами  "); // "строка с пробелами"

Преобразование регистра строки

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

//Для преобразования регистра строки существуют следующие функции
//ВРег преобразует строковое значение в верхний регистр, НРег - в нижний, а ТРег - в титульный

СтрокаЗаглавными = ВРег("маленькая Строка"); // "МАЛЕНЬКАЯ СТРОКА"
СтрокаСтрочными = НРег("БОЛЬШАЯ Строка"); // "Большая строка"
СтрокаТитульными = ТРег("каждое слово с большой буквы"); // "Каждое Слово С Большой Буквы"

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

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

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

РезультатСравнения = СтрСравнить("Первая строка", "Вторая строка"); //1, т.к. первая строка больше второй
РезультатСравнения = СтрСравнить("Первая строка", "Последняя строка"); //-1, т.к. первая строка меньше второй
РезультатСравнения = СтрСравнить("Одинаковые строки", "Одинаковые строки"); //0, т.к. строки равны
//Кроме того, строки можно сравнивать при помощи логических операторов
//Строки сравниваются посимвольно, начиная с первого символа согласно алфавитному порядку
//Символы в верхнем регистре считаюся больше аналогичных символов в нижнем
//При этом длина сравниваемых строк не учитывается. Более длинная строка может быть меньше более короткой

РезультатСравнения = "Первая строка" > "Вторая строка"; // Истина
РезультатСравнения = "Первая строка" > "ПЕрвая строка"; // Ложь
РезультатСравнения = "длинная большая строка" < "Короткая строка"; //Истина

Функции для работы с подстроками

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

//В языке 1С есть довольно обширный инструментарий для поиска нужного текста в строке.
//Особого внимания заслуживает метод СтрНайти. Внимательно изучите его параметры, и он не раз вас выручит!

РезультатПоиска = СтрНайти("Какой-то длинный наш текст", "наш",,,2); // 18 - Позиция первого знака найденной строки

// более сложный пример - найдем подстроку, начиная со второго вхождения
РезультатПоиска = СтрНайти("Какой-то длинный наш текст, наш", "наш",,,2); // 29
// метод поддерживает также и обратный поиск, и поиск начиная с определенной позиции
РезультатПоиска = СтрНайти("один два три четыре три два один", "три",НаправлениеПоиска.СКонца, 15); // 10
РезультатПоиска = СтрНайти("один два три четыре три два один", "три",НаправлениеПоиска.СКонца, 30); // 21

//В строке можно не только найти какую-то подстроку, но и определить, сколько раз она встречается
КоличествоВхождений = СтрЧислоВхождений("один два три четыре три два один", "три"); // 2

//Можно проверить, начинается ли строка с искомой подстроки, или же заканчивается
СтрокаНачинаетсяСНужнойПодстроки = СтрНачинаетсяС("один два три", "од"); // Истина
СтрокаЗаканчиваетсяНаНужнуюПодстроку = СтрЗаканчиваетсяНа("один два три", "ри"); // Истина

//Средствами 1С можно не только найти, но и заменить найденную подстроку на другую
РезультатЗамены = СтрЗаменить("один два три", "два", "КВА"); // один КВА три

Функции для работы с символами в 1С

Используя методы языка 1С, можно найти часть строки нужной длины, чтобы далее использовать фрагменты строки в алгоритмах. Например, первые 4 символа ИНН — это код налогового органа, 5 и 6 символы  — код причины постановки на учет, а последний символ — контрольный разряд. Эти фрагменты называются подстроками.

//Язык 1С позволяет получать фрагменты строки, и оперировать со строкой на уровне символов
ПодстрокаСНачала = Лев("Длинная строка", 4); // Длин
ПодстрокаСКонца = Прав("Длинная строка", 4); // рока
//Обратите внимание, что метод Сред возвращает подстроку включая номер начального символа
ПодстрокаВСередине = Сред("Длинная строка", 4, 4); // нная
//Также обратите внимание, что если длина искомой подстроки с учетом начального символа
//превышает длину исходной строки, то метод вернет подстроку меньшей длины
ПодстрокаВСередине = Сред("Длинная", 5, 8); // ная

ДлинаСтроки = СтрДлина("абгвд"); // 5

//Символ в кодировке Unicode
СимволПоКоду = Символ(123); // "{"

КодСимвола = КодСимвола("Ъ"); // 1066

Работа с многострочной строкой в 1С

//В языке 1С есть средства для работы с многострочными значениями типа Строка
//Такие значения могут быть как в результате ввода пользователем, так и путем программного
//добавления символов переноса строки
МногострочнаяСтрока = "Многострочная
|Строка";
ВтораяСтрока = СтрПолучитьСтроку(МногострочнаяСтрока, 2); // "Строка"
//Заменим пробелы на перенос строки
МногострочнаяСтрока = СтрЗаменить("Раз два три", " ", Символы.ПС);
ТретьяСтрока = СтрПолучитьСтроку(МногострочнаяСтрока, 3); // "три"
//Получим программно число строк
ЧислоСтрок = СтрЧислоСтрок(МногострочнаяСтрока); // 3

Получение строк из других типов значений

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

//Значения строкового типа можно получить из других значений
//Самый простой способ - это явное преобразование типа к строке:
//Обратите внимание, что добавляется разделитель разрядов - пробел
ЧислоСтрокой = Строка(1234); // "1 234"
//Все преобразования происходят, учитывая язык локализации
БулевоСтрокой = Строка(Истина); // "Да"
ДатаСтрокой = Строка('20201231'); // "31.12.2020 0:00:00"

//Следующий способ - это использование функции Формат
ЧислоФорматированное = Формат(1234, "Л=en_US"); // "1,234"
ДатаФорматированная = Формат('20201231',"Л=en_US"); // "12/31/2020 12:00:00 AM"

//Также, возможно неявное преобразование
Сообщить(1234); // "1 234", т.к. метод Сообщить неявно преобразовывает все параметры в строку
Сообщить('20201231'); // "31.12.2020 0:00:00"

НеявнаяСтрока = "снова " + '20201231'; // "снова 31.12.2020 0:00:00"

Часто встречающиеся задачи при работе со строками

Как объединить несколько строк в одну в 1С?

//Конкатенация (объединение) нескольких строк в одну
ПерваяЧасть = "Первая часть";
ВтораяЧасть = "Вторая часть";
ИтоговаяСтрока = ПерваяЧасть + " и " + ВтораяЧасть; // "Первая часть и Вторая часть"

Как подставить параметры в строку? Использование СтрШаблон

//Подставить параметры в строку
ИтоговаяСтрока = СтрШаблон("Параметр1: %1, Параметр2: %2", 123, "тест");
// получим "Параметр1: 123, Параметр2: тест"

//Второй вариант - использовать СтрЗаменить.
СтрокаШаблонЗапроса = "Выбрать &Параметр1 из &Параметр2 как Таблица";
СтрокаШаблонЗапроса = СтрЗаменить(СтрокаШаблонЗапроса, "&Параметр1", "Наименование");
СтрокаШаблонЗапроса = СтрЗаменить(СтрокаШаблонЗапроса, "&Параметр2", "Справочник.Склады");
// получим "Выбрать Наименование из Справочник.Склады как Таблица"

Как в 1С вставить кавычки в строку?

//Использование кавычек в строке 1С
//для этого внутри строки следует использовать двое кавычек
СтрокаСКавычками = "ООО ""Рога и копыта"""; // ООО "Рога и копыта"

Как проверить, что строка не заполнена? Проверка на пустую строку

//Проверить, что строка пустая
ЭтоПустаяСтрока = Не ЗначениеЗаполнено("   "); // Истина
//Многострочная строка без значащих символов также будет считаться пустой
ЭтоПустаяСтрока = ПустаяСтрока("
|
|"); // Истина

//Обратите внимание, что сравнивать строку с пустыми кавычками не верно
СтрокаДляПроверки = "   ";
ЭтоПустаяСтрока = СтрокаДляПроверки = ""; // Ложь. Но при этом строка пустая!
//Использовать такое сравнение имеет смысл
//если мы хотим найти именно такие псевдопустые строки,
//например, в ходе разбора файла или парсинга ответа с сайта.

Превратить строку с разделителями в массив в 1С

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

//Преобразовать строку в массив
СтрРазделить("1,2,3,,5",",",Ложь); // Массив ["1", "2", "3", "5"]
СтрРазделить("1,2,3,,5",","); // Массив ["1", "2", "3", "","5"]
//Далее можно работать как обычно с массивом, в котором элементами будут строковые значения

Перечислить значения массива в виде строки в 1С

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

//Собрать строку из массива
МассивСтрок = Новый Массив;
МассивСтрок.Добавить("один");
МассивСтрок.Добавить("два");
МассивСтрок.Добавить("три");
ИтоговаяСтрока = СтрСоединить(МассивСтрок, ", "); // "один, два, три"
ИтоговаяСтрока = СтрСоединить(МассивСтрок, ", так сказать, ")
// "один, так сказать, два, так сказать, три"

Оставьте комментарий

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

15 + 2 =

К НАЧАЛУ