1С запрос удалить пробелы

Программирование системы 13.08.2016 13:39 20909

При работе со строками, для удаления пробелов и других незначащих символов в 1С предусмотрены функции СокрЛ(), СокрП(), СокрЛП().

Удалить пробелы справа, слева

Незначащие символы – это "Пробел", "Неразрывный пробел", "Табуляция", "Возврат коретки", "Перевод коретки", "Перевод строки", "Перевод формы".

Удалить все пробельные символы

Для удаления всех пробельных символов строки можно воспользоваться функцией "СтрЗаменить()". Эта функция позволяет заменить одну подстроку на другую.

При преобразовании числа к строке могут появиться разделители групп числа. Если разделителем групп является символ "Неразрывный пробел", то функцией СтрЗаменить() можно заменить данный символ на пустую строку.

Иногда, приведенные выше примеры не удаляют пробельные символы. Такая ситуация может возникнуть, например, при работе с Excel файлами. Для решения данной задачи можно попробовать заменить Символ(160) на пустую строку.

Для того чтобы добавить сообщение, необходимо Войти или Зарегистрироваться

« Как стать программистом 1С » Язык 1С » 1С СокрЛП, 1С СокрЛ, 1С СокрП – удаление лишних символов

1С СокрЛП, 1С СокрЛ, 1С СокрП – удаление лишних символов

Функции 1С СокрЛП(Строка), 1С СокрЛ(Строка) и 1С СокрП(Строка) удаляют из текста лишние символы.

  • 1С СокрЛ – с начала строки до «значащих символов»
  • 1С СокрП – с последнего «значащего символа» до конца строки
  • 1С СокрЛП – одновременно слева и справа.

«Лишние символы», которые можно убрать с помощью 1С СокрЛ, 1С СокрП, 1С СокрЛП:

  • Пробел
  • Перенос строки, страницы
  • Табуляция.

Лишние пробелы внутри строки, между словами функции 1С СокрЛ, 1С СокрП, 1С СокрЛП не удаляют.

Читайте также:  Что такое хранитель экрана на ps4

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

Если пользователь ввел значение с пробелом, то сравнение с заданной строкой не будет работать – ведь сравнение учитывает все символы, включая незначимые.

  • Пользователь ввел: «РОССИЯ «
  • Мы сравниваем: Если Страна = «РОССИЯ» //не сработает
  • Чтобы сработало, пишем: Если СокрЛП(Страна) = «РОССИЯ» //сработает

1С СокрЛП() некоторые программисты используют при переводе чисел в строку, вместо Строка(). Дело в том, что числа форматируются при переводе по настройкам локализации с пробелами между разрядами: 22500 -> «22 500». Однако 1С СокрЛП() не убирает пробелы между словами. Вместо этого можно применять Формат():

Число = 22500;
ЧислоСтрокой = Формат(Число, "ЧГ=0");
//ЧислоСтрокой будет равно "22500"

Добавим в наш анализатор строки программы, позволяющие удалить незначащие символы как слева и справа, так и между словами (про анализатор текста см. выше «Функции работы со строками 1С»).

Недавно понадобилось в запросе получить значение строковых кодов справочника без концевых пробелов. Как вы знаете, в языке запросов нет ничего похожего на функцию СокрЛП(), как же быть?

Можно, конечно, предварительно выполнить вспомогательный запрос, выгрузить его в таблицу значений, перебрать ее в цикле выполняя СокрЛП(), и затем передать обратно в нужный запрос в виде параметра (создать временную таблицу).

Или, если максимальная длина строки, как в случае кода справочника, фиксирована можно написать в запросе громоздкую конструкцию из вложенных конструкций ВЫБОР КОГДА.

Но это неинтересно. Благо на глаза попалась статья ildarovich-а //expert.chistov.pro/public/90367/. Оказалось, что с помощью временой таблицы с числами 0,1,2,3. можно получить много нетривиальных вещей в запросах.

Читайте также:  Четверть года это сколько месяцев

Далее несколько примеров.

Сначала удаление начальных и конечных пробелов, аналог функции СокрЛП(). Заодно мы попутно получаем длину обрезанных строк.

Идея очень простая: ищем первый пробельный символ после которого идет не пробел (учитываем, что первый же символ может быть не пробелом) и последний не пробел после которого идет пробел.

Дополнительно тут используется, что выражение ПОДСТРОКА(СтрокаСПробелами, ЗначениеБольшеДлиныСтроки, 1) возвращает пустую строку, а при сравнении cтандарт SQL говорит, что строки, отличающиеся незначащими символами в хвосте не различаются. В языке запросов 1С сравнение происходит точно так-же. Т.е. для запроса "" = " ".

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

Здесь в качестве "пробельных" символов введена вспомогательная таблица с несколькими разделителями. Т.е. мы выполняем разложение строки не по пробелам, а по заданным разделителям.

Решето Эратосфена, выдающее таблицу простых чисел

Степени двойки до 2^106, большие степени не помещаются в 32 знака (не разряда!) числа, которыми оперирует 1С

Запрос, выполняющий точное вычисление квадратного корня числа в диапазоне 0 – 1 048 576, развитие запроса из статьи ildarovich-а (см. ссылку в начале), который вычислял целое значение квадратного корня.

Оцените статью
Добавить комментарий

Adblock detector