Как сравнить номера и тексты если в них есть ошибка!?

art22

Client
Регистрация
24.06.2016
Сообщения
484
Благодарностей
69
Баллы
28
Добрый день. Как сравнить похожие номера телефонов и названии если в переменной 1, допущена 1 или 2 ошибки?

Скажем есть номер из базы 79166587441.

Из БД берется другой номер 79966587441 и сравнить их... Если допущена 1 или 2 ошибки то пропустить....

Если больше 3х ошибок или все не правильно, то завершить работу.

Ошибки могут быть в любом месте!

Реально это сделать?
 

Nord

Client
Регистрация
22.03.2012
Сообщения
2 401
Благодарностей
1 464
Баллы
113
Брать по одному символу с конца( или с начала) каждого номера и сравнивать в цикле с счетчиком на неуспех = максимум 2
 
  • Спасибо
Реакции: doc

Dimionix

Moderator
Регистрация
09.04.2011
Сообщения
3 068
Благодарностей
3 116
Баллы
113
C#:
string reference = project.Variables["Var1"].Value;
string check = project.Variables["Var2"].Value;
int errorMax = 2; // количество максимально допустимых ошибок

int error = 0;
for (int i = 0; i < reference.Length; i++)
    if (reference[i] != check[i]) error++;
if (error > errorMax)
    throw new Exception("Ошибок: " + error); // если ошибок больше максимально допустимого количества, то выход по красной
// если ошибок нет, меньше или равно максимально допустимого количества - выход по зелёной
 

art22

Client
Регистрация
24.06.2016
Сообщения
484
Благодарностей
69
Баллы
28
Брать по одному символу с конца( или с начала) каждого номера и сравнивать в цикле с счетчиком на неуспех = максимум 2
Это был бы сущий ад) там предложения будут в 6 слов)


Это прекрасный код)) Спасибо)
 
  • Спасибо
Реакции: Dimionix

art22

Client
Регистрация
24.06.2016
Сообщения
484
Благодарностей
69
Баллы
28
А можно еще в этот код добавить. Если телефон не совпадает, проверить на цифру 0, если есть 0 в место номера телефона то пропустить...

У меня в сравнении так... сделана просто '{-Variable.tel-}'=='{-Variable.tel_2-}' || '{-Variable.tel-}' == '0'
 

Dimionix

Moderator
Регистрация
09.04.2011
Сообщения
3 068
Благодарностей
3 116
Баллы
113
А можно еще в этот код добавить. Если телефон не совпадает, проверить на цифру 0, если есть 0 в место номера телефона то пропустить...

У меня в сравнении так... сделана просто '{-Variable.tel-}'=='{-Variable.tel_2-}' || '{-Variable.tel-}' == '0'
C#:
string reference = project.Variables["Var1"].Value;
string check = project.Variables["Var2"].Value;
int errorMax = 2; // количество максимально допустимых ошибок

if (reference == "0") return "ok";
int error = 0;
for (int i = 0; i < reference.Length; i++)
    if (reference[i] != check[i]) error++;
if (error > errorMax)
    throw new Exception("Ошибок: " + error); // если ошибок больше максимально допустимого количества, то выход по красной
// если ошибок нет, меньше или равно максимально допустимого количества - выход по зелёной
 

art22

Client
Регистрация
24.06.2016
Сообщения
484
Благодарностей
69
Баллы
28
Вместе с 0, пропускает еще числа до 99... надо чтобы только 0 пропустил... а 1,2...в блок пошел.

А с пробелами не работает? Скажем есть ФИО между ними 2 пробела, а в другом 1 пробел, показывает что неправильно...
 
Последнее редактирование:

Dimionix

Moderator
Регистрация
09.04.2011
Сообщения
3 068
Благодарностей
3 116
Баллы
113
Вместе с 0, пропускает еще числа до 99... надо чтобы только 0 пропустил... а 1,2...в блок пошел.
C#:
string reference = project.Variables["Var1"].Value;
string check = project.Variables["Var2"].Value;
int errorMax = 2; // количество максимально допустимых ошибок

if (reference == "0") return "ok"; // если значение переменной "0" - выход по зелёной

if (reference.Length != check.Length)
    throw new Exception("Ошибка: количество символов в переменных не равно"); // если количество символов в переменных не равно - выход по красной

int error = 0;
for (int i = 0; i < reference.Length; i++)
    if (reference[i] != check[i]) error++;

if (error > errorMax)
    throw new Exception("Ошибок: " + error); // если ошибок больше максимально допустимого количества, то выход по красной

// если ошибок нет, меньше или равно максимально допустимого количества - выход по зелёной
А с пробелами не работает? Скажем есть ФИО между ними 2 пробела, а в другом 1 пробел, показывает что неправильно...
Количество символов в значениях сравниваемых переменных должно быть равно. Без разницы какие это символы. В коде реализовано сравнение: первый символ значения переменной 1 сравнивается с первым символом значения переменной 2, второй со вторым, третий с третьим и тд.
 
  • Спасибо
Реакции: art22

Dimionix

Moderator
Регистрация
09.04.2011
Сообщения
3 068
Благодарностей
3 116
Баллы
113
Если проблема в количестве пробелов и допустимы, например, двойные пробелы, то это можно проигнорировать, как-то так:
C#:
string reference = project.Variables["Var1"].Value;
string check = project.Variables["Var2"].Value;
int errorMax = 2; // количество максимально допустимых ошибок

// Удаление пробельных символов из значений переменных
reference = Regex.Replace(reference, @"\s", string.Empty);
check = Regex.Replace(check, @"\s", string.Empty);

if (reference == "0") return "ok"; // если значение переменной "0" - выход по зелёной

if (reference.Length != check.Length)
    throw new Exception("Ошибка: количество символов в переменных не равно"); // если количество символов в переменных не равно - выход по красной

int error = 0;
for (int i = 0; i < reference.Length; i++)
    if (reference[i] != check[i]) error++;

if (error > errorMax)
    throw new Exception("Ошибок: " + error); // если ошибок больше максимально допустимого количества, то выход по красной

// если ошибок нет, меньше или равно максимально допустимого количества - выход по зелёной
 
  • Спасибо
Реакции: art22

Dr.Pipetka

Client
Регистрация
12.12.2017
Сообщения
1 289
Благодарностей
842
Баллы
113
Брать по одному символу с конца( или с начала) каждого номера и сравнивать в цикле с счетчиком на неуспех = максимум 2
Это был бы сущий ад) там предложения будут в 6 слов)


Это прекрасный код)) Спасибо)
А разве код выше, как то по другому делает?)
 
  • Спасибо
Реакции: Dimionix

Кто просматривает тему: (Всего: 2, Пользователи: 0, Гости: 2)