Forum Webscript.Ru
Программирование => PHP => Тема начата: tarya от 01 Апреля 2004, 19:39:01
-
Вопрос в том что телефонные номера бывают разные, в разные города и так далее.
Определить что междугородка легче всего первая стоит "8", а как далее? как определиться что следущии 3 цыфры это код, а может 4 последующие это год?
У меня есть все телефонные коды городов, но как теперь распарсить телефонные звонки и выбрать какой звонок был куда?
Если кто чтото подобное делал подскажите пожалуста.
Благодарствую
-
tarya В базе хранишь? Формат данных постоянный?
-
Боюсь гневной реакции Ромика, но я бы сделал регулярками :)
-
Да я и сам сделаю это регулярными выражениями, просто думаю как быть, ведь келефонный код бывает не просто 3 или 4 цыфры, но всякие вариации, и телефонный сам номер без кода тоже бывает 7, 5, 6, даже 4 и 3 символа.
Коды городов есть, я их в базу занесу, просто чтоб неделать мартышкин труд изначально решил подумать как люди делают.
Все это я делаю для учета переговоров. АТС сыплет в лог все разговоры, я потом все это дело парсю и засовую в базу данных, а потом было бы неплохо именно все это подсчитать, стоимость переговоров там и все остальное. Все как бы чудно и несложно, непонятно мне как просто сверять номер что есть например "80626454567" тут получается все так 8-06264-54567, на как быть если это вдруг 8-062-6454567 ведь и так свободно может быть.
Благодарствую тем кто помогает. Спасибо.
-
Написал такую прогу уже... Сейчас просто довожу до ума...
Считает не только МТС телефоны, но и IP-телефоны... Плюс разделение на дневной и ночной тариф...
Обошел проблему только простым обходов цикле...
-
tarya:
ведь келефонный код бывает не просто 3 или 4 цыфры
надо иметь базу с кодами. - сначала обходить и разделять телефон на код (начиная с самых длинных естественно) и сам номер
-
tarya Храни отдельно телефон и отдельно коды. В таблице телефонов заведи ссылку на IDшник кода города. И примитивным селектом это всё спокойно и красиво извлекается.
-
Neter это все замечательно за исключением тех случаев, когда ты на входе имеешь просто весь набранный номер (например взятый с АТСки)
-
Neter:
Храни отдельно телефон и отдельно коды. В таблице телефонов заведи ссылку на IDшник кода города. И примитивным селектом это всё спокойно и красиво извлекается.
Вот это мы и запутались.
а я как храню? извлекается то чудесно когда номер с атс падает целиком набранным, но я о другом говорил.
А говорил я вот о чем - как узнать код города из телефонного?
Пример: номер 4565678 - ясное дело это городской. Почему мы это знаем? да потому что нету номера 8 впереди.
Пример 2: номер 80674565678 - показывает что номер негородской, набран через 8, и это мобильный 067, это тоже легко было бы понять но есть но - а вдруг код на самом деле не 067 а 0674 - тоесть код города а не мобильника? в этом случае номер абонента не 7 циферь (4565678) а всего 6 (565678) - такое тоже ведь расространено.
Так вот далее, номера сыплются с атс в таком формате 80674565678 - межгород, мобилки, и 4565678 городские.
Городской номер это легко, но как распарсить номер 80674565678? чтоб правильно выбрать из него код города и так далее?.
Потому как кода города бывают:
067
0674
06745
и это все разные города и кода и потому цена на разговор разная.
Все кода городов я уже засунул в таблицу, теперь только научиться правлиьно вычеслять.
Спасибо.
-
Есть идея искать код в таблице так.
выбираем после 8 максимальное количество цыфр какое может быть в коде, сейчас максимум длина 5 циферь. Выбрали и сверяем в таблице кодов, если нету такого то правую удаляем и сверяем уже 4 цифери, если нету значит сверяем три цифры, а если нашлось то окей!
как такая мысль?
-
tarya
SELECT * FROM Таблица тарифов ORDER BY LENGTH(Поле кода городов) DESC
Может я не прав, но этот запрос выбирает все записи из таблицы и сортирует выборку по по убыванию, начиная с записи, у которой количество символов в поле максимальное
-
alezee:
alezee
Завсегдатай[/quote
ты вообще непонял о чем дело.
Расказываю.
Есть АТС, с нее в файл сыплется статистика переговоров по телефонам.
есть скрипт, он парсит данные, забирает раз в день данные из файла и их доводит до ума как мне нужно и засовывет в базу.
Получается у меня лог за все время.
Потом у меня есть таблица, тел кодов, в ней код и город и ссылка на область в третей табл. в ней написаны все области и их тарифы и так далее, мобильная связь и др. Вообще лучще для тарифов создять еще одну табл, бо тарифов много, на разное врямя суток свое.
Потом я хочу посмотреть статистику, простым запросом я прошу данные из лога- "дайте мне телефоны межгорода по 115 станции с такго времени до такого" - или как хочешь вообще короче.
все это дело принимается и вычеслется код города, из него город и область, из области тариф, из расчитывается протяженность звонка с сек такак как в наличии (1:34) потом все это всчитается на тариф и на время звонка и все это готовится и куда? как вывести много строк? я их принял бы классом вывода, но он принимает как я разобрался только запрос СКЛ. Потому то и спрашиваю - как мне быть, но вероятнее всего засовывать все это дело в Временную таблицу нет смысла, потому как Рома сказал ездить в москву через африку нет нужды, правда несказал он как все таки поехать, или где купить правильный билет. это жаль
-
tarya
Я прекрасно понял, о чем идет разговор... Дело в том, то я уже писал такую прогу... ОНА РАБОТАЕТ РЕАЛЬНО... АТС не Panasonic и не ХайКом сименовский...Также по ком-порту снимаю данные и обрабатываю их... Только расчет стоимости производится до того, как данные попадут в основную таблицу... Причем производятся с учетом, был ли звонок через МТС или через IP-оператора, был ли звонок по дневному или ночному тарифу...
А вот потом, я уже оперирую данными как мне надо, хочу узнать по конкретному номеру, пожалуйста... И т.д.
-
Ты спрашивал, ка распарсить телефонный номер. Я привел пример запроса. Результат этого запроса, выборка отсортированная так, что те коды городов, имеющие максимальную длину, находятся в начале... В таком случае, у тебя не получится такого что, например:
Код города Багульма 85514
Код города Набережные челны 855
Телефон №88551449264 принадлежит Набережным Челнам...
-
Мне интересно, а как городская АТС определяет куда ты звонишь, в Багульму или Набережные челны?
-
Neter
Хороший вопрос, я бы тоже хотел знать, как городская АТС определяет, куда я звоню...
Наверное многое бы прояснилось по поводу того, как определять стоимость звонка...
-
я ща во флейм это переливание из пустого в порожнее отправлю.
я же уже объяснил.
есть таблица (условно):
код/город/тариф за минуту
35/Жопинск/5
41/Сиськино/4
355/Жопино/5.5
приходит номер
8351525354
первая 8 - значит межгород, отсекаем 8
351525354
идем по таблице с кодом, городом, тарифом до первого совпадения первых Н-цифр. где Н длина текущего кода. естественно начинаем обход таблицы так, что сначала сравниваем записи с самыми длинными кодами.
Таким образом находим Жопинск
-
AliMamed
Примерно такая таблица и у меня..
Я делаю запрос, тот, который писал выше. Затем в цикле пробегаю по результату запроса и проверяю на совпадение...
Просто человек создал проблему с количеством цифр в коде города... Я ему попытался подсказать...
А алгоритм примерно такой и есть, другого я пока не нашел...
-
alezee, ааа, меня просто последний пост твой сбил с толку.
-
alezee:
alezee
Завсегдатай
да я так тоже уже делаю :)
-
tarya
Просто я сталкивался с такими проблемами, приходилось делать через... одно место. Сейчас дорабатываю... пытаюсь упростить...