Функции 1С СокрЛП(Строка), 1С СокрЛ(Строка) и 1С СокрП(Строка) удаляют из текста лишние символы.
Например:
- Выполняем
СокрЛП("
| Привет, мир!
| ")
- 1С возвращает «Привет, мир!»
Удаление производится:
- 1С СокрЛ – с начала строки до «значащих символов»
- 1С СокрП – с последнего «значащего символа» до конца строки
- 1С СокрЛП – одновременно слева и справа.
«Лишние символы», которые можно убрать с помощью 1С СокрЛ, 1С СокрП, 1С СокрЛП:
- Пробел
- Перенос строки, страницы
- Табуляция.
Лишние пробелы внутри строки, между словами функции 1С СокрЛ, 1С СокрП, 1С СокрЛП не удаляют.
Строковые реквизиты, например справочнков, имеют обычно определенную длину, например возьмем 50 символов. При вводе пользователи может ввести лишние пробелы в конце, особенно если текст в поле не вводится вручную, а копируется из сторонней программы.
Если пользователь ввел значение с пробелом, то сравнение с заданной строкой не будет работать – ведь сравнение учитывает все символы, включая незначимые.
Например:
- Пользователь ввел: «РОССИЯ «
- Мы сравниваем: Если Страна = «РОССИЯ» //не сработает
- Чтобы сработало, пишем: Если СокрЛП(Страна) = «РОССИЯ» //сработает
1С СокрЛП() некоторые программисты используют при переводе чисел в строку, вместо Строка(). Дело в том, что числа форматируются при переводе по настройкам локализации с пробелами между разрядами: 22500 -> «22 500». Однако 1С СокрЛП() не убирает пробелы между словами. Вместо этого можно применять Формат():
Число = 22500;
ЧислоСтрокой = Формат(Число, "ЧГ=0");
//ЧислоСтрокой будет равно "22500"
Добавим в наш анализатор строки программы, позволяющие удалить незначащие символы как слева и справа, так и между словами (про анализатор текста см. выше «Функции работы со строками 1С»).
[VIP_CONTENT]
//В эту функцию мы будем далее вписывать код
Функция АнализТекста(Текст)
Сообщить("Было: " + Текст);
НезначащиеСимволы = " " + Символы.ВК + Символы.ПС + Символы.Таб;
СтараяСтрока = СокрЛП(Текст); //уберем незначащие символы по левому и правому краю сразу
НоваяСтрока = ""; //сюда будем копировать то, что не надо удалять
флгВстреченыНезначащиеСимволы = Ложь; //этот флаг будем включать тогда, когда мы встретили в строке незначащие символы
Сч = 1; //"Счетчик" (обычно сокращают до "Сч") текущего положения буквы, индекс (позиция) первой буквы в строке – 1, однако если использовать позицию 0, то функции работы со строками также вернут первый символ строки, как и при позиции 1
ДлинаСтроки = СтрДлина(СтараяСтрока); //Узнаем длину строки
Пока Сч <= ДлинаСтроки Цикл //повторяем цикл столько раз, сколько букв в строке; так как индекс первой буквы – 1, то индекс последней равен длине строки
Буква = Сред(СтараяСтрока, Сч, 1); //выделяем 1 букву на позиции счетчика
Поз = Найти(НезначащиеСимволы, Буква); //ищем наличия символа в строке разрешенных (переменная, выше)
Если Поз > 0 Тогда //Если буква найдена – это незначащий символ
флгВстреченыНезначащиеСимволы = Истина; //взводим флаг, мы встретили незначащие символы
Иначе //если это значащий символ
Если флгВстреченыНезначащиеСимволы Тогда //если перед этим были незначащие символы
НоваяСтрока = СокрП(НоваяСтрока); //уберем незначащие символы справа
НоваяСтрока = НоваяСтрока + " "; //добавим пробел - то есть мы заменяем множество незначащих символов на один пробел
флгВстреченыНезначащиеСимволы = Ложь; //сбросим флаг
КонецЕсли;
КонецЕсли;
НоваяСтрока = НоваяСтрока + Буква; //скопируем символ в новую строку
Сч = Сч + 1; //увеличиваем счетчик на один, переходим к следующей букве
КонецЦикла;
Сообщить("Стало: " + НоваяСтрока);
Возврат НоваяСтрока;
КонецФункции
[/VIP_CONTENT]