Удалить последний символ в строке 1с
Рассмотрим на примерах, способы в 1с удалить часть строки. Не смотря на то, что задача кажется простой, есть довольно много вариантов ее постановки и решения. Подробнее о строковых функциях можно прочитать в статье: Строки в 1С 8.3 — строковые функции.
Удаление известной части строки
Есть строка, из которой необходимо удалить все вхождения известной вам подстроки. Для решения необходимо использовать функцию СтрЗаменить.
Пример 1. Из строки «1С:Бухгалтерия 8» удалить подстроку «:Бухгалтерия».
Заменяем «:Бухгалтерия» на пустую строку, и получаем: «1С 8».
Удаление по позиции подстроки
Есть строка, в которой вам известны номер начального и конечного символа подстроки, которую необходимо удалить. Для решения также подойдет функция СтрЗаменить. Но сначала необходимо получить удаляемую подстроку функцией Сред.
Пример 2. Из строки «Обучение программированию на языке 1С» удалить подстроку, которая начинается с девятого символа и заканчивается тридцать пятым.
Получаем подстроку по номерам символов и заменяем ее на пустую. Получаем: «Обучение 1С».
Удаление начала строки
Есть строка, в которой необходимо удалить ее левую часть. Известно, что новая строка должна начинаться с определенной фразы. Для такого случая можно использовать функцию Прав.
Пример 3. Из строки «Как в 1с удалить символы», необходимо удалить первые символы до фразы «1с».
Вычисляем количество нужных символов справа и получаем новую строку: «1с удалить символы».
Удаление окончания строки
Есть строка, в которой необходимо удалить ее правую часть. Известно, что новая строка должна заканчиваться на определенную фразу. Для такого случая можно использовать функцию Лев.
Пример 4. Удалить из строки «Как в 1с удалить часть строки, используя типовые методы» все символы, после фразы » строки».
Вычисляем количество нужных символов слева и получаем новую строку: «Как в 1с удалить часть строки».
Удаление одного из вхождений подстроки
В исходной строке некоторая фраза встречается несколько раз. Необходимо удалить только одно ее вхождение по условию. Для решения необходимо:
- Определить номера начального и конечного символа нужного вхождения подстроки, при помощи функции СтрНайти;
- После чего можно «склеить» новую строку функциями Лев и Прав, исключив найденное вхождение.
Обратите внимание на третий и пятый параметры СтрНайти. С их помощью можно осуществлять сложный поиск, указывая направление и номер вхождения подстроки.
Пример 5. Из строки «1С 8.3 Предприятие 8.3. Обучение на примерах», удалить последнее вхождение подстроки » 8.3″.
Вычисляем позиции левой и правой части строки, после чего «склеиваем». Получается новая строка: «1С 8.3 Предприятие. Обучение на примерах».
Удаление повторяющихся символов
В строке необходимо удалить идущие подряд символы, оставив только первый. Для решения такой задачи необходимо:
- Собрать массив всех вхождений символа;
- Обходить строку и определять, подходит ли текущий символ для новой строки.
Пример 6. Удалить из строки идущие подряд пробелы, оставив только первый в цепочке.
После удаления лишних пробелов получаем строку: «Удалить пробелы идущие подряд, кроме первого».
(4) Cooler, вариант 1 вообще не вариант, останутся два первых знака если просто написать 2-а символа отсечь - два левых останутся.
Второй Лев(Строка, СтрДлина(Строка) - 2) правильный!
(7) Cooler, харош издеваться)) хотя с (1) согласен))
еще предлагаю некоторых на курсы повышения чувства юмора. )
Спасибо за подсказку. Еще можно вопрос. При использовании этой функции в отладчике я вижу, что он отсекает, а на форме нет.
Опишу ситуацию: я загружаю файл эксель в обработку и в этом файле код груза ну например 121200, мне нужно убрать эти 2 нуля.
Может быть, потому, что строка эта заканчивается пробелами ? Из вашего кода, несмотря на приличный объем цитирования, нифига невозможно понять, что содержится в НоваяСтрока.КодГНГ.
А ведь замыкающие пробелы тоже учитываются при вычислении длины строки , и если обрезать их, то вполне может показаться как будто функция не сработала.
Что же с этим делать? Для программиста решение очевидно:
P.S. Только укрепился в своем предложении.
ТвояСтрока = "12";
СтрД = СтрДина(ТвояСтрока);
Встроенные функции языка (Script functions)
СтрДлина (StrLen)
Синтаксис:
Тип: Строка.
Исходная строка.
Возвращаемое значение:
Тип: Число.
Длина строки.
Описание:
Получает количество символов в строке.
Тонкий клиент, веб-клиент, сервер, толстый клиент, внешнее соединение.
Пример:
Встроенные функции языка (Script functions)
Лев (Left)
Синтаксис:
Тип: Строка.
Исходная строка.
(обязательный)
Тип: Число.
Количество выбираемых символов.
Возвращаемое значение:
Тип: Строка.
Строка выбранных символов.
Описание:
Выбирает первые слева символы строки.
Тонкий клиент, веб-клиент, сервер, толстый клиент, внешнее соединение.
Пример:
ИнициалИмени = Лев(Сотрудник.Имя, 1);
ИнициалОтчества = Лев(Сотрудник.Отчество, 1);
ПолноеИмя = Сотрудник.Фамилия + " "
+ ИнициалИмени + "."
+ ИнициалОтчества + ".";
Строка в 1С 8.3 - это значение примитивного типа в виде набора символов (в формате Unicode) произвольной длины. Н умерация символов в строках начинается с единицы. Для строки не доступен обход её символов оператором Для. Каждого . Из . Цикл. Строковые переменные являются набором символов которые заключаются в одинарные кавычки "".
✔ Получение длины строки
&НаКлиенте
Процедура ПолучениеДлиныСтроки ( Команда )
Длина_Строки_Число = СтрДлина ( "АБВГД" ); // 5 (символов)
&НаКлиенте
Процедура ПолучениеЧастиСтроки ( Команда )
ВычисляемаяСтрока = "1С Предприятие 8.3" ;
// N символов слева
Первые_два_символа = Лев ( ВычисляемаяСтрока , 2 ); // 1С
// N символов справа
Последние_три_символа = Прав ( ВычисляемаяСтрока , 3 ); // 8.3
// N символов из середины (с 4-го символа получим 11 символов)
Средние_символы = Сред ( ВычисляемаяСтрока , 4 , 11 ); // Предприятие
&НаКлиенте
Процедура ПолучениеЧислаВхожденийТекстаВСтроку ( Команда )
ВычисляемаяСтрока = "Между нами провода да да да да да. И ты сказала да да да." ;
Количество_вхождений = СтрЧислоВхождений ( ВычисляемаяСтрока , "да" ); // 8
&НаКлиенте
Процедура ПолучениеКодаСимвола ( Команда )
Код_из_символа = КодСимвола ( "C" ); // 67 (Латиница)
Код_первого_символа_в_строке = КодСимвола ( "Артур" ); // 1040 (Кирилица)
Код_пятого_символа_в_строке = КодСимвола ( "ABCDEFG" , 5 ); //69 (Латиница)
Символ_из_кода = Символ ( 67 ); // "A" (Латиница)
&НаКлиенте
Процедура ПреобразованиеВРегистр ( Команда )
//Регистры (верхний, нижний, титульный)
ВычисляемаяСтрока = "У лукоморья Дуб зелёный" ;
Преобразование_в_Верх_регистр = ВРег ( ВычисляемаяСтрока ); // У ЛУКОМОРЬЯ ДУБ ЗЕЛЁНЫЙ
Преобразование_в_Нижн_регистр = НРег ( ВычисляемаяСтрока ); // у лукоморья дуб зелёный
Преобразование_в_Титл_регистр = ТРег ( ВычисляемаяСтрока ); // У Лукоморья Дуб Зелёный
&НаКлиенте
Процедура ПреобразованиеСтрокиВЧисло ( Команда )
фЧисло = Число ( "987.65" ); // 987,65
фЧисло = Число ( "987,65" ); // 987,65
фЧисло = 100 + "24" ; // 124
//Для сложения числа и строки для получения строки:
фСтрока = Строка ( 100 ) + "24" ; // "10024"
&НаКлиенте
Процедура ПоискТекстаВСтроке ( Команда )
ВычисляемаяСтрока = "1С Предприятие 8.3" ;
ТекущийИндекс = Найти ( ВычисляемаяСтрока , "1С" ); // 1
&НаКлиенте
Процедура ПроверкаНаПустуюСтроку ( Команда )
ВычисляемаяСтрока = " " ;
Если ПустаяСтрока ( ВычисляемаяСтрока ) Тогда
// Т.е. может содержать только незначащие символы (например: Пробелы или Переносы)
Сообщить ( "Эта строка пустая!" );
КонецЕсли;
Проверка начала и конца строки: СтрНачинаетсяС, СтрЗаканчиваетсяНа (доступно с платформы 8.3.6.1977) в 1С 8.3:
&НаКлиенте
Процедура ПроверкаНачалаИКонцаСтроки ( Команда )
// СтрНачинаетсяС - это проверка начала строки - со слова "Как"
РезультатПроверки = СтрНачинаетсяС ( "Как хорошо жить" , "Как" ); // Истина
// СтрЗаканчиваетсяНа - это проверка конца строки: на слово "хорошо"
РезультатПроверки = СтрЗаканчиваетсяНа ( "Как хорошо жить" , "хорошо" ); // Ложь
&НаКлиенте
Процедура ПереводСтрокиНаРазныеЯзыки ( Команда )
РезультатПеревода = НСтр ( "ru = 'Как дела?'; en = 'How are you?'" ); // зависит от установленного языка
&НаКлиенте
Процедура МногострочнаяСтрока ( Команда )
//Вставка переноса в строку
ВычисляемаяСтрока =
"Оплата по договору №1" + Символы . ПС + //1-я строка
"Контрагент ""Новая жизнь""" + Символы . ПС + //2-я строка (если нужно использовать " в строке то, используются двойные кавычки "")
"Сумма 1000 руб. с НДС 20%" ; //3-я строка
Результат_число_строк = СтрЧислоСтрок ( ВычисляемаяСтрока ); // 3(строки)
Результат_2_строка = СтрПолучитьСтроку ( ВычисляемаяСтрока , 2 )); // "Контрагент ""Новая жизнь"""
&НаКлиенте
Процедура РазбиениеСтрокиСРазделителями1 ( Команда ) //Пример №1
Разделитель = ";" ;
СтрокиСРазделителем = СтрЗаменить ( "2020; 2021; 2022" , Разделитель , Символы . ПС );
Для А = 1 По СтрЧислоСтрок ( СтрокиСРазделителем ) Цикл
Сообщить ( СтрПолучитьСтроку ( СтрокиСРазделителем , А ));
КонецЦикла;
&НаКлиенте
Процедура РазбиениеСтрокиСРазделителями2 ( Команда ) //Пример №2 (доступно с платформы 8.3.6.1977)
// Параметры СтрРазделить: Строка, Разделитель(символы), Булево (по умолчанию - Истина - включать в результат пустые строки)
РезультатМассив = СтрРазделить ( "2020; 2021; 2022" , ";" ); // Массив с элементами [0] = "2020", [1] = "2021 ", [2] = "2022"
// Существует обратная функция СтрСоединить, которая наоборот преобразует массив к строке.
РезультатСтрока = СтрСоединить ( РезультатМассив , ";" ); // Строка "2020; 2021; 2022"
Войдите как ученик, чтобы получить доступ к материалам школы
Внутренний язык программирования 1С 8.3 для начинающих программистов: работа со строками в 1С
Автор уроков и преподаватель школы: Владимир Милькин
Друзья, сегодня будет интереснейший урок. Мы научимся выполнять операции со строками (мы проходили их здесь).
Наверное, не найдётся ни одного языка программирования, который не давал бы возможностей для обработки строк. Настолько это фундаментальный и необходимый тип данных.
И 1с в этом смысле не исключение. Я, как обычно, прошу вас повторять и проверять у себя весь код, который мы будем писать в этом уроке.
Откуда в программе появляются строки
Сам программист может закодировать определенное значение строки прямо в коде, используя двойные кавычки .
. и далее использовать его по своему усмотрению:
Бывает и так, что значение строки должен ввести сам пользователь. Это делается при помощи команды ВвестиСтроку:
Из чего состоит строка
Любая строка состоит из символов.
К примеру, строка "привет" состоит из символов 'п', 'р', 'и', 'в', 'е', 'т'.
К этим символам можно обращаться по их порядковому номеру. При этом нумерация символов в строке (в отличие от коллекций) начинается не с 0, а с 1.
Узнать общее количество символов в строке можно при помощи функции СтрДлина. Она принимает на вход строку и возвращает нам число символов в этой строке.
Таким образом, цикл обхода строки будет таким:
Если мы запустим эту программу на компьютере, то увидим такой результат:
Мы научились получать номера символов в строке, но как получать сами символы?
За получение нужного символа (или даже группы символов) из строки отвечает функция Сред (сокращение от слов "средина", "средний").
Она принимает три параметра:
- Саму строку.
- Номер символа в строке, который нужно получить.
- Количество символов, которое нужно получить.
В нашем случае мы будем получать по одному символу, поэтому третий параметр у нас всегда будет равен 1.
Итак, перепишем наш код вот так:
Теперь вывод будет совсем другим:
Что представляет из себя символ
Мне иногда кажется, что всё в этом мире есть числа . И символы строки, кстати, не исключение.
И это на самом деле так, ведь каждому значению символа соответствует определенное число, его код.
Зачем вообще может понадобиться переводить символ в числовой код и обратно? Например, если мы захотим написать программу для шифрования и дешифрования текстов. А мы захотим и сделаем это в следующем модуле школы.
За перевод символа в числовой код отвечает функция КодСимвола. Она принимает строку и порядковый номер символа в ней, а возвращает числовой код этого символа.
Давайте выведем числовой код каждого символа нашей строки:
Запустим эту программу, вывод будет таким:
Получается, что, к примеру, символу 'п' соответствует числовой код 1087? Да, это действительно так. Проверим это.
Для этого я сообщу вам способ для обратного перевода: из числового кода в символ. За такой перевод отвечает функция Символ. Она принимает на вход числовой код, а возвращает символ.
Объединение строк
Давайте представим, что у нас есть две вот такие строки .
. и мы хотим сложить (ещё говорят "склеить", "объединить") эти строки вместе, чтобы за значением первой строки сразу следовало значение второй.
Это делается при помощи оператора плюс (+), вот так:
Выведем эту строку пользователю:
Выглядит не очень, правда?
Давайте усложним задачу - требуется объединить эти строки, но между ними вставить пробел, а в конце добавить восклицательный знак.
Вот так гораздо лучше!
Поиск в строке
Давайте рассмотрим такую интересную задачу. Попросим пользователя ввести любой текст, но чтобы в нём встречалось (или нет) слово "счастье".
А в ответ мы будем говорить пользователю в какой позиции в строке находится это слово.
К примеру, если пользователь введёт строку "высыпаться по утрам - счастье", то программа должна ему сказать, что слово "счастье" есть в строке и оно находится в позиции 23.
Будем писать программу по частям.
Сначала напишем ввод строки от пользователя:
За поиск в строке отвечает функция СтрНайти.
На вход она принимает 2 параметра (на самом деле параметров больше, но мы рассмотрим только первые два):
- Строку, в которой надо искать.
- Часть строки (её ещё называют "подстрока"), которую надо найти.
Функция возвращает 0, если вхождение не найдено и позицию в строке, если вхождение найдено. Функция ищет только первое вхождение подстроки в строку.
С учётом этого продолжим написание программы вот так:
Замена в строке
А давайте подшутим над пользователем?
Пусть он введёт строку со словом "счастье", а мы выведем его же строку, в которой заменим слово "счастье", например, на "удовольствие".
За замену одной части строки на другую отвечает функция СтрЗаменить.
На вход она принимает 3 параметра:
- Строку, в которой нужно сделать замену.
- Подстроку, которую надо найти и заменить.
- Подстроку, на которую нужно заменить.
Функция возвращает строку, полученную в результате замены. При этом функция заменяет все вхождения.
Верхний и нижний регистры
А вы заметили, что один и тот же символ может иметь два варианта, например: 'п' и 'П'. Первый вариант называется "нижний регистр", а второй - "верхний регистр".
И для компьютера это разные буквы. Мы можем легко в этом убедиться, если выведем числовые коды этих букв:
Именно поэтому для компьютера, к примеру, строка "привет" будет не равна строке "Привет":
Компьютер при сравнении строк сравнивает числовой код каждого символа одной строки с соответствующим ему (по порядку) числовым кодом символа другой строки. И если есть хотя бы одно неравенство - строки считаются различными.
Но у нас есть замечательная возможность менять регистр строк: из верхнего в нижний и наоборот. За это отвечают функции НРег (сокращение от "нижний регистр") и ВРег (сокращение от "верхний регистр").
Когда это может быть полезно? Вспомните задачу, когда мы заменяли слово "счастье" на "удовольствие".
Функция СтрЗаменить (как и Найти) ищет подстроку с учётом регистра. То есть если пользователь введет вместо "счастье", например, "Счастье", то программа не найдёт этого вхождения.
И чтобы поиск и замена не зависели от того в каком регистре ввёл строку пользователь, мы напишем вот так:
Теперь, даже если пользователь введёт "Любимая работа - это СЧАСТЬЕ!" программа сможет найти слово "счастье" и вывести пользователю "любимая работа - это удовольствие!".
Подведём итоги
Мы рассмотрели основные операции над строками, но на самом деле их больше.
Некоторые из них вы можете изучить вместе с примерами в справочнике по языку 1с.
Строка — примитивный тип данных в языке программирования 1С. Помимо 1С, этот тип данных используется во всех известных языках программирования, обычно он называется «string».
Функции работы со строками в 1С
Рассмотрим основные функции встроенного языка программирования 1С.
Строка
Функция Строка() позволяет получить текстовое представление переменных других типов.
СтрДлина
Функция позволяет получить количество символов в строке 1C, включая пробелы и незначащие символы.
СокрЛП, СокрЛ, СокрП
Если вы только начинаете программировать в 1С или просто хотите систематизировать свои знания - попробуйте Школу программирования 1С нашего друга Владимира Милькина. Пошаговые и понятные уроки даже для новичка с поддержкой учителя.
Попробуйте бесплатно по ссылке >>
Полезная функция для удаления незначащих символов в строковом значении. СокрЛ обрабатывает символы, стоящие слева от последнего значащего символа, СокрП — справа. А СокрЛП — справа и слева.
Помимо пробелов, функция 1C удаляет такие символы, как перенос строки, неразрывный пробел и т.д.
Лев, Прав, Сред
С помощью данных функций очень просто получить первые (Лев) или последние (Прав) символы в строке, а также произвольное количество символов (Сред).
Найти
Функция для поиска подстроки внутри другой подстроки. Синтаксис Найти(, ). Функция возвращает число — номер позиции символа (или символов) в исходной подстроке. Если подстроки не найдено, вернётся число 0. Если в искомой подстроке есть несколько вхождений, вернется номер позиции первого совпадения.
ВРег, НРег, ТРег
Функции для управления регистром строки. ВРег — преобразует строку в верхний регистр. НРег — в нижний. ТРег — у каждого нового слова первая буква преобразуется в верхний регистр, остальные в нижний.
ПустаяСтрока
Функция, позволяющая сравнить исходную строку с пустой строкой. Проверяется наличие незначащих символов.
Аналогично можно проверить строку на пустое значение следующим образом:
СтрЗаменить
Функция СтрЗаменить позволяет массово заменить искомое значение на нужное нам. Синтаксис:
СтрЧислоСтрок
Позволяет получить количество строк в многострочном тексте. Функция считает количество переносов строк (Символы.ПС).
Например, построчная обработка текстового фрагмента:
СтрПолучитьСтроку
С помощью данной функции можно получить произвольную строку из многострочного текста. Синтаксис — СтрПолучитьСтроку(, ).
СтрЧислоВхождений
Функция для подсчета числа вхождений произвольного фрагмента в строку. Например, подсчитать количество вхождений определенных символов или слов в текст.
Символ и КодСимвола
Две обратные функции. С помощью КодСимвола можно получить код символа в кодировке Unicode. Функцией Символ можно получить символ, зная Unicode кодификатор.
Часто встречающиеся задачи по работе со строками в 1С
Рассмотрим классические примеры решения задач в работе с текстовыми переменными.
Конкатенация строк в 1С
Конкатенация, или объединение строк в 1С делается оператором «+».
Преобразовать число в строку
Тут всё просто. Достаточно использовать метод «Строка()»:
Однако может смущать наличие неразрывного пробела.
Его можно убрать с помощью замены неразрывного пробела на пустую строку:
или с помощью метода Формат:
Кавычки в строке 1С
Для новичков достаточно трудно установить кавычки внутри строки, хотя в этом нет ничего сложного. Достаточно внутри строки поставить вместо одних кавычек двое.
Символ переноса строки
Символ переноса строки необходим для переноса строки на следующую строку. В 1С это можно сделать с помощью специальной конструкции «Символы.ПС».
Сравнение строк в 1С
Сравнить строки достаточно просто с помощью оператора сравнения — «=».
Однако для получения корректного сравнения часто требуется возвести строки в один регистр и убрать незначащие символы:
Таким образом, мы получим более точное сравнение двух строк.
Убрать пробелы в строке 1С
Достаточно часто нужно убрать пробелы в строке 1С.
Если требуется убрать пробелы справа и слева:
Если требуется убрать абсолютно все пробелы, можно заменить их на пустую строку:
Если требуется убрать неразрывные пробелы из строки, которая получена из числового типа, сделать это можно так:
Другие статьи по 1С:
Если Вы начинаете изучать 1С программирование, рекомендуем наш курс (не забудьте подписаться на YouTube — регулярно выходят новые видео):
Читайте также: