ПоискПохожейСтроки (8.3 без режима совместимости с 8.2)

yoyuyoppe 12 2

Поиск похожей строки из массива объектов для проверки на основании исходной строки.

// Функция - Поиск похожей строки из набора строк
//
// Параметры:
//  ИсходнаяСтрока		 - Строка	 - Исходная строка
//  ОбъектыДляПроверки	 - Массив	 - Массив элементов произвольного типа, в котором будем искать похожую строку
//  пНаправлениеПоиска	 - НаправлениеПоиска	 -  Указывает направление поиска подстроки в строке
//  ЖелательныйПроцентСовпадения	 - Число	 -  Ожидаемый процент совпадения подстроки поиска в проверяемой строке. По умолчанию 50
// 
// Возвращаемое значение:
// Строка  - строка с максимальным вхождением подстроки поиска
//
Функция ПоискПохожейСтроки(ИсходнаяСтрока, ОбъектыДляПроверки, пНаправлениеПоиска, ЖелательныйПроцентСовпадения)
	
	ПохожаяСтрока = "";
	
	ТаблицаСтатистики = Новый ТаблицаЗначений;
	ТаблицаСтатистики.Колонки.Добавить("Объект");
	ТаблицаСтатистики.Колонки.Добавить("ЧислоВхождений");
	
	ДлинаИсходнойСтроки = СтрДлина(ИсходнаяСтрока);
		
	Для каждого Элемент Из ОбъектыДляПроверки Цикл
		
		ТекОбъект = ВРЕГ(Элемент);
		ДлинаТекОбъекта = СтрДлина(ТекОбъект);
		
		Для Сч = 0 По ДлинаИсходнойСтроки Цикл
			
			Если пНаправлениеПоиска = НаправлениеПоиска.СНачала Тогда
				ИскомаяСтрока = Сред(ИсходнаяСтрока, 1, Сч + 1);
				НачПозицияПоиска = 1;
			Иначе	
				ИскомаяСтрока = Сред(ИсходнаяСтрока, ДлинаИсходнойСтроки - Сч, Сч + 1);
				НачПозицияПоиска = ДлинаТекОбъекта;
			КонецЕсли; 
						
			Если СтрНайти(ТекОбъект, ИскомаяСтрока, пНаправлениеПоиска, НачПозицияПоиска) > 0 Тогда
				
				СтрСтатистика = ТаблицаСтатистики.Найти(ТекОбъект, "Объект");		
				
				Если СтрСтатистика <> Неопределено Тогда
					СтрСтатистика.ЧислоВхождений = СтрДлина(ИскомаяСтрока);
				Иначе
					Если Цел(СтрДлина(ИскомаяСтрока) / ДлинаТекОбъекта * 100) > ЖелательныйПроцентСовпадения Тогда
						СтрСтатистика = ТаблицаСтатистики.Добавить();
						СтрСтатистика.Объект = ТекОбъект;
						СтрСтатистика.ЧислоВхождений = СтрДлина(ИскомаяСтрока);						
					КонецЕсли; 
				КонецЕсли; 
				
			КонецЕсли;
			
		КонецЦикла;
				
	КонецЦикла; 
	
	Если ЗначениеЗаполнено(ТаблицаСтатистики) Тогда
		ТаблицаСтатистики.Сортировать("ЧислоВхождений УБЫВ");
		ПохожаяСтрока = ТаблицаСтатистики.Получить(0).Объект;
	КонецЕсли;
	
	Возврат ПохожаяСтрока
	
КонецФункции
0

См. также

СтрШаблон (8.1, 8.2, 8.3 в режиме совместимости 8.2)

ОтборДинамическогоСписка (БСП)

ОсуществитьПоискКонтактовПоСтроке (БСП)

СформироватьСтрокуДляПоискаВЗапросе (БСП)

Значение строки поиска динамического списка

ПриИзмененииФлажкаИспользоватьПоиск (БСП)

Поиск кириллицы в строке

РазложитьСтрокуПоискаВМассивСлов (БСП)

Поиск количества ссылок на объект по измерениям в регистрах

Модератору