Как в 1с удалить часть строки используя типовые методы

Рассмотрим на примерах, способы в 1с удалить часть строки. Не смотря на то, что задача кажется простой, есть довольно много вариантов ее постановки и решения. Подробнее о строковых функциях можно прочитать в статье: Строки в 1С 8.3 — строковые функции.

Удаление известной части строки

Есть строка, из которой необходимо удалить все вхождения известной вам подстроки. Для решения необходимо использовать функцию СтрЗаменить.

Пример 1. Из строки «1С:Бухгалтерия 8» удалить подстроку «:Бухгалтерия».

Строка = "1С:Бухгалтерия 8";
Подстрока = ":Бухгалтерия";
	
НоваяСтрока = СтрЗаменить(Строка, Подстрока, "");

Заменяем «:Бухгалтерия» на пустую строку, и получаем: «1С 8».

Удаление по позиции подстроки

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

Пример 2. Из строки «Обучение программированию на языке 1С» удалить подстроку, которая начинается с девятого символа и заканчивается тридцать пятым.

Строка = "Обучение программированию на языке 1С";
	
НачальныйНомер = 9;
КонечныйНомер = 35;
ЧислоСимволов = КонечныйНомер - НачальныйНомер;
	
Подстрока = Сред(Строка, НачальныйНомер, ЧислоСимволов);
НоваяСтрока = СтрЗаменить(Строка, Подстрока, "");

Получаем подстроку по номерам символов и заменяем ее на пустую. Получаем: «Обучение 1С».

Удаление начала строки

Есть строка, в которой необходимо удалить ее левую часть. Известно, что новая строка должна начинаться с определенной фразы. Для такого случая можно использовать функцию Прав.

Пример 3. Из строки «Как в 1с удалить символы», необходимо удалить первые символы до фразы «1с».

Строка = "Как в 1с удалить символы";
НачалоСтроки = "1с";	
	
КоличествоУдаляемыхСимволов = СтрНайти(Строка, НачалоСтроки) - 1;
ДлинаСтроки = СтрДлина(Строка) - КоличествоУдаляемыхСимволов;
	
НоваяСтрока = Прав(Строка, ДлинаСтроки);

Вычисляем количество нужных символов справа и получаем новую строку: «1с удалить символы».

Удаление окончания строки

Есть строка, в которой необходимо удалить ее правую часть. Известно, что новая строка должна заканчиваться на определенную фразу. Для такого случая можно использовать функцию Лев.

Пример 4. Удалить из строки «Как в 1с удалить часть строки, используя типовые методы» все символы, после фразы » строки».

Строка = "Как в 1с удалить часть строки, используя типовые методы";	
	
СтрокаПоиска = " строки";
	
ДлинаСтрокиПоиска = СтрДлина(СтрокаПоиска);
ПозицияСтрокиПоиска = СтрНайти(Строка, СтрокаПоиска);	
	
ДлинаСтроки = ПозицияСтрокиПоиска + ДлинаСтрокиПоиска - 1;
	
НоваяСтрока = Лев(Строка, ДлинаСтроки);

Вычисляем количество нужных символов слева и получаем новую строку: «Как в 1с удалить часть строки».

Удаление одного из вхождений подстроки

В исходной строке некоторая фраза встречается несколько раз. Необходимо удалить только одно ее вхождение по условию. Для решения необходимо:

  • Определить номера начального и конечного символа нужного вхождения подстроки, при помощи функции СтрНайти;
  • После чего можно «склеить» новую строку функциями Лев и Прав, исключив найденное вхождение.

Обратите внимание на третий и пятый параметры СтрНайти. С их помощью можно осуществлять сложный поиск, указывая направление и номер вхождения подстроки.

СтрНайти(<Строка>, 
         <ПодстрокаПоиска>, 
         <Направление>, 
         <НачальнаяПозиция>, 
         <НомерВхождения>)

Пример 5. Из строки «1С 8.3 Предприятие 8.3. Обучение на примерах», удалить последнее вхождение подстроки » 8.3″.

Строка = "1С 8.3 Предприятие 8.3. Обучение на примерах";
ДлинаСтроки = СтрДлина(Строка);
	
Подстрока = " 8.3";
	
НачальныйНомер = СтрНайти(Строка, Подстрока, НаправлениеПоиска.СКонца);
ЧислоСимволов = СтрДлина(Подстрока);
	
ДлинаЛевойЧасти = НачальныйНомер - 1;
ДлинаПравойЧасти = ДлинаСтроки - ДлинаЛевойЧасти - ЧислоСимволов; 
	
НоваяСтрока = Лев(Строка, ДлинаЛевойЧасти) +
    Прав(Строка, ДлинаПравойЧасти);

Вычисляем позиции левой и правой части строки, после чего «склеиваем». Получается новая строка: «1С 8.3 Предприятие. Обучение на примерах».

Удаление повторяющихся символов

В строке необходимо удалить идущие подряд символы, оставив только первый. Для решения такой задачи необходимо:

  • Собрать массив всех вхождений символа;
  • Обходить строку и определять, подходит ли текущий символ для новой строки.

Пример 6. Удалить из строки идущие подряд пробелы, оставив только первый в цепочке.

Строка = "Удалить пробелы  идущие подряд,    кроме     первого";

ДлинаСтроки = СтрДлина(Строка);
	
Пробел = " ";
	
МассивУдаления = Новый Массив;
	
НомерВхождения = 1;
НомерСимвола = СтрНайти(Строка, Пробел,,, НомерВхождения);
	
Пока Не НомерСимвола = 0 Цикл
		
    МассивУдаления.Добавить(НомерСимвола);
		
    НомерВхождения = НомерВхождения + 1;
    НомерСимвола = СтрНайти(Строка, Пробел,,, НомерВхождения);
		
КонецЦикла;

НоваяСтрока = "";
НомерПредыдущегоПробела = -1;
	
Для НомерСимвола = 1 По ДлинаСтроки Цикл
		
    ЭлементМассива = МассивУдаления.Найти(НомерСимвола);
    ЭтоПробел = Не ЭлементМассива = Неопределено;
		
    Если ЭтоПробел Тогда

        Если НомерПредыдущегоПробела = НомерСимвола - 1 Тогда
				
	    НомерПредыдущегоПробела = НомерСимвола;
	    Продолжить;
				
	КонецЕсли;
			
	НомерПредыдущегоПробела = НомерСимвола;
			
    КонецЕсли;
		
    НоваяСтрока = НоваяСтрока + Сред(Строка, НомерСимвола, 1);
				
КонецЦикла;

После удаления лишних пробелов получаем строку: «Удалить пробелы идущие подряд, кроме первого».

Добавить комментарий

Ваш адрес email не будет опубликован.