В данной статье собраны примеры использования функций для работы со строковыми значениями в 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С
Такая задача часто возникает, когда в печатной форме, в отчете или на экране необходимо вывести значения, например через запятую. Можно перебрать все элементы и добавить запятую при помощи конкатенации строк, но в этом случае нужно анализировать, не является ли символ последним, чтобы не добавить лишнюю запятую.
Но есть способ проще – использование метода СтрСоединить. При этом после последнего элемента разделитель не добавляется. Также, обратите внимание, что в качестве разделителя может выступать любое строковое значение – запятая с пробелом, или слово, или целая фраза.
//Собрать строку из массива
МассивСтрок = Новый Массив;
МассивСтрок.Добавить("один");
МассивСтрок.Добавить("два");
МассивСтрок.Добавить("три");
ИтоговаяСтрока = СтрСоединить(МассивСтрок, ", "); // "один, два, три"
ИтоговаяСтрока = СтрСоединить(МассивСтрок, ", так сказать, ")
// "один, так сказать, два, так сказать, три"