Для получения особых символов переноса строки, табуляции и др. есть перечисление Символы
Результат = СокрЛП(" Infostart "); // "Infostart"
Результат = СокрЛ(" Infostart "); // "Infostart "
Результат = СокрП(" Infostart "); // " Infostart"
Проверка пустая строка (т.е. строка не содержит значимых символов пробел, табуляция, перенос строки не учитываются)
Если Не ЗначениеЗаполнено(Пример) Тогда
Сообщить("Строка пустая");
КонецЕсли;
или
Если ПустаяСтрока(Пример) Тогда
Сообщить("Строка пустая");
КонецЕсли;
Получение части строки (Лев, Прав, Сред)
Результат = Лев("Infostart", 4); // "Info"
Результат = Прав("Infostart", 5); // "start"
Результат = Сред("Infostart", 5, 3); // "sta"
Результат = Сред("Infostart", 5); // "start"
Изменение регистра (ВРег - преобразует в верхний регистр, НРег - нижний, ТРег - титульный)
Результат = ВРег("Infostart"); // "INFOSTART"
Результат = НРег("Infostart", 5); // "infostart"
Результат = ТРег("infostart event"); // "Infostart Event"
Работа с многострочными строками (СтрПолучитьСтроку, СтрЧислоСтрок)
Получение количество строк в строке
Строка = "Первая строка
|Вторая строка
|Третья строка";
Результат = СтрЧислоСтрок (Строка); //3
Получение строки по номеру
Строка = "Первая строка
|Вторая строка";
Результат = СтрПолучитьСтроку(Строка, 2); // "Вторая строка"
Еще иногда требуется функция проверки многострочная строка или нет
// Проверяет строка многострочная?
//
// Параметры:
// Строка - Строка - Проверяемая строка
//
// Возвращаемое значение:
// Булево - Истина, если строка многострочная
//
Функция МногострочнаяСтрока(Строка) Экспорт
Возврат Булево(СтрНайти(Строка, Символы.ПС));
КонецФункции
Поиск и замена вхождений строки (СтрНайти, СтрЗаменить, СтрЧислоВхождений)
Проверка осуществляется с учетом регистра. Поддерживается с платформы 8.3.6.Проверка вхождения строки
ПроверяемаяСтрока = "Infostart Event";
Если СтрНайти(ПроверяемаяСтрока, "Event") Тогда
Сообщить("Слово Event входит в строку");
КонецЕсли;
СтрНайти полезная и часто используемая функция предоставляет возможности
- Поиск в разных направлениях (с начала, с конца);
- Поиск с указанной позиции;
- Поиск вхождения с указанным номером (второе, третье и т.д.).
// Поиск позиции вхождения строки
Результат = СтрНайти("Infostart Event 2018", " "); // 10
// Поиск с конца
Результат = СтрНайти("Infostart Event 2018", " ", НаправлениеПоиска.СКонца); // 16
// Поиск с начальной позиции
Результат = СтрНайти("Infostart Event 2018", " ", , 12); // 16
Замена строк
// Замена подстроки
Результат = СтрЗаменить("Infostart Event 2018", "2018", "2019"); //"Infostart Event 2019"
// Удаление пробелов
Результат = СтрЗаменить("Infostart Event 2018", " ", ""); //"InfostartEvent2018"
Вычисление числа вхождений
Результат = СтрЧислоВхождений("Infostart Event 2018", " "); // 2
Сообщить("Пробел встречается " + Результат + " р.");
Проверки строка начинается, заканчивается (СтрНачинаетсяС, СтрЗаканчиваетсяНа)
Поддерживается с платформы 8.3.6.
// Проверяет что строка начинается со слова "Infostart"
Результат = СтрНачинаетсяС("Infostart Event 2018", "Infostart"); // Истина
// Проверяет что строка заканчивается слова "Event"
Результат = СтрЗаканчиваетсяНа("Infostart Event 2018", "Event"); // Ложь
Сравнение строк СтрСравнить
Строки сравниваются посимвольно по коду символа, для ясности несколько примеров "Строка12" < "Строка2", "8.3.9.2000" > "8.3.8", "8.3.9.2000" > "8.3.10"
С учетом регистра можно сравнить строки через знаки сравнения как в примерах
Сравнение без учета регистра можно произвести функций СтрСравнить. Поддерживается с платформы 8.3.6.
Возвращает:
- -1 - первая строка меньше второй
- 1 - первая строка больше второй.
- 0 - первая строка равна второй
Результат = СтрСравнить("Infostart Event 2018", "Infostart Event 2019"); // -1
Следует обратить внимание на Особенности сравнения строк при работе с базой данных
Преобразование в строку (Строка, Формат)
В языке 1С есть автоматическое преобразование типа когда все части выражения приводятся к типу первого выражения
Число = 1000;
Результат = "Число: " + Число; // "Число: 1 000"
Преобразование функцией Строка
Число = 1000.25;
Результат = "Число: " + Строка(Число); // "Число: 1 000,25"
при преобразовании появляется символ неразрывный пробел, а он обычно не нужен
"Правильнее" будет преобразовывать функцией формат, которая приводит к строке простые типы и можно воспользоватся конструктором
Число = 1000.25;
Результат = "Число: " + Формат(Число, "ЧГ="); // "Число: 1000,25"
Строка на разных языках НСтр
Результат = НСтр("ru = 'Привет!'; en = 'Hello!'"); // Результат зависит от языка
Форматирование строки по шаблону СтрШаблон. Поддерживается с платформы 8.3.6.
Очень полезная функция которая позволяет избежать соединения строк и сделать текст более читабельным
Число = 1000.25;
Результат = СтрШаблон("Число: %1, Дата: %2", Число, Дата(1983,4,4)); // "Число: 1 000,25, Дата: 04.04.1983 00:00:00"
Функции СтрСоединить, СтрРазделить. Поддерживается с платформы 8.3.6.
Очень полезные функции улучшают читаемость кода.
СтрРазделить удобна когда необходимо разобрать строку с разделителями, например CSV файл, разбор текста на слова, строки
Результат = СтрРазделить("Infostart Event 2018", " "); // Массив с элементами [0] = "Infostart", [1] = "Event ", [2] = "2018"
Аналогично, только наоборот работает функция СтрСоединить, преобразуя массив к строке.
Другие функции работы со строками, которые могут быть полезны
СтрСократить (Текст, Количество, Многострочная = Ложь) - сокращает текст до заданной длины заменяя окончание на ...
Результат = СтрСократить("Infostart Event 2018", 10); // "Infosta..."
ЭтоКорректныйИдентификатор (Строка) - Проверяет является ли строка корректным идентификатором, строка вида СуммаКонтрагента, _Идентификатор
Результат = ЭтоКорректныйИдентификатор("СуммаДокумента"); // Истина
Результат = ЭтоКорректныйИдентификатор("Сумма документа"); // Ложь
Когда в 1с встает вопрос разбора большого текста это уже зоопарк из СтрДлина, Сред, СтрНайти для повышения читаемости программ для подобных задач использую свои функции: РазборПрочитатьЦелоеЧисло, РазборПрочитатьШестнадцатеричноеЧисло, РазборПрочитатьНезначимые, РазборПрочитатьИдентификатор,
РазборПропуститьНаборСимволов, РазборПрочитатьСимвол, РазборПрочитатьДоСимвола, РазборНайтиТекст
Строка = "КоличествоДокументов = 1000";
Индекс = 1;
Идентификатор = РазборПрочитатьИдентификатор(Строка, Индекс); // "КоличествоДокументов"
РазборПрочитатьНезначимые(Строка, Индекс);
РазборПропуститьНаборСимволов(Строка, "=");
РазборПрочитатьНезначимые(Строка, Индекс);
Значение = РазборПрочитатьЦелоеЧисло(Строка, Индекс); //1000 (Число)
Код модуля
#Область ПрограммныйИнтерфейс
// Проверяет является ли строка корректным идентификатором, строка вида СуммаКонтрагента, _Идентификатор
//
// Параметры:
// Строка - Строка - Проверяемая строка
//
// Возвращаемое значение:
// Булево - Истина, идентификатор корректный
//
Функция ЭтоКорректныйИдентификатор(Строка) Экспорт
ПервыйСимволСимволы = НаборСимволовРусскиеЛатинскиеБуквы() + "_";
ПоследующиеСимволы = НаборСимволовРусскиеЛатинскиеБуквы() + НаборСимволовЦифры() + "_";
Если ПустаяСтрока(Строка) ИЛИ Не СтрНайти(ПервыйСимволСимволы, Лев(Строка, 1)) Тогда
Возврат Ложь;
КонецЕсли;
Для Сч = 2 По СтрДлина(Строка) Цикл
Символ = Сред(Строка, Сч, 1);
Если Не СтрНайти(ПоследующиеСимволы, Символ) Тогда
Возврат Ложь;
КонецЕсли;
КонецЦикла;
Возврат Истина;
КонецФункции
// Чтение целого число из строки
//
// Параметры:
// Строка - Строка - Разбираемая строка
// НачальныйИндекс - Число - Начальный индекс
// Направление - НаправлениеПоиска - Направление поиска (по умолчанию: НаправлениеПоиска.СНачала)
// СмещатьИндекс - Булево - Смещать индекс (по умолчанию: Истина)
//
// Возвращаемое значение:
// Число - Прочитанное целое число
//
Функция РазборПрочитатьЦелоеЧисло (Строка, НачальныйИндекс = Неопределено, Направление = Неопределено, СмещатьИндекс = Истина) Экспорт
Если Направление = НаправлениеПоиска.СКонца Тогда
Если НачальныйИндекс = Неопределено Тогда
НачальныйИндекс = СтрДлина(Строка);
КонецЕсли;
Индекс = НачальныйИндекс;
Пока Индекс > 0 Цикл
Если Не СтрНайти(НаборСимволовЦифры(), Сред(Строка, Индекс, 1)) Тогда
Прервать;
КонецЕсли;
Индекс = Индекс - 1;
КонецЦикла;
Результат = Сред(Строка, Индекс + 1, НачальныйИндекс - Индекс);
Иначе
Если НачальныйИндекс = Неопределено Тогда
НачальныйИндекс = 1;
КонецЕсли;
Для Индекс = НачальныйИндекс По СтрДлина(Строка) Цикл
Если Не СтрНайти(НаборСимволовЦифры(), Сред(Строка, Индекс, 1)) Тогда
Прервать;
КонецЕсли;
КонецЦикла;
Результат = Сред(Строка, НачальныйИндекс, Индекс - НачальныйИндекс);
КонецЕсли;
Если СмещатьИндекс Тогда
НачальныйИндекс = Индекс;
КонецЕсли;
Возврат Число(Результат);
КонецФункции
// Чтение шестнадцатеричного числа из строки
//
// Параметры:
// Строка - Строка - Разбираемая строка
// НачальныйИндекс - Число - Начальный индекс
// СмещатьИндекс - Булево - Смещать индекс (по умолчанию: Истина)
//
// Возвращаемое значение:
// Число - Прочитанное целое число
//
Функция РазборПрочитатьШестнадцатеричноеЧисло (Строка, НачальныйИндекс = Неопределено, СмещатьИндекс = Истина) Экспорт
Если НачальныйИндекс = Неопределено Тогда
НачальныйИндекс = 1;
КонецЕсли;
Для Индекс = НачальныйИндекс По СтрДлина(Строка) Цикл
Если Не СтрНайти(НаборСимволовШестнадцатеричныеЦифры(), Сред(Строка, Индекс, 1)) Тогда
Прервать;
КонецЕсли;
КонецЦикла;
Результат = Сред(Строка, НачальныйИндекс, Индекс - НачальныйИндекс);
Если СмещатьИндекс Тогда
НачальныйИндекс = Индекс;
КонецЕсли;
Возврат Результат;
КонецФункции
// Чтение незначащих символов (пробел, табуляция, перенос строки)
//
// Параметры:
// Строка - Строка - Разбираемая строка
// НачальныйИндекс - Число - Начальный индекс
// Направление - НаправлениеПоиска - Направление поиска (по умолчанию: НаправлениеПоиска.СНачала)
// СмещатьИндекс - Булево - Смещать индекс (по умолчанию: Истина)
//
// Возвращаемое значение:
// Строка - Прочитанные незначимые символы
//
Функция РазборПрочитатьНезначимые (Строка, НачальныйИндекс = Неопределено, Направление = Неопределено, СмещатьИндекс = Истина) Экспорт
Если Направление = НаправлениеПоиска.СКонца Тогда
Если НачальныйИндекс = Неопределено Тогда
НачальныйИндекс = СтрДлина(Строка);
КонецЕсли;
Индекс = НачальныйИндекс;
Пока Индекс > 0 Цикл
Если Не СтрНайти(НаборСимволовЦифры(), Сред(Строка, Индекс, 1)) Тогда
Прервать;
КонецЕсли;
Индекс = Индекс - 1;
КонецЦикла;
Результат = Сред(Строка, Индекс + 1, НачальныйИндекс - Индекс);
Иначе
Если НачальныйИндекс = Неопределено Тогда
НачальныйИндекс = 1;
КонецЕсли;
Для Индекс = НачальныйИндекс По СтрДлина(Строка) Цикл
Если Не СтрНайти(НаборНезначащихСимволов(), Сред(Строка, Индекс, 1)) Тогда
Прервать;
КонецЕсли;
КонецЦикла;
Результат = Сред(Строка, НачальныйИндекс, Индекс - НачальныйИндекс);
КонецЕсли;
Если СмещатьИндекс Тогда
НачальныйИндекс = Индекс;
КонецЕсли;
Возврат Результат;
КонецФункции
// Чтение идентификатора строки
//
// Параметры:
// Строка - Строка - Разбираемая строка
// НачальныйИндекс - Число - Начальный индекс
// СмещатьИндекс - Булево - Смещать индекс (по умолчанию: Истина)
//
// Возвращаемое значение:
// Строка - Прочитанный идентификатор
//
Функция РазборПрочитатьИдентификатор (Строка, НачальныйИндекс = 1, СмещатьИндекс = Истина) Экспорт
НаборСимволовИдентификатор = НаборСимволовРусскиеЛатинскиеБуквы() + НаборСимволовЦифры() + "_";
НаборСимволовИдентификаторПервыйСимвол = НаборСимволовРусскиеЛатинскиеБуквы() + "_";
Для Индекс = НачальныйИндекс По СтрДлина(Строка) Цикл
Символ = Сред(Строка, Индекс, 1);
Если Индекс = НачальныйИндекс Тогда
НаборСимволов = НаборСимволовИдентификаторПервыйСимвол;
Иначе
НаборСимволов = НаборСимволовИдентификатор;
КонецЕсли;
Если Не СтрНайти(НаборСимволов, Символ) Тогда
Прервать;
КонецЕсли;
КонецЦикла;
Результат = Сред(Строка, НачальныйИндекс, Индекс - НачальныйИндекс);
Если СмещатьИндекс Тогда
НачальныйИндекс = Индекс;
КонецЕсли;
Возврат Результат;
КонецФункции
// Чтение набора символов
//
// Параметры:
// Строка - Строка - Разбираемая строка
// НаборСимволов - Строка - Набор символов
// НачальныйИндекс - Число - Начальный индекс
// СмещатьИндекс - Булево - Смещать индекс (по умолчанию: Истина)
//
// Возвращаемое значение:
// Строка - Прочитанная строка
//
Функция РазборПропуститьНаборСимволов (Строка, НаборСимволов, НачальныйИндекс = 1, СмещатьИндекс = Истина) Экспорт
Результат = "";
Для Индекс = 1 По СтрДлина(НаборСимволов) Цикл
Результат = Результат + РазборПропуститьСимвол (Строка, Сред(НаборСимволов, Индекс, 1), НачальныйИндекс, СмещатьИндекс);
КонецЦикла;
Возврат Результат;
КонецФункции
// Чтение символа
//
// Параметры:
// Строка - Строка - Разбираемая строка
// НачальныйИндекс - Число - Начальный индекс
// СмещатьИндекс - Булево - Смещать индекс (по умолчанию: Истина)
//
// Возвращаемое значение:
// Строка - Прочитанный символ
//
Функция РазборПрочитатьСимвол (Строка, НачальныйИндекс = 1, СмещатьИндекс = Истина) Экспорт
Результат = Сред(Строка, НачальныйИндекс, 1);
Если СмещатьИндекс Тогда
НачальныйИндекс = НачальныйИндекс + 1;
КонецЕсли;
Возврат Результат;
КонецФункции
// Чтение строки до символа
//
// Параметры:
// Строка - Строка - Разбираемая строка
// Символ - Строка - Стоп символ
// НачальныйИндекс - Число - Начальный индекс
// Направление - НаправлениеПоиска - Направление поиска (по умолчанию: НаправлениеПоиска.СНачала)
// СмещатьИндекс - Булево - Смещать индекс (по умолчанию: Истина)
//
// Возвращаемое значение:
// Строка - Прочитанная строка до стоп символа
//
Функция РазборПрочитатьДоСимвола (Строка, Символ, НачальныйИндекс = Неопределено, Направление = Неопределено, СмещатьИндекс = Истина) Экспорт
Если Направление = Неопределено Тогда
Индекс = СтрНайти(Строка, Символ, , НачальныйИндекс);
Иначе
Индекс = СтрНайти(Строка, Символ, Направление, НачальныйИндекс);
КонецЕсли;
Если Направление = НаправлениеПоиска.СКонца Тогда
Если НачальныйИндекс = Неопределено Тогда
НачальныйИндекс = СтрДлина(Строка);
КонецЕсли;
Результат = Сред(Строка, Индекс + 1, НачальныйИндекс - Индекс);
Иначе
Если НачальныйИндекс = Неопределено Тогда
НачальныйИндекс = 1;
КонецЕсли;
Результат = Сред(Строка, НачальныйИндекс, Индекс - НачальныйИндекс);
КонецЕсли;
Если СмещатьИндекс Тогда
НачальныйИндекс = Индекс;
КонецЕсли;
Возврат Результат;
КонецФункции
// Найти текст, пропустить
//
// Параметры:
// Строка - Строка - Разбираемая строка
// Текст - Строка - Искомый текст
// НачальныйИндекс - Число - Начальный индекс
// НомерВхождения - Число - Номер вхождения
//
// Возвращаемое значение:
// Булево - Истина, Искомый текст найден
//
Функция РазборНайтиТекст (Строка, Текст, НачальныйИндекс = 1, НомерВхождения = 1) Экспорт
Индекс = СтрНайти(Строка, Текст,, НачальныйИндекс, НомерВхождения);
Если ЗначениеЗаполнено(Индекс) Тогда
РазборПропуститьНаборСимволов(Строка, Текст, Индекс);
НачальныйИндекс = Индекс;
Возврат Истина
КонецЕсли;
Возврат Ложь;
КонецФункции
// Прочитать блок, PlanSQL='select'
//
// Параметры:
// Строка - Строка - Разбираемая строка
// НачалоБлока - Строка - Текст начала читаемого блока
// КонецБлока - Строка - Текст конца читаемого блока
// НачальныйИндекс - Число - Начальный индекс
//
// Возвращаемое значение:
// Булево - Истина, Искомый текст найден
//
Функция РазборПрочитатьБлок (Строка, НачалоБлока, КонецБлока, НачальныйИндекс = 1) Экспорт
Результат = "";
Если РазборНайтиТекст(Строка, НачалоБлока, НачальныйИндекс) Тогда
СимволБлока = РазборПрочитатьСимвол(Строка, НачальныйИндекс, Ложь);
Если СимволБлока = Символ(34) ИЛИ СимволБлока = "'" Тогда
РазборПропуститьНаборСимволов(Строка, СимволБлока, НачальныйИндекс);
Иначе
СимволБлока = "";
КонецЕсли;
ИндексНачалаБлока = НачальныйИндекс;
ИскомыйТекстКонецБлока = СимволБлока + КонецБлока;
РазборНайтиТекст(Строка, ИскомыйТекстКонецБлока, НачальныйИндекс);
ИндексКонцаБлока = НачальныйИндекс - СтрДлина(ИскомыйТекстКонецБлока);
Результат = Сред(Строка, ИндексНачалаБлока, ИндексКонцаБлока - ИндексНачалаБлока);
КонецЕсли;
Возврат Результат;
КонецФункции
// Добавляет табуляцию в многострочный текст
//
// Параметры:
// Текст - Строка - Текст
// ДобавлятьВПервуюСтрока - Булево - Добавлять в первую строку
// Количество - Число - Количество добавляемых табуляций
//
// Возвращаемое значение:
// Строка - Текст с добавленной табуляцией
//
Функция ДобавитьТабВМногострочныйТекст(Текст, ДобавлятьВПервуюСтрока = Истина, Количество = 1) Экспорт
ВставляемыеСимволы = "";
Для Счетчик = 1 По Количество Цикл
ВставляемыеСимволы = ВставляемыеСимволы + Символы.Таб;
КонецЦикла;
Возврат ?(ДобавлятьВПервуюСтрока, ВставляемыеСимволы, "") + СтрЗаменить(Текст, Символы.ПС, Символы.ПС + ВставляемыеСимволы);
КонецФункции
// Форматирует текст укорачивая до заданной длины
//
// Параметры:
// Текст - Строка - Текст
// Количество - Число - Количество символов
// Многострочная - Булево - Многострочное использование
//
// Возвращаемое значение:
// Строка - Отформатированный текст
//
Функция СтрСократить(Текст, Количество, Многострочная = Ложь) Экспорт
ТекстМногострочный = МногострочнаяСтрока(Текст);
Если ТекстМногострочный
И НЕ Многострочная Тогда
ПерваяСтрока = СтрПолучитьСтроку(Текст, 1);
Результат = Сократить(ПерваяСтрока, Количество, Истина);
Иначе
Результат = Сократить(Текст, Количество);
КонецЕсли;
Возврат Результат;
КонецФункции
#КонецОбласти
#Область СлужебныеПроцедурыИФункции
// Возвращает набор символов букв русского и английского языков
// Возвращаемое значение:
// Строка - Набор символов букв
Функция НаборСимволовРусскиеЛатинскиеБуквы()
НаборСимволовРусскиеБуквы = "ЙЦУКЕ" + Символ(1025) + "НГШЩЗХЪФЫВАПРОЛДЖЭЯЧСМИТЬБЮ"; //1025 - Код символа буквы ежик, елка
НаборСимволовРусскиеБуквы = НаборСимволовРусскиеБуквы + НРег(НаборСимволовРусскиеБуквы);
Возврат НаборСимволовРусскиеБуквы + НаборСимволовЛатинскиеБуквы();
КонецФункции
Функция НаборСимволовЛатинскиеБуквы()
НаборСимволов = "QWERTYUIOPASDFGHJKLZXCVBNM";
Возврат НаборСимволов + НРег(НаборСимволов);
КонецФункции
Функция НаборСимволовЦифры()
Возврат "0123456789";
КонецФункции
Функция НаборСимволовШестнадцатеричныеЦифры()
Возврат "0123456789ABCDEFabcdef";
КонецФункции
Функция НаборНезначащихСимволов()
Возврат Символы.ПС + Символы.ВК + Символы.Таб + " ";
КонецФункции
Функция РазборПропуститьСимвол (Строка, Символ, НачальныйИндекс, СмещатьИндекс = Истина)
Результат = "";
Если Сред(Строка, НачальныйИндекс, 1) = Символ Тогда
Результат = Символ;
Если СмещатьИндекс Тогда
НачальныйИндекс = НачальныйИндекс + 1;
КонецЕсли;
КонецЕсли;
Возврат Результат;
КонецФункции
Функция Сократить(Текст, Количество, ВсегдаДобавлятьЗавершение = Ложь)
Завершение = "...";
НормальнаяДлина = Количество - СтрДлина(Завершение);
Длина = СтрДлина(Текст);
Если Длина > НормальнаяДлина Тогда
Результат = Лев(Текст, НормальнаяДлина) + Завершение;
Иначе
Результат = Текст;
Если ВсегдаДобавлятьЗавершение Тогда
Результат = Результат + Завершение;
КонецЕсли;
КонецЕсли;
Возврат Результат;
КонецФункции
#КонецОбласти
Дополнительные ссылки:
Зазеркалье. Новые функции работы со строками (в платформе 8.3.6)