Экспертная система Delphi.int.ru

Сообщество программистов
Общение, помощь, обмен опытом

Логин:
Пароль:
Регистрация | Забыли пароль?

Delphi.int.ru Expert

Другие разделы портала

Переход к вопросу:

#   

Статистика за сегодня:  


Лучшие эксперты

Подробнее »



Вопрос # 3 419

/ вопрос открыт /

Доброго времени суток, уважаемые эксперты!
У меня в наличии база данных. Перед тем как перенести в 1С хотелось бы упорядочить. Ну а суть вопроса в следующем.
Хочу разбить 3телефона на 2 составляющие - код и сам номер. Проблема в том, что где-то код указан уже в 1-ом столбце, где-то все в одном и не четкой структуры. (Примеры как забиты номера в приложении). Как Всю эту информацию упорядочить? Более 25 тыс. и не только стандартные коды но и междугородние.
Может макрос написать, но даже не представляю как это делать.

Приложение:
  1. 09679 73131
  2. 8 095 1161477
  3. 095,915 2299895,2442177
  4. +78617 701566
  5. 8914,423 7092079,679080
  6. 08135
  7. 903,926 1892330, 5299714
  8. +78617 655329
  9. 045 1016029
  10. 8-244 51285
  11. 8 095 7739526
  12. 8 095 1081575
  13. 98(353) 416528
  14.  
  15. (0722) 33-73-13
  16.  
  17.  
  18. (095) 446-5524
  19. (095) 257-4970/71
  20. +7-095-775-86-87
  21. (495) 3338517
  22. (495) 332-06-53
  23. 5044085
  24.  


Argemona Вопрос ожидает решения (принимаются ответы, доступен мини-форум)

Вопрос задала: Argemona (статус: Посетитель)
Вопрос отправлен: 19 ноября 2009, 16:44
Состояние вопроса: открыт, ответов: 0.


Мини-форум вопроса

Всего сообщений: 10; последнее сообщение — 19 ноября 2009, 19:27; участников в обсуждении: 4.
Лед и Пламень

Лед и Пламень (статус: 1-ый класс), 19 ноября 2009, 16:57 [#1]:

1. Удалить все что не является цифрой - получаем полный номер
2. Если получившаяся длинна = 10, то это МГ, если больше 10 то МН
3. в МГ телефоне первые 3 цифры и дадут тебе ADF код региона
Лед и Пламень

Лед и Пламень (статус: 1-ый класс), 19 ноября 2009, 16:58 [#2]:

ну и на первом шаге ведущую 8 удали
Вадим К

Вадим К (статус: Академик), 19 ноября 2009, 17:00 [#3]:

как приблизительно половину разбить в автоматическом режиме - я понимаю, но вот как некоторые варианты...
к примеру
903,926 1892330, 5299714
это что, два номера и для каждого свой код? оригинально.
а вот это
(3422) 10-36-68 канц., 16-55-22,10-35-24
как должно быть в результирующем варианте?

Надо помнить, что длина "кода" может варироваться, всё зависит от того, что считать кодом. Если код - это только код области, то всё хорошо, а если нет?
Вопрос два, а коды только с России, или есть и другие?

Как я бы делал. Я скриптом выбрал все номера в текстовый файл, потом на него натравил бы программку на делфи/перле. которая бы сформировала другой файл, с "исправленными номерами". То, что скрипту не удалось исправить, придется ручками.
А потом всё залили назад в базу.

Алгоритм исправления должен быть где то такой.
если первый плюс, значит это международный формат, сливаем до кучи, выкидываем скобки, точки и считаем цифры. если не учитывая +7, их не десять, то номер неверный (в России кол-во цифр фиксировано).
если первый ноль, то это скорее всего легко исправляется - заменяем ноль на +7 и по выше указанному алгоритму (вот почему я спрашивал о том, все ли номера с России)
если в номере есть запятые - надо думать о разбивке.
Галочка "подтверждения прочтения" - вселенское зло.
Вадим К

Вадим К (статус: Академик), 19 ноября 2009, 17:11 [#4]:

Цитата (Лед и Пламень):

если больше 10 то МН

да, конечно:) Расскажите это к примеру жителям Соломоновых островов:) или жителям острова Вознесения (у тех вообще 3 цифры код страны и 4 цифры телефонный номер:) - конечно, это редкие варианты, но хорошо видно главный недостаток многих программистов - надеются, что должно работать.
Галочка "подтверждения прочтения" - вселенское зло.
Егор

Егор (статус: 10-ый класс), 19 ноября 2009, 17:36 [#5]:

думаю, за раз не получится. надо будет делать в несколько итераций.

я бы сначала написал скрипт, который выделяет те номера, которые введены более-менее корректно. например "8 095 7739526" и "+78617 655329"

потом бы подправил скрипт, чтобы он выделил следующую кучу номеров

затем - следующую

и так до тех пор, пока не останутся те, которые уже придётся ручками исправлять.

за один раз-то всё равно не получится ВСЕ обработать
Опасайтесь багов в приведенном выше коде; я только доказал корректность, но не запускал его.
— Donald E. Knuth.
Argemona

Argemona (статус: Посетитель), 19 ноября 2009, 18:34 [#6]:

У меня вот мысль, что первым шагом нужно сделать, что бы в 1 ячейке был 1 тел. номер, но скобки убирать нельзя, и по к-ву знаков не посчитаешь. есть и такие фрагменты:
+7(495)223 32 76(доб.217,206), +7(926)22 22 960

дом. 22-08-64, (8182) 23-03-97
- это все в 1 ячейке.
926 1122147; +79165748096 - а вот это в 2-х

Номера только России. Но всю кодировку забить невозможно. Есть же еще определенный процент опечаток когда указано
8 (9003) номер
Вадим К

Вадим К (статус: Академик), 19 ноября 2009, 18:38 [#7]:

А почему нельзя убрать? В базе лучше хранить номера без всяких символов, а уже при выводе добавлять украшения.
Но вот с добавочными что делать... надо исправить по максимуму, а потом уже заниматься ручками с отдельными случаями.
Плюс, надо решить, как хранить номера, когда их много.
Галочка "подтверждения прочтения" - вселенское зло.
Argemona

Argemona (статус: Посетитель), 19 ноября 2009, 18:57 [#8]:

Я как раз и собираюсь сделать без всяких символов, но если на этом этапе Убрать символы, то в 20% случаях невозможно будет определить где код заканчивается, где начинается номер
пр: +7(8452)9033287244 если сейчас уберем знаки получится 84529033287244 вообще билебрда какая-то))) не разрулю тогда точно
Вадим К

Вадим К (статус: Академик), 19 ноября 2009, 19:03 [#9]:

а номер +7(8452)9033287244 точно неверный. Такой номер несуществует. вот так +79033287244 - да, всё хорошо.
Галочка "подтверждения прочтения" - вселенское зло.
Егор

Егор (статус: 10-ый класс), 19 ноября 2009, 19:27 [#10]:

я и говорю - всё за раз обрабатывать не надо. надо обработать то, что точно легко поддастся обработке.
а потом уже переходить к более трудным случаям
Опасайтесь багов в приведенном выше коде; я только доказал корректность, но не запускал его.
— Donald E. Knuth.

19 ноября 2009, 20:16: Вопрос перемещён из тематического раздела Delphi » Прочее в раздел Delphi » Алгоритмы, преобразования модератором Ерёмин А.А.

Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте.

Версия движка: 2.6+ (26.01.2011)
Текущее время: 22 февраля 2025, 11:45
Выполнено за 0.03 сек.