1С 8.3 Поиск похожей строки из набора строк - Программист 1С Минск. Автоматизация бизнеса.

Перейти к контенту

1С 8.3 Поиск похожей строки из набора строк

Данные > Примеры кода 1С > 1С 8.3 Строка, текст, буквы
Поиск похожей строки из массива объектов для проверки на основании исходной строки. Пруф: https://fastcode.im/Templates/8203/poiskpoxozhejstroki-8-3-bez-rezhima-sovmestimosti-s-8-2
ПоискПохожейСтроки (8.3 без режима совместимости с 8.2) в 1С 8.3:
// Функция - Поиск похожей строки из набора строк
//
// Параметры:
//  ИсходнаяСтрока         - Строка     - Исходная строка
//  ОбъектыДляПроверки     - Массив     - Массив элементов произвольного типа, в котором будем искать похожую строку
//  пНаправлениеПоиска     - НаправлениеПоиска     -  Указывает направление поиска подстроки в строке
//  ЖелательныйПроцентСовпадения     - Число     -  Ожидаемый процент совпадения подстроки поиска в проверяемой строке. По умолчанию 50
//
// Возвращаемое значение:
// Строка  - строка с максимальным вхождением подстроки поиска
//
Функция ПоискПохожейСтроки(ИсходнаяСтрока, ОбъектыДляПроверки, пНаправлениеПоиска, ЖелательныйПроцентСовпадения)

   ПохожаяСтрока = "";

   ТаблицаСтатистики = Новый ТаблицаЗначений;
   ТаблицаСтатистики.Колонки.Добавить("Объект");
   ТаблицаСтатистики.Колонки.Добавить("ЧислоВхождений");

   ДлинаИсходнойСтроки = СтрДлина(ИсходнаяСтрока);

   Для Каждого Элемент Из ОбъектыДляПроверки Цикл

       ТекОбъект = ВРЕГ(Элемент);
       ДлинаТекОбъекта = СтрДлина(ТекОбъект);

       Для Сч = 0 По ДлинаИсходнойСтроки Цикл

           Если пНаправлениеПоиска = НаправлениеПоиска.СНачала Тогда
               ИскомаяСтрока = Сред(ИсходнаяСтрока, 1, Сч + 1);
               НачПозицияПоиска = 1;
           Иначе
               ИскомаяСтрока = Сред(ИсходнаяСтрока, ДлинаИсходнойСтроки - Сч, Сч + 1);
               НачПозицияПоиска = ДлинаТекОбъекта;
           КонецЕсли;

           Если СтрНайти(ТекОбъект, ИскомаяСтрока, пНаправлениеПоиска, НачПозицияПоиска) > 0 Тогда

               СтрСтатистика = ТаблицаСтатистики.Найти(ТекОбъект, "Объект");

               Если СтрСтатистика <> Неопределено Тогда
                   СтрСтатистика.ЧислоВхождений = СтрДлина(ИскомаяСтрока);
               Иначе
                   Если Цел(СтрДлина(ИскомаяСтрока) / ДлинаТекОбъекта * 100) > ЖелательныйПроцентСовпадения Тогда
                       СтрСтатистика = ТаблицаСтатистики.Добавить();
                       СтрСтатистика.Объект = ТекОбъект;
                       СтрСтатистика.ЧислоВхождений = СтрДлина(ИскомаяСтрока);
                   КонецЕсли;
               КонецЕсли;

           КонецЕсли;

       КонецЦикла;

   КонецЦикла;

   Если ЗначениеЗаполнено(ТаблицаСтатистики) Тогда
       ТаблицаСтатистики.Сортировать("ЧислоВхождений УБЫВ");
       ПохожаяСтрока = ТаблицаСтатистики.Получить(0).Объект;
   КонецЕсли;

   Возврат ПохожаяСтрока

КонецФункции
//
0
комментарии
____________________
Copyright©, «Программист 1С в г.Минске», 15.03.2023
Перепечатка текста и фотографий разрешена при наличии прямой ссылки на источник
Назад к содержимому