1с убрать пробелы в числе

Обновлено: 03.07.2024

Необходимость убрать лишние пробелы в строке возникает нередко, и в 1С предусмотрен набор инструментов для решения этой задачи. Пробел относиться к так называемым «незначащим символам». В данной статье мы рассмотрим не только удаление пробелов, но и остальных незначащих символом.

· Символ возврата каретки

Постараемся рассмотреть как можно больше вариантов решения этой задачи.

Итак, от простого к сложному.

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

Для удаления пробелов в строках в 1С предусмотрены функции

СокрЛ() – удалить пробелы слева

СокрП() – удалить пробелы справа

СокрЛП() – удалить все пробельные символы

Выглядит это так:

//Отсекает незначащие символы слева
Строка = СокрЛ(" Привет! ");
//Строка = "Привет! ";

//Отсекает незначащие символы справа
Строка = СокрП(" Привет! ");
//Строка = " Привет!";

//Отсекает незначащие символы слева и справа
Строка = СокрЛП(" Привет! ");
//Строка = "Привет!";

2.Замена пробелов

Замена пробелов нужна если пробел находится в строковом представлении числа

//ПрСтрока = Убираем пробелы

3.Как убрать неразрывные пробелы?

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


При представлении числового значения в строковое (Функция Строка(Число);) система может записать число с использованием пробелов, т.е. могут появиться разделители групп числа. Например, число 20000 система преобразовав в строку, добавит нам пробел «20 000».

Удаление лишних пробелов в таком случае можно выполнить через функцию Формат(), которая позволяет превратить число, дату или булево в строку. Функция Формат() принимает два параметра: <Значение> – это собственно то значение, которому мы хотим придать какой-либо вид, и <ФорматнаяСтрока> – второй параметр, в котором и заключается весь смысл функции Формат(). В рассматриваемом примере мы будем использовать ЧГ (NG) – порядок группировки разрядов числа.

В качестве значения указываются числа через запятую, обозначающие количество группируемых разрядов справа налево. Но мы не будем задавать значение и получим строковое представление числа без пробелов.

Строка = Формат(20000, "ЧГ 20000";

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

Строка = СтрЗаменить(" Привет! Привет!", Символы.НПП, "");
//Строка = " Привет!Привет!";

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

Строка = СтрЗаменить(" Строка ", Символ(160),"");
//Строка = "Строка";

4. Удаление из строки символов табуляции, символа возврата каретки, перевода Строки и перевода формы

Для этих символом в 1С описано перечисление Символы (Chars) со значениями:

ВК – символ возврата каретки;

ВТаб – вертикальная табуляция;

НПП – неразрывный пробел;

ПС – перевод строки;

ПФ – перевод формы (страницы);

Таб (Tab) – горизонтальная табуляция.

Для удаления этих символов в строке можно использовать функцию замены СтрЗаменить(). Можно также использовать символы с соответствующими кодами по ASCII или Unicode. Например, вместо Символы.ВК и Символы.ПС поставить соответственно Символ(10) и Символ(13).

Строка = СтрЗаменить(" Привет! Привет!", Символы.таб,"");

Строка = СтрЗаменить(" Привет! Привет!", Символы.(13),"");

5. Еще несколько способов удаления лишних пробелов в строке в 1С

По умолчанию программа "1С:Предприятие 8" преобразует значения типа Число и Дата к строке в соответствии с национальными установками. В меню «Администрирование → Региональные установки информационной базы» можно изменить и отдельные параметры форматирования дат и чисел, а также представление значений типа Булево. Например, можно в конкретной информационной базе отключить разделение триад числовых значений. Тогда при представлении числа в виде строки система не будет добавлять лишний пробел, а нам не нужно будет его, в последствии, удалять.

Вариант, когда нужно из многострочия получить одну строку, то есть убрать лишние пробелы ПС. Сделать это можно, используя функцию СтрПолучитьСтроку(<Строка>, <НомерСтроки>).

Смоделируем ситуацию для примера. Наша задача – убрать убрать лишние пробелы в строке и символы перевода строки.

Я понимаю глупейший вопрос, но не выходит каменный цветок
Имеем Число=1 023,54
Делаем согласно логике СтрЗаменить(Число," ","");
Получаем строку "1 023,54"
СтрЗаменить не прокатило, пробовал и СтрЗаменить(Строка(Число)," ","");

(1)+ там не пробел а НПП

(2) Ну трындец.
Никогда такого не было и вот опять (Черномырдин)
Нуралиев недавно говорил, что в отрасли 1С сейчас работают примерно 300 тысяч человек. Интересно, сколько из них стали жертвами неразрывного пробела?
(4) у них на 300 000 сотрудников - 10 000 психологов, половина из которых работает с жертвами НПП
вообще 1с-овцы конечно чудаки полные с этим НПП в числе. это же какой извращенной логикой надо обладать что бы запилить такое.
(9), (13) Я наверное банальность напишу, но НПП нужен для того, чтобы перенос строки (если ему случится быть на этом строковом представлении числа) автоматически НЕ происходил по середине числа. тогда как на пробеле такой перенос произойдет.
(20) на кой черт этот пробел в коде? вот о чем речь. это чисто фишка для вывода на экран. программист почему должен каждый раз какую нить выгрузку форматировать что бы число к нормальному виду привести?
(21)А что должно происходить? Выгрузка должна сама форматироваться когда на файл с ней программист посмотрит? Может быть программист будет форматировать вывод в удобном виде?
(22) я удивлен что кому то еще это надо объяснять. если я выгружаю число 9999, я хочу выгружать число 9999, а не 9 999. это полная тупость оперировать в системе числами с красивым удобным представлением.
(9) чудные те, у кого половина числа на новую строку переносится. Все верно они сделали
(24) проблема не в том что там НПП, а что вообще по умолчанию в строку так переводится.
Ни в одном языке такого нет. В том числе и в 77 не было
(25) строка здесь именно форматированное представление. Если тебе нужна выгрузка чисел в текст пользуй
Xmlстрока
Значениевстрокувнутр
Значениевфайл
И тд

а "я удивлен что кому то еще это надо объяснять", если "программист" выгружает ЧИСЛО в СТРОКУ, не задумывается о неявном преобразовании типов и что-то после этого хочет от "системы". ;)

1С число в строку преобразует в том формате, который удобен для просмотра чисел (и поэтому с НПП). А если вам нужно выгрузить в каком-то ОСОБОМ формате, обеспечьте этот формат самостоятельно. А то одному пробелы мешают, другому вместо точки запятая нужна, третьему вообще нужно без дробной части. 1С вам ВСЕМ угодить должна при "неявном преобразовании формата"? ;)

(26) форматировать надо когда выводишь числа, а не когда в коде ими оперируешь.

(27) < 1С число в строку преобразует в том формате, который удобен для просмотра чисел

кому удобен? спорный вопрос. компании 1С? только если так.

и при выгрузке действительно происходит "не явное" преобразование. вместо одно числа 9999, я получаю два числа 9 и 999. и это поведение по умолчанию. очень удобно.

Необходимо из текста кода убрать излишние пробелы, в т.ч. табуляции и т.п.
Быстрое удаление интересует. Какие известны варианты?

(0) скопировать код в текстовый документ, пройтись по каждой строке циклом с заменой двух пробелов на один, вставить код обратно, выделить и текст-блок-форматировать (Alt+Shift+F)
может так?
(2) СтрРазделить и СтрСоединить теперь есть. Работает практически мгновенно.
Эээ. "из текста кода убрать" - убрать из текста программно или убрать из текста алгоритма программы? "Ничего не понимаю. Что же это получается?"(цы)

(5) Как она поможет убрать пробелы в: "<таб><таб>МояПеременая = <0160><таб><таб><таб>15;" ?

(1) Это и требуется. Варианты какие есть? - вот вопрос.

(7) "из текста кода" = "из текста, который кодом программы является"
СтрокаБезЛишнихПробелов = СтрЗаменить(СтрокаСЛишнимиПробелами, " ", " ");
(12) Как это поможет убрать пробелы в: "<таб><таб>МояПеременая = <0160><таб><таб><таб>15;" ?

Расширим задачу расширенным примером:

Требуется убрать пробелы в:

Если код на языке 1С и комментарии нафик не нужны то можно компиляцией и декомпиляцией провернуть.
(28)+ Если очень-очень хочется сохранить комменты, то сначала их куда то сохраняем в привязке к строкам, затем компилируем, декомпилируем, чистим комменты и подставляем куда нуна.
(29) Скорее - свой "компилятор" написать нужно. Пока не понимаю, как программно заставить 1С скомпилированный код из текста выдать.

(27) Таки, получится в итоге:

есть же всякие инструменты, которые AST деревья строят. И граммкатику 1с к ним уже прикручивали

Но писать синтаксический анализатор на 1С это конечно прикольно.

Пойми не получится "проще", данная задача не имеет простого решения кроме как применения/покупки готового сложного.
Попытки сделать и так и так - неудовлетворительное время работы только уже на уровне массивов. Похоже, что регексп может помочь с производительностью, но что за зверь такой и как его жарить? - не знаю.
(39) Таб - тоже пробел, считаем по задаче. Два Таб-а - один излишен.
(43) тебе табы вначале надо оставлять или нет? Если это код программы
Регулярки.. кажутся сложными вначале, а потом. сам поймешь)
(42) Спасибо! Решение трилинейного квадро-кубического уравнения в первых производных погуглите, да. Часик и проблема искусственного интеллекта решена!

(49) Да, если в данной задаче это имеет смысл. Чтоб не пушкой по воробьятам.

Есть ощущение что читал подобное обсуждение где то и там был быстрый метод.
(0)
Была подобная задача у меня, решил ее с помощью регулярных выражений
Книга знаний: Использование регулярных выражений (RegExp) в 1С
(57) долго.. в монастыре.. гуру дали скилл .. одним пальцем теперь нажимаю контрол и с

(56) И еще одну задачу решал, проще вот такую процедуру дописывать, пока идеал не увидишь и все

5-10 минут тестирования на реальных примерах и у тебя получиться идеальная функция

Человек просто не дает полные требования к задаче, а хочет идеального решения.
Хочу программу
какую?
простую
Что должна уметь?
Считать
Что считать?
Примеры
Вот такая пойдет?
А как же "решение трилинейного квадро-кубического уравнения в первых производных"?

(59) 25000 модулей не проверишь глазами.

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

Туда ли я лезу? И как заменить отсутствием пробела то что описано в регулярке?

^[а-яА-ЯёЁa-zA-Z]\s*[а-яА-ЯёЁa-zA-Z]
^[а-яА-ЯёЁa-zA-Z]\s*^[а-яА-ЯёЁa-zA-Z]
[а-яА-ЯёЁa-zA-Z]\s*^[а-яА-ЯёЁa-zA-Z] - пробел не нужен

\p - любые буквы любого языка, но что такое \р, в данном случае? Ошибка копирования - останки разметки таблицы?

"У программиста была проблема, которую он начал решать регэкспами. Теперь у него две проблемы".

экранированный символ, указывающий на то, что ты написал
(64) \p в регекспах - символ Юникода по категории. \p - Letters, буквы.
Но VBScript.RegExp это не поддерживает.
Осталось непонятным, как заменить по принципу "убрать пробел". Т.к. моё выражение находит места, где данный пробел присутствует, но спереди/сзади цепляет небукву

Я именно здесь настраивал, а потом в 1с вставлял.

Вот процедура из рабочего кода, моя:

(74) Наименования такие отрабатывала например:

(76) Получал на выходе:

(78) Работает неполноценно. Не все излишние пробелы находит.
(79)(80) "\x" + ваше 0160 в 16ной системе. аналогично можно перечислить другие спецсимволы
опишите четкий критерий какие пробелы считаются излишними
(82) Неразрывный пробел - вполне чётко под критерий "пробельные символы" попадает, но его в \s нет, что странно

- находит (Буква Небуква) (Небуква Буква) (Небуква Небуква), но не находит (Буква Небуква Буква), т.к. мне нужно, чтобы находил только пробельные части, чтобы их заменить на ничто, а в результат включаются и соседние символы.

Не разобрался, как исключать из результатов части вокруг пробельных символов

Необходимость убрать лишние пробелы в строке возникает нередко, и в 1С предусмотрен набор инструментов для решения этой задачи. Пробел относиться к так называемым «незначащим символам». В данной статье мы рассмотрим не только удаление пробелов, но и остальных незначащих символом.

· Символ возврата каретки

Постараемся рассмотреть как можно больше вариантов решения этой задачи.

Итак, от простого к сложному.

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

Для удаления пробелов в строках в 1С предусмотрены функции

СокрЛ() – удалить пробелы слева

СокрП() – удалить пробелы справа

СокрЛП() – удалить все пробельные символы

Выглядит это так:

//Отсекает незначащие символы слева
Строка = СокрЛ(" Привет! ");
//Строка = "Привет! ";

//Отсекает незначащие символы справа
Строка = СокрП(" Привет! ");
//Строка = " Привет!";

//Отсекает незначащие символы слева и справа
Строка = СокрЛП(" Привет! ");
//Строка = "Привет!";

2.Замена пробелов

Замена пробелов нужна если пробел находится в строковом представлении числа

//ПрСтрока = Убираем пробелы

3.Как убрать неразрывные пробелы?

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


При представлении числового значения в строковое (Функция Строка(Число);) система может записать число с использованием пробелов, т.е. могут появиться разделители групп числа. Например, число 20000 система преобразовав в строку, добавит нам пробел «20 000».

Удаление лишних пробелов в таком случае можно выполнить через функцию Формат(), которая позволяет превратить число, дату или булево в строку. Функция Формат() принимает два параметра: <Значение> – это собственно то значение, которому мы хотим придать какой-либо вид, и <ФорматнаяСтрока> – второй параметр, в котором и заключается весь смысл функции Формат(). В рассматриваемом примере мы будем использовать ЧГ (NG) – порядок группировки разрядов числа.

В качестве значения указываются числа через запятую, обозначающие количество группируемых разрядов справа налево. Но мы не будем задавать значение и получим строковое представление числа без пробелов.

Строка = Формат(20000, "ЧГ 20000";

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

Строка = СтрЗаменить(" Привет! Привет!", Символы.НПП, "");
//Строка = " Привет!Привет!";

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

Строка = СтрЗаменить(" Строка ", Символ(160),"");
//Строка = "Строка";

4. Удаление из строки символов табуляции, символа возврата каретки, перевода Строки и перевода формы

Для этих символом в 1С описано перечисление Символы (Chars) со значениями:

ВК – символ возврата каретки;

ВТаб – вертикальная табуляция;

НПП – неразрывный пробел;

ПС – перевод строки;

ПФ – перевод формы (страницы);

Таб (Tab) – горизонтальная табуляция.

Для удаления этих символов в строке можно использовать функцию замены СтрЗаменить(). Можно также использовать символы с соответствующими кодами по ASCII или Unicode. Например, вместо Символы.ВК и Символы.ПС поставить соответственно Символ(10) и Символ(13).

Строка = СтрЗаменить(" Привет! Привет!", Символы.таб,"");

Строка = СтрЗаменить(" Привет! Привет!", Символы.(13),"");

5. Еще несколько способов удаления лишних пробелов в строке в 1С

По умолчанию программа "1С:Предприятие 8" преобразует значения типа Число и Дата к строке в соответствии с национальными установками. В меню «Администрирование → Региональные установки информационной базы» можно изменить и отдельные параметры форматирования дат и чисел, а также представление значений типа Булево. Например, можно в конкретной информационной базе отключить разделение триад числовых значений. Тогда при представлении числа в виде строки система не будет добавлять лишний пробел, а нам не нужно будет его, в последствии, удалять.

Вариант, когда нужно из многострочия получить одну строку, то есть убрать лишние пробелы ПС. Сделать это можно, используя функцию СтрПолучитьСтроку(<Строка>, <НомерСтроки>).

Смоделируем ситуацию для примера. Наша задача – убрать убрать лишние пробелы в строке и символы перевода строки.

Читайте также: