Сравнение двух строк

FastCode 10 1

Результатом сравнения двух строк является массив, который показывает, что от "От" до "До" позиции строки совпадают (ОК = Истина) или нет.

Автор: ildarovich

Функция ТаблицаСравненияСтрок_(С1, С2) Экспорт
   Ответ = Новый ТаблицаЗначений; //Ответ = НоваяТаблицаЗначений("От, До, ОК");
   Ответ.Колонки.Добавить("От");
   Ответ.Колонки.Добавить("До"); 
   Ответ.Колонки.Добавить("ОК");  
   ЗаполнитьЗначенияСвойств(Ответ.Добавить(), Новый Структура("От, ОК", 1, Сред(С1, 1, 1) = Сред(С2, 1, 1)));
   Для ё = 2 По Макс(СтрДлина(С1), СтрДлина(С2)) Цикл
      Если Ответ[0].ОК <> (Сред(С1, ё, 1) = Сред(С2, ё, 1)) Тогда
         ЗаполнитьЗначенияСвойств(Ответ.Вставить(0), Новый Структура("От, ОК", ё, НЕ Ответ[1].ОК));                            
         Ответ[1].До = ё - 1
      КонецЕсли      
   КонецЦикла;
   Ответ[0].До = Макс(СтрДлина(С1), СтрДлина(С2));
   Возврат Ответ
КонецФункции

//С дихотомией

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

Похожие публикации

Сравнение двух массивов

Кеширование текущей строки для сравнения при окончании редактирования

Проверка совпадения таблиц путем сравнения полного и внутреннего соединения

Сравнение плановых и фактических дней отпуска

Объединение данных двух периодических регистров

Модератору