Убрать пробелы в строках 1С
При работе со строками, для удаления пробелов и других незначащих символов в 1С предусмотрены функции СокрЛ(), СокрП(), СокрЛП().
Удалить пробелы справа, слева
Незначащие символы — это "Пробел", "Неразрывный пробел", "Табуляция", "Возврат коретки", "Перевод коретки", "Перевод строки", "Перевод формы".
Удалить все пробельные символы
Для удаления всех пробельных символов строки можно воспользоваться функцией "СтрЗаменить()". Эта функция позволяет заменить одну подстроку на другую.
При преобразовании числа к строке могут появиться разделители групп числа. Если разделителем групп является символ "Неразрывный пробел", то функцией СтрЗаменить() можно заменить данный символ на пустую строку.
Иногда, приведенные выше примеры не удаляют пробельные символы. Такая ситуация может возникнуть, например, при работе с Excel файлами. Для решения данной задачи можно попробовать заменить Символ(160) на пустую строку.
Комментарии (0)
Для того чтобы добавить сообщение, необходимо Войти или Зарегистрироваться
Функции работы со строками в 1С 8.3 и 8.2
Тип «Строка» встречается во всех языках программирования. Он является примитивным, и в 1С существует много функций для работы с ним. В данной статье мы подробно рассмотрим различные способы работы со строковыми типами в 1С 8.3 и 8.2 на примерах.
Строковые функции в 1С
Строка
Для того чтобы преобразовать переменную какого-либо типа в строку, существует одноименная функция «Строка()». Входным параметром будет сама переменная, строковое представление которой необходимо получить.
Строка(Ложь) // возвращает «Нет»
Строка(12345) // возвращает «12 345»
Строка(ТекущаяДата()) //»21.07.2017 11:55:36″
Преобразовывать к строке возможно не только примитивные типы, но и остальные, например элементы справочников, документов.
СокрЛП, СокрЛ, СокрП
В качестве входных параметров данных функций выступает переменная строкового типа. Функции удаляют незначащие символы (пробелы, переносы каретки и прочие): с левой и правой стороны, только с левой стороны, и только с правой соответственно.
СокрЛП(» Будут удалены пробелы с обеих сторон «) // «Будут удалены пробелы с обеих сторон»
СокрЛ(» Будут удалены пробелы с обеих сторон «) // «Будут удалены пробелы слева »
СокрП(» Будут удалены пробелы с обеих сторон «) // « Будут удалены пробелы справа»
Лев, Прав, Сред
Данные функции позволяют обрезать часть строки. Функция «Лев()» вернет часть строки с ее левой стороны указанной длины. Функция «Прав()» аналогично, но обрезка производится справа. Функция «Сред()» позволяет указать номер символа, с которого будет выделена строка и ее длину.
Лев(«Строковая переменная», 4) // возвращает «Стро»
Прав(«Строковая переменная», 7) // возвращает «еременная»
Сред(«Строковая переменная», 2, 5)// возвращает «троко»
СтрДлина
Функция определяет количество символов, которые содержатся в строковой переменной.
СтрДлина(«Слово «) // результатом выполнения будет число 5
Найти
Функция дает возможность искать в какой-либо строковой переменной часть строки. В качестве возвращаемого значения будет выступать число, которое показывает позицию начала найденной строки. Если совпадений не обнаружено, возвращается ноль.
Обратите внимание, что поиск производится с учетом регистра. Если в изначальной строке будет больше одного вхождения подстроки поиска, функция вернет начало первого вхождения.
ПустаяСтрока
Использование данной функции позволяет определить, является ли строка пустой. Незначимые символы, например, пробел, перенос каретки и другие не учитываются.
ПустаяСтрока(«Пупкин Василий Иванович») // функция вернет значение Ложь
ПустаяСтрока(» «) // функция вернет значение Истина
ВРег, НРег, ТРег
Получите понятные самоучители по 1С бесплатно:
Данные функции очень полезны при сравнении и преобразовании строковых переменных. «Врег()» вернет исходную строку в верхнем регистре, «НРег()» в нижнем, а «ТРег()» отформатирует ее так, что первый символ каждого отдельного слова будет с большой буквы, а все последующие с маленькой.
ВРег(«ГеНераЛьныЙ дИРЕктОр») // возвращаемое значение – «ГЕНЕРАЛЬНЫЙ ДИРЕКТОР»
НРег(«ГеНераЛьныЙ дИРЕктОр») // возвращаемое значение – «генеральный директор»
ТРег(«ГеНераЛьныЙ дИРЕктОр») // возвращаемое значение – «Генеральный Директор»
СтрЗаменить
Данная функция является аналогом замены в текстовых редакторах. Она позволяет подменять один символ или набор символов другим в строковых переменных.
СтрЧислоСтрок
Функция позволяет определить количество строк, разделенных переносом каретке в текстовой переменной.
Цикл, в приведенном ниже примере, пройдет три круга, так как функция СтрЧислоСтрок вернет значение 3:
Для инд=1 по СтрЧислоСтрок(«Строка1» + Символы.ПС + «Строка2» + Символы.ПС + «Строка3») Цикл
<тело цикла>
КонецЦикла;
СтрПолучитьСтроку
Данная функция работает с многострочным текстом так же, как и предыдущая. Она позволяет получить определенную строку из текстовой переменной.
СтрПолучитьСтроку(«Строка1» + Символы.ПС + «Строка2» + Символы.ПС + «Строка3», 2) // вернет «Строка2»
СтрЧислоВхождений
Функция подсчитывает количество вхождений символа или подстроки в искомой строке.
Символ и КодСимвола
Эти функции позволяют получать символ по его коду в кодировке Unicode, а так же определять этот код по самому символу.
КодСимвола(«А») // функция вернет число 1 040
КодСимвола(1040) // функция вернет «А»
Частые задачи при работе со строками
Объединение строк
Чтобы объединить несколько строк (произвести конкатенацию) достаточно использовать оператор сложения.
«Строка 1″ + » Строка 2″ //результатом сложения двух строк будет «Строка 1 Строка 2»
Преобразование типов
Для того, чтобы преобразовать тип в строку, например, ссылку на элемент справочника, число и прочее, достаточно использовать функцию «Строка()». Функции, подобные «СокрЛП()» так же будут преобразовывать переменные в строку, но уже сразу с отсечением незначащих символов.
Обратите внимание, что при преобразовании числа в строку, программа автоматически добавила пробел, отделяющий тысячу. Для того чтобы этого избежать можно воспользоваться следующими конструкциями:
Кавычки в строке
Довольно часто вам придется сталкиваться с необходимостью указать в строковой переменной кавычки. Это может быть как текст запроса, написанный в конфигураторе, так и просто переменная. Для решения данной задачи вам достаточно установить два символа кавычек.
Многострочность, перенос строки
Для того, чтобы создать многострочный текст достаточно добавить в него символы переноса строки (Символы.ПС).
МногострочныйТекст = «Первая строка» + Символы.ПС + «Вторая строка»
Как убрать пробелы
Для того, чтобы убрать пробелы справа или слева можно воспользоваться функцией «СокрЛП()» (а так же «СокрЛ()» и «СокрП()»):
СтрокаБезПробелов = СокрЛП(» Много букв «) // функция вернет значение «Много букв»
Если после преобразования числа в строку вам потребовалось убрать неразрывные пробелы, воспользуйтесь следующей конструкцией:
СтрокаБезПробелов = СтрЗаменить(Строка(99999),Символы.НПП,»») // вернет «99999»
Так же программисты часто пользуются ниже приведенной конструкцией, которая позволяет удалить, либо заменить на другой символ все пробелы текстовой переменной:
СтрокаБезПробелов = СтрЗаменить(« п р и в е т», » » ,»») // вернет «привет»
Сравнение строк между собой
Сравнить сроки можно обычным знаком равенства. При сравнении учитывается регистр.
«Здраствуйте» = «здравствуйте» // вернет Ложь
«Здраствуйте» = «Здравствуйте» // вернет Истина
«Здраствуйте» = «До свидания» // вернет Ложь
Быстрое удаление излишних пробелов, в т.ч. табуляций и т.п.. Какие есть варианты?
Необходимо из текста кода убрать излишние пробелы, в т.ч. табуляции и т.п.
Быстрое удаление интересует. Какие известны варианты?
(5) Как она поможет убрать пробелы в: "<таб><таб>МояПеременая = <0160><таб><таб><таб>15;" ?
(1) Это и требуется. Варианты какие есть? — вот вопрос.
Расширим задачу расширенным примером:
Требуется убрать пробелы в:
<таб><таб>МояПеременая = <0160><таб><таб><таб>"Текст сообщения !";// Комментарий к этой строке
чтобы осталось:
МояПеременая="Текст сообщения!";//Комментарий к этой строке
(15)
Функция БыстроУбратьПробелы(Текст)
ТекстИдеальнй = СтрЗаменить(Текст," ","");
ТекстИдеальнй = СтрЗаменить(ТекстИдеальнй ,Символы.Таб,"");
Возврат ТекстИдеальнй ;
КонецФункции
Функция БыстроУбратьПробелы(Текст)
ТекстИдеальный = СтрЗаменить(Текст," ","");
ТекстИдеальный = СтрЗаменить(ТекстИдеальный ,Символы.Таб,"");
ТекстИдеальный = СтрЗаменить(ТекстИдеальный ,Символы.НПП,"");
ТекстИдеальный = СтрЗаменить(ТекстИдеальный ,"Текстсообщения!","Текст сообщения!");
Возврат ТекстИдеальный;
КонецФункции
(15) мас = СтрРазделить(Текст, Символы.Таб + " " + Символы.НПП + ЕщеКакиеТоСимволыРазделители, Ложь;
Текст = СтрСоединить(мас);
(27) Таки, получится в итоге:
МояПеременая = "Текст сообщения !" // Комментарий к этой строке
— все пробелы обратно вернулись.
(32) так вам все пробелы надо удалить? тогда
Но писать синтаксический анализатор на 1С это конечно прикольно.
Проще! Коллеги, проще надо! Это всего лишь "убрать максимум" и "не повредить минимум"
Если СправаБуква и СлеваБуква, а МеждуПробел Тогда
ЭтоТекст
Иначе
НафигПробел
Конец
(37) Ну и у тебя МояПеременная = "Текст <tab><tab>сообщения !" и надо эти табы внутри оставить.
(49) Да, если в данной задаче это имеет смысл. Чтоб не пушкой по воробьятам.
(56) И еще одну задачу решал, проще вот такую процедуру дописывать, пока идеал не увидишь и все
Функция БыстроУбратьПробелы(Текст)
ТекстИдеальный = СтрЗаменить(Текст," = ","=");
ТекстИдеальный = СтрЗаменить(ТекстИдеальный ,<tab><tab>,"<tab>");
ТекстИдеальный = СтрЗаменить(ТекстИдеальный ," !","!");
ТекстИдеальный = СтрЗаменить(ТекстИдеальный ," <","<");
ТекстИдеальный = СтрЗаменить(ТекстИдеальный ,"> ",">");
Возврат ТекстИдеальный;
КонецФункции
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
"У программиста была проблема, которую он начал решать регэкспами. Теперь у него две проблемы".
стр= "<таб><таб>МояПеременая = <0160><таб><таб><таб>"Текст сообщения !"// Комментарий к этой строке";
РВ= новый COMОбъект("VBScript.RegExp");
РВ.IgnoreCase = Истина; //Игнорировать регистр
РВ.Global = Истина; //Поиск всех вхождений шаблона
стр= РВ.Replace(стр, "$1"); // как здесь сказать "БЕЗ \s+"?
Попробуй шаблоны тестировать вот тут:
http://www.pcre.ru/eval
Я именно здесь настраивал, а потом в 1с вставлял.
Вот процедура из рабочего кода, моя:
Процедура ПроставитьАвторамПробелыНажатие(Элемент)
Попытка
RegExp = New COMОбъект("VBScript.RegExp");
Исключение
Сообщить(ОписаниеОшибки());
Возврат;
КонецПопытки;
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| Б_Авторы.Ссылка,
| Б_Авторы.Наименование КАК Наименование
|ИЗ
| Справочник.Б_Авторы КАК Б_Авторы
|ГДЕ
| Б_Авторы.ПометкаУдаления = ЛОЖЬ
| И Б_Авторы.Наименование ПОДОБНО ""%.%""
|
|УПОРЯДОЧИТЬ ПО
| Наименование";
//Запрос.УстановитьПараметр("",);
РезультатЗапроса = Запрос.Выполнить();
ТаблицаЗапроса = РезультатЗапроса.Выгрузить();
Для Каждого Состав Из ТаблицаЗапроса Цикл
ОбработкаПрерыванияПользователя();
Параметры = ПолучитьЗначениеРегулярнымВыражением(СокрЛП(Состав.Наименование),"\.[А-Я]\.",RegExp);
Если Параметры.ВыполненоУспешно Тогда
//Если ххСостав.ВыводитьТолькоИмя Тогда
//мТекстОписания = мТекстОписания + ххСостав.Имя + Символы.ПС;
//Сообщить(ххСостав.Имя);
Сообщить(СокрЛП(Состав.Наименование));
Если Лев(Параметры.Результат,1) = "." Тогда
Инициалы = ". " + ДополнительныеПроцедуры.ПравБез(Параметры.Результат,1);
Иначе
Продолжить;
КонецЕсли;
НовоеНаименование = СтрЗаменить(СокрЛП(Состав.Наименование),Параметры.Результат,Инициалы);
Сообщить(СокрЛП(НовоеНаименование));
ТекОбъект = Состав.Ссылка.ПолучитьОбъект();
ТекОбъект.Наименование = СокрЛП(НовоеНаименование);
ТекОбъект.Записать();
Функция ПолучитьЗначениеРегулярнымВыражением(ВходящийТекст,РегВыражение,RegExp=Неопределено) Экспорт
Если RegExp = Неопределено Тогда
RegExp = New COMОбъект("VBScript.RegExp");
КонецЕсли;
//Дополнительно +
Параметры = Новый Структура;
Параметры.Вставить("ВыполненоУспешно",Ложь);
Параметры.Вставить("ВходящийТекст",ВходящийТекст);
Параметры.Вставить("Результат","");
//Дополнительно —
//RegExp.IgnoreCase = Ложь; //Игнорировать регистр
RegExp.Global = Ложь; //Поиск всех вхождений шаблона
RegExp.MultiLine = Ложь; //Многострочный режим
RegExp.Pattern = РегВыражение;
Matches=RegExp.Execute(ВходящийТекст);
ЧислоВхождений=Matches.Count();
Если ЧислоВхождений = 1 Тогда
Match = Matches.Item(0);
Параметры.Результат = СокрЛП(Match.Value);
Параметры.ВыполненоУспешно = Истина;
КонецЕсли;
Возврат Параметры;
КонецФункции
(74) Наименования такие отрабатывала например:
1. (АСТ) Гордеева Е.А., Парнякова М.В., <не указано> Мой секретный дневничок на каждый день `16 7-инт
2. EverAfterHigh(Эксмо) Школа "Долго и счастливо". Дневник моих секретов `16, 7Бц
3. Winx (АСТ) Булеков С. Н. Дневник волшебного питомца. Клуб Winx `12 7БЦ
(76) Получал на выходе:
1. (АСТ) Гордеева Е. А., Парнякова М. В., <не указано> Мой секретный дневничок на каждый день `16 7-инт
2. EverAfterHigh(Эксмо) Школа "Долго и счастливо". Дневник моих секретов `16, 7Бц
3. Winx (АСТ) Булеков С. Н. Дневник волшебного питомца. Клуб Winx `12 7БЦ
Строки в языке 1С. Примеры работы
В данной статье собраны примеры использования функций для работы со строковыми значениями в 1С, а также типовые задачи по работе со строками.
Содержание
Функции для работы со строками в языке 1С
Значения типа Строка широко применяются в языке 1С. Литералом строкового типа является набор символов, заключенный в двойные кавычки.
Удаление лишних пробелов
Преобразование регистра строки
Можно средствами языка 1С привести строку к нужному регистру – т.е. сделать все буквы заглавными, или строчными, или титульными – когда каждое новое слово пишется с большой буквы, а остальные – маленькими.
Сравнение строк в 1С
Можно программно сравнить, какая из двух строк больше или меньше, либо проверить что строки равны.
Функции для работы с подстроками
Язык 1С позволяет находить в строке нужный текст, искать, сколько раз этот текст встречается в строке, а также заменять найденный фрагмент на другой.
Функции для работы с символами в 1С
Используя методы языка 1С, можно найти часть строки нужной длины, чтобы далее использовать фрагменты строки в алгоритмах. Например, первые 4 символа ИНН – это код налогового органа, 5 и 6 символы – код причины постановки на учет, а последний символ – контрольный разряд. Эти фрагменты называются подстроками.
Работа с многострочной строкой в 1С
Получение строк из других типов значений
При работе с большими текстовыми данными часто возникает необходимость построчного анализа и разбора. В языке 1С предусмотрены методы для работы с многострочными строками – например, можно подсчитать число строк, или получить нужную строку по номеру, или преобразовать обычную строку в многострочную.
Часто встречающиеся задачи при работе со строками
Как объединить несколько строк в одну в 1С?
Как подставить параметры в строку? Использование СтрШаблон
Как в 1С вставить кавычки в строку?
Как проверить, что строка не заполнена? Проверка на пустую строку
Превратить строку с разделителями в массив в 1С
Для более удобной работы со строками, может понадобиться разбить строку на массив подстрок по какому-нибудь разделителю – запятой, точке с запятой, или другому набору символов. При этом можно игнорировать пустые строки, либо оставлять их в составе массива.
Перечислить значения массива в виде строки в 1С
Такая задача часто возникает, когда в печатной форме, в отчете или на экране необходимо вывести значения, например через запятую. Можно перебрать все элементы и добавить запятую при помощи конкатенации строк, но в этом случае нужно анализировать, не является ли символ последним, чтобы не добавить лишнюю запятую.
Но есть способ проще – использование метода СтрСоединить. При этом после последнего элемента разделитель не добавляется. Также, обратите внимание, что в качестве разделителя может выступать любое строковое значение – запятая с пробелом, или слово, или целая фраза.