Преобразование номеров — различия между версиями

Материал из TaxiMaster
Перейти к: навигация, поиск
м (орфоссылка)
(в соответствии с #1765)
Строка 2: Строка 2:
 
Эта функция берет начало со времен, когда по каким-то причинам устройство SpRecord передавало в [[модуль SpRecord]] номера, которые начинались с <tt>07</tt> или <tt>+7</tt> вместо <tt>8</tt>.
 
Эта функция берет начало со времен, когда по каким-то причинам устройство SpRecord передавало в [[модуль SpRecord]] номера, которые начинались с <tt>07</tt> или <tt>+7</tt> вместо <tt>8</tt>.
 
Функция нацелена на то, чтобы привести любой номер телефона к тому виду, который принят за стандарт и используется внутри [[База данных|базы данных]].
 
Функция нацелена на то, чтобы привести любой номер телефона к тому виду, который принят за стандарт и используется внутри [[База данных|базы данных]].
Первым решением было использование регулярных выражений [http://ru.wikipedia.org/wiki/Regex], но такой подход мог показаться слишком сложным, поэтому было принято решение ввести язык с примитивным синтаксисом.
+
Первым решением было использование регулярных выражений [http://ru.wikipedia.org/wiki/Regex], но такой подход мог показаться слишком сложным и существенно замедлить работу программы, поэтому было принято решение ввести язык с примитивным синтаксисом.
  
 
== Логическая модель ==
 
== Логическая модель ==
Строка 13: Строка 13:
 
# <tt>N</tt> — количество знаков в номере телефона. Если в номере поступившего телефона знаков меньше или больше N, он не обрабатывается настоящим правилом.
 
# <tt>N</tt> — количество знаков в номере телефона. Если в номере поступившего телефона знаков меньше или больше N, он не обрабатывается настоящим правилом.
 
# <tt>S1</tt> — это подстрока номера телефона, по наличию которой программа принимает решение об обработке телефона. Если в ''левой части номера телефона'' встречается такая подстрока, она обрезается.  
 
# <tt>S1</tt> — это подстрока номера телефона, по наличию которой программа принимает решение об обработке телефона. Если в ''левой части номера телефона'' встречается такая подстрока, она обрезается.  
# <tt>S2</tt> — строка, которая подставляется ''слева от оставшейся части.''
+
# <tt>S2</tt> — строка, которая подставляется к оставшейся части.
  
 
Например, если есть правило <tt>12;07;8</tt>, то при поступлении номера, в котором 12 знаков, и первые знаки — <tt>07</tt>, от него отрежутся эти знаки, и к левой части присоединится <tt>8</tt>: ''079090123456 → 89090123456''.
 
Например, если есть правило <tt>12;07;8</tt>, то при поступлении номера, в котором 12 знаков, и первые знаки — <tt>07</tt>, от него отрежутся эти знаки, и к левой части присоединится <tt>8</tt>: ''079090123456 → 89090123456''.
 +
 +
Перед <tt>N</tt> может стоять знак <tt>-</tt> (минус), что означает, что нужно подставить <tt>S2</tt> не слева, а ''справа''.
 +
То есть, например, если есть правило <tt>-12;;#</tt>, то к номеру из 12 цифр ''справа'' подставится символ решетки: ''+79090123456 → +79090123456#''.
 +
 +
{{info|
 +
В некоторых случаях при подстановке к концу номера символа <tt>#</tt> набор через устройства SpRecord происходит быстрее.
 +
Нет никакого обоснования подобной работе SpRecord, поэтому подстановка решетки может ускорить набор номера, а может не ускорить.
 +
}}
  
 
=== Частный случай правила: второй параметр отсутствует ===
 
=== Частный случай правила: второй параметр отсутствует ===

Версия 08:16, 13 июля 2009

Преобразование номеров — это специальная функция Такси-Мастер, позволяющая изменять номера телефонов, принимаемые модулями, работающими со средствами связи (например, модуль «Средства связи»), и отправляемые в них. Эта функция берет начало со времен, когда по каким-то причинам устройство SpRecord передавало в модуль SpRecord номера, которые начинались с 07 или +7 вместо 8. Функция нацелена на то, чтобы привести любой номер телефона к тому виду, который принят за стандарт и используется внутри базы данных. Первым решением было использование регулярных выражений [1], но такой подход мог показаться слишком сложным и существенно замедлить работу программы, поэтому было принято решение ввести язык с примитивным синтаксисом.

Логическая модель

Правила записываются в следующем виде:

N;S1;S2

Здесь:

  1. N — количество знаков в номере телефона. Если в номере поступившего телефона знаков меньше или больше N, он не обрабатывается настоящим правилом.
  2. S1 — это подстрока номера телефона, по наличию которой программа принимает решение об обработке телефона. Если в левой части номера телефона встречается такая подстрока, она обрезается.
  3. S2 — строка, которая подставляется к оставшейся части.

Например, если есть правило 12;07;8, то при поступлении номера, в котором 12 знаков, и первые знаки — 07, от него отрежутся эти знаки, и к левой части присоединится 8: 079090123456 → 89090123456.

Перед N может стоять знак - (минус), что означает, что нужно подставить S2 не слева, а справа. То есть, например, если есть правило -12;;#, то к номеру из 12 цифр справа подставится символ решетки: +79090123456 → +79090123456#.

Интересная информация

В некоторых случаях при подстановке к концу номера символа # набор через устройства SpRecord происходит быстрее. Нет никакого обоснования подобной работе SpRecord, поэтому подстановка решетки может ускорить набор номера, а может не ускорить.

Частный случай правила: второй параметр отсутствует

Правило может быть записано так:

N;;S2

В этом случае подстрока S1 — пустая, то есть, фактически, от номера телефона не будет отрезано ничего, однако, при этом к нему будет подставлена подстрока S2. Правило сработает в случае, когда в номере телефона N цифр.

Например, если есть правило 7;;8495, то к входящему номеру, состоящему из 7 цифр, будет подставлен код Москвы: 7123456 → 84957123456.

Частный случай правила: третий параметр отсутствует

Правило может быть записано так:

N;S1;

В этом случае, если брать за пример предыдущий, от поступившего номера телефона будет отрезана подстрока S1, но при этом ничего не добавится слева, поскольку S2 в данном случае — пустая строка. Правило сработает в случае, когда в номере телефона N цифр, и первые цифры совпадают с цифрами, указанными в S1.

Например, если есть правило 11;8495;, то от входящего номера, который начинается на 8495 и имеет 11 цифр, будет отрезан код Москвы (8495): 84957123456 → 7123456.