Поиск и замена строк без учета пробелов, переносов строк и табуляций

10.09.17

Разработка - Инструментарий разработчика

Поиск и замена строк игнорируя пробелы, переносы строк и табуляции. Обработка тестировалась на самописной конфигурации под Управляемыми формами, при режиме совместимости "Версия 8.3.6".

Скачать исходный код

Наименование Файл Версия Размер
Поиск и замена строк без учета пробелов, переносов строк и табуляций:
.epf 13,43Kb
2
.epf 13,43Kb 2 Скачать

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

Например, функция находит строку «искомый текст» в тексте
«тут
    где-то    
        должен быть
            (искомый
                текст
)
»

Обработка-пример прилагается (управляемые формы).

функция строка поиск замена

См. также

Infostart Toolkit: Инструменты разработчика 1С 8.3 на управляемых формах

Инструментарий разработчика Роли и права Запросы СКД Платформа 1С v8.3 Управляемые формы Запросы Система компоновки данных Конфигурации 1cv8 Платные (руб)

Набор инструментов программиста и специалиста 1С для всех конфигураций на управляемых формах. В состав входят инструменты: Консоль запросов, Консоль СКД, Консоль кода, Редактор объекта, Анализ прав доступа, Метаданные, Поиск ссылок, Сравнение объектов, Все функции, Подписки на события и др. Редактор запросов и кода с раскраской и контекстной подсказкой. Доработанный конструктор запросов тонкого клиента. Продукт хорошо оптимизирован и обладает самым широким функционалом среди всех инструментов, представленных на рынке.

10000 руб.

02.09.2020    126624    685    389    

737

Infostart PrintWizard - создание и редактирование печатных форм в 1С 8.3

Пакетная печать Печатные формы Инструментарий разработчика Платформа 1С v8.3 Запросы 1С:Зарплата и кадры бюджетного учреждения 1С:Конвертация данных 1С:ERP Управление предприятием 2 1С:Управление торговлей 11 Платные (руб)

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

18000 руб.

06.10.2023    8335    24    6    

45

Infostart УДиФ: Управление данными и формами 1С

Инструменты администратора БД Инструментарий разработчика Роли и права Платформа 1С v8.3 Конфигурации 1cv8 Россия Платные (руб)

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

10000 руб.

10.11.2023    4693    12    2    

38

SALE! %

PowerTools

Инструментарий разработчика Инструменты администратора БД Платформа 1С v8.3 Управляемые формы Конфигурации 1cv8 Россия Платные (руб)

Универсальный инструмент программиста для администрирования конфигураций. Сборник наиболее часто используемых обработок под единым интерфейсом.

3600 2280 руб.

14.01.2013    178881    1084    0    

862

Бустер Конвертации данных 3 (Infostart Toolkit)

Инструментарий разработчика 8.3.14 1С:Конвертация данных Россия Платные (руб)

Расширение для конфигурации “Конвертация данных 3”. Добавляет подсветку синтаксиса, детальную контекстную подсказку, глобальный поиск по коду.

15000 руб.

07.10.2021    15082    3    12    

37

Многопоточность. Универсальный «Менеджер потоков» 2.1

Инструментарий разработчика Платформа 1С v8.3 Конфигурации 1cv8 Россия Платные (руб)

Восстановление партий или взаиморасчетов, расчет зарплаты, пакетное формирование документов или отчетов - теперь все это стало доступнее. * Есть желание повысить скорость работы медленных алгоритмов! Но... * Нет времени думать о реализации многопоточности? * о запуске и остановке потоков? * о поддержании потоков в рабочем состоянии? * о передаче данных в потоки и как получить ответ из потока? * об организации последовательности? Тогда ЭТО - то что надо!!!

5000 руб.

07.02.2018    99807    240    97    

298

1С HTML Шаблоны / HTML Templates

Инструментарий разработчика Платформа 1С v8.3 Конфигурации 1cv8 Платные (руб)

Быстрая и удобная обработка для работы с шаблонами HTML. Позволяет легко и быстро формировать код HTML.

2040 руб.

27.12.2017    28402    4    10    

16

[ЕХТ] Фреймворк для Расширений 1С

Инструментарий разработчика Платформа 1С v8.3 Управляемые формы Платные (руб)

"Фреймворк для Расширений 1С" это универсальное и многофункциональное решение, упрощающее разработку и поддержку создаваемых Расширений. Поставляется в виде комплекта из нескольких Расширений с открытым исходным кодом. Работает в любых Конфигурациях в режиме Управляемого приложения с режимом совместимости 8.3.12 и выше без необходимости внесения изменений в Конфигурацию.

3000 руб.

27.08.2019    18498    6    8    

40
Комментарии
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
1. mismak 2 10.09.17 18:26 Сейчас в теме
Функция стрНайтиНесущуюСтроку ищет подстроку в строке,
функция стрЗаменитьНесущуюСтроку заменяет подстроку на заданную строку

Код:
Функция стрРазобратьПоСловам(Текст, Старт=Неопределено, Стоп=Неопределено)
	
	Длина	=	СтрДлина(Текст);
	
	рСтарт	=	?( Старт	=	Неопределено, 1, Макс(1, Старт) );
	рСтоп	=	?( Стоп		=	Неопределено, Длина, Мин(Длина, Стоп) );
	
	рТекст	=	Текст;
	
	кНеБуквы	=	"=+-/*"+
					"`'"""+
					",.?!;:"+
					"<>()[]{}"+
					"@#$%^&"+
					"\/|";
	кРазрывы	=	Символы.ВК	+	
					Символы.ВТаб +
					Символы.НПП	+
					Символы.ПС	+
					Символы.ПФ	+
					Символы.Таб	+
					" ";
	
	сНеБуквы	=	Новый Соответствие;
	Для Сч		=	1 по СтрДлина(кНеБуквы) Цикл 
		сНеБуквы.Вставить( Сред(кНеБуквы, Сч, 1), Истина );
	КонецЦикла;
	сРазрывы	=	Новый Соответствие;
	Для Сч		=	1 по СтрДлина(кРазрывы) Цикл 
		сРазрывы.Вставить( Сред(кРазрывы, Сч, 1), Истина );
	КонецЦикла;
	
	
	// -*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-
	Слова		=	Новый Массив;
	Начало		=	Неопределено;
	Конец		=	Неопределено;
	
	// все буквы кроме разрывов попадают в буфер
	// при этом буквы группируются, не буквы по одной
	Для Сч	=	рСтарт по рСтоп Цикл 
		
		Сим	=	Сред( рТекст, Сч, 1 );
		
		флгЭтоРазрвыв	=	( НЕ сРазрывы[ Сим ]	=	Неопределено );
		
		Если флгЭтоРазрвыв Тогда 
			// это разрыв
			// сброс буферов
			Конец	=	Сч-1;
			
		Иначе
			// это не разрыв
			
			Если Начало	=	Неопределено Тогда 
				Начало	=	Сч;
			КонецЕсли;
			
			флгЭтоБуква		=	(сНеБуквы[ Сим ]	=	Неопределено);
			
			Если НЕ флгЭтоБуква Тогда 
				// сброс буферов
				Конец	=	Сч-1;
			ИначеЕсли Сч	=	рСтоп Тогда 
				// это конец
				Конец	=	Сч;
			КонецЕсли;
			
		КонецЕсли;	//	Если флгЭтоРазрвыв Тогда 
		
		// сброс буферов
		Если НЕ Конец	=	Неопределено Тогда 
			
			Если НЕ Начало	=	Неопределено Тогда 
				
				// буфер
				текДлина	=	Конец	-	Начало	+	1;
				
				Если текДлина	>	0 Тогда 
					
					Слова.Добавить( 
						Новый Структура( "Начало,Конец,Длина,Слово",
							Начало, Конец, текДлина, Сред(Текст, Начало, текДлина)
						)			
					);
					
				КонецЕсли;
				
			КонецЕсли;	
			
			Начало	=	Неопределено;
			Конец	=	Неопределено;
			
		КонецЕсли;	//	Если НЕ Конец	=	Неопределено Тогда 
		
		Если Начало	=	Неопределено 
			И не флгЭтоРазрвыв 
			И не флгЭтоБуква Тогда 
			// если текущий символ - не буква, сбрасываем её
			Слова.Добавить( 
				Новый Структура( "Начало,Конец,Длина,Слово",
					Сч, Сч, 1, Сим
				)			
			);
		КонецЕсли;
		
		
	КонецЦикла; // Для Сч	=	Старт по Стоп Цикл 
	
	Возврат Слова;
	
КонецФункции

// Ищет Массив в массиве
// ПрерватьПоискНаВхожденииНомер	-	0-все, 1..n-количество вхождений

Функция масНайти(БольшойМассив, ИмяРеквизитаБольшого=Неопределено, 
					МалыйМассив, ИмяРеквизитаМалого=Неопределено,
					ПрерватьПоискНаВхожденииНомер=1
				)
	
	Рез				=	Новый Массив;
	
	Если БольшойМассив.Количество()	<	МалыйМассив.Количество() Тогда 
		Возврат Рез;
	КонецЕсли;
	
	
	
	Больших		=	БольшойМассив.Количество();
	Малых		=	МалыйМассив.Количество();
	
	Для ИндексБольшой	=	0 по Больших	-	Малых Цикл 
		
		Найдено	=	Истина;
		Для ИндексМалый	=	0 по Малых-1 Цикл 
			
			ЭлементБ	=	БольшойМассив[ ИндексБольшой	+	ИндексМалый ];
			ЭлементМ	=	МалыйМассив[ ИндексМалый ];
			
			Если ИмяРеквизитаБольшого	=	Неопределено Тогда 
				ЗначениеБ	=	ЭлементБ;
			Иначе
				ЗначениеБ	=	ЭлементБ[ ИмяРеквизитаБольшого ];
			КонецЕсли;
			
			Если ИмяРеквизитаМалого	=	Неопределено Тогда 
				ЗначениеМ	=	ЭлементМ;
			Иначе
				ЗначениеМ	=	ЭлементМ[ ИмяРеквизитаМалого ];
			КонецЕсли;
			
			Найдено		=	( ЗначениеБ	=	ЗначениеМ );
			Если НЕ Найдено Тогда 
				Прервать;
			КонецЕсли;
			
		КонецЦикла;	//	Для ИндексМалый	=	0 по Малых-1 Цикл 
		
		Если Найдено Тогда 
			Рез.Добавить( ИндексБольшой );
			Если ПрерватьПоискНаВхожденииНомер	<>	0	
				И Рез.Количество()	=	ПрерватьПоискНаВхожденииНомер Тогда 
				Прервать;
			Иначе
				// переносим
				ИндексБольшой	=	ИндексБольшой	+	Малых	-	1;
			КонецЕсли;
		КонецЕсли;
		
	КонецЦикла;	//	Для ИндексБольшой	=	0 по Больших	-	Малых Цикл 
	
	Возврат Рез;
	
КонецФункции




Функция стрНайтиНесущуюСтроку( Текст, Искомое, Старт=Неопределено, Стоп=Неопределено, ЧувствительностьКРегистру=Ложь, ПрерватьПоискНаВхожденииНомер=1)
	
	Рез		=	Новый Массив;
	
	Длина	=	СтрДлина(Текст);
	
	рСтарт	=	?( Старт	=	Неопределено, 1, Макс(1, Старт) );
	рСтоп	=	?( Стоп		=	Неопределено, Длина, Мин(Длина, Стоп) );
	
	ДлинаПоля		=	(рСтоп	-	рСтарт	+	1);
	ДлинаИскомого	=	СтрДлина(Искомое);
	
	Если ДлинаИскомого	>	ДлинаПоля Тогда 
		Возврат Рез;
	КонецЕсли;
	
	рТекст		=	?( ЧувствительностьКРегистру, Текст, ВРег(Текст) );
	рИскомое	=	?( ЧувствительностьКРегистру, Искомое, ВРег(Искомое) );
	
	масТекст	=	стрРазобратьПоСловам( рТекст, рСтарт, рСтоп );
	масИскомое	=	стрРазобратьПоСловам( рИскомое );
	ИскомыхСлов	=	масИскомое.Количество();
	
	Найденное	=	масНайти( масТекст, "Слово", масИскомое, "Слово", ПрерватьПоискНаВхожденииНомер );
	
	Для Каждого ОчереднаяПозиция из Найденное Цикл 
	
		ИндексПервого		=	ОчереднаяПозиция;
		ИндексПоследнего	=	ИндексПервого	+	ИскомыхСлов	-	1;
		ПервоеСлово			=	масТекст[ ИндексПервого ];
		ПоследнееСлово		=	масТекст[ ИндексПоследнего ];
		НоваяЗапись	=	Новый Структура("Позиция,ПозицияПоследнего,Длина",
			ПервоеСлово.Начало,
			ПоследнееСлово.Конец,
			ПоследнееСлово.Конец	-	ПервоеСлово.Начало	+	1
		);
		Рез.Добавить( НоваяЗапись );
	
	КонецЦикла;
	
	Возврат Рез;
	
КонецФункции


Функция стрЗаменитьНесущуюСтроку(Текст, НесущаяСтрока, ТекстЗамены, ЧувствительностьКРегистру=Ложь)
	
	Рез		=	"";
	рСтарт	=	1;
	Длина	=	СтрДлина( Текст );
	
	Позиции	=	стрНайтиНесущуюСтроку( Текст, НесущаяСтрока, рСтарт,, ЧувствительностьКРегистру, 0 );
	
	Для Каждого Позиция из Позиции Цикл 
		
		Рез	=	Рез	+	Сред( Текст, рСтарт, Позиция.Позиция-рСтарт );
		Рез	=	Рез	+	ТекстЗамены;
		
		рСтарт	=	Позиция.ПозицияПоследнего	+	1;
		
	КонецЦикла;	//	Для Каждого Позиция из Позиции Цикл 
	
	Если НЕ рСтарт	>	Длина Тогда 
		Рез	=	Рез	+	Сред( Текст, рСтарт );
	КонецЕсли;
		
		
	Возврат Рез;
	
КонецФункции

Показать
2. romankoav 4 29.08.18 17:21 Сейчас в теме
(1) Поясните назначение функций. чем отличается например от СтрЗаменить()
3. mismak 2 11.09.18 13:39 Сейчас в теме
(2)СтрЗаменить() выполняет точный поиск по заданной строке. Моя функция стрЗаменитьНесущуюСтроку() не обращает внимания на пробелы, табуляции и символы переноса строки, и может не обращать внимания на регистр.
Становится возможным заменить строку "Строка поиска" в тексте "Строка поиска", что бывает полезным при работе с текстами запроса, где искомые подстроки могут быть на разных строках с разным количеством пробелов. Например, ТекстЗапроса = "ГДЕ
| Т.Склад = &Склад".
Требуется убрать из запроса отбор. Вот:
ТекстЗапроса = стрЗаменитьНесущуюСтроку(ТекстЗапрос, "где Т.Склад=&Склад", "", Истина );
Оставьте свое сообщение