|
Вопрос # 3 419/ вопрос открыт / |
|
Доброго времени суток, уважаемые эксперты!
У меня в наличии база данных. Перед тем как перенести в 1С хотелось бы упорядочить. Ну а суть вопроса в следующем.
Хочу разбить 3телефона на 2 составляющие - код и сам номер. Проблема в том, что где-то код указан уже в 1-ом столбце, где-то все в одном и не четкой структуры. (Примеры как забиты номера в приложении). Как Всю эту информацию упорядочить? Более 25 тыс. и не только стандартные коды но и междугородние.
Может макрос написать, но даже не представляю как это делать.
Приложение: Переключить в обычный режим- 09679 73131
- 8 095 1161477
- 095,915 2299895,2442177
- +78617 701566
- 8914,423 7092079,679080
- 08135
- 903,926 1892330, 5299714
- +78617 655329
- 045 1016029
- 8-244 51285
- 8 095 7739526
- 8 095 1081575
- 98(353) 416528
-
- (0722) 33-73-13
-
-
- (095) 446-5524
- (095) 257-4970/71
- +7-095-775-86-87
- (495) 3338517
- (495) 332-06-53
- 5044085
-
 |
Вопрос задала: 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 (статус: Посетитель), 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 (статус: Посетитель), 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 » Алгоритмы, преобразования модератором Ерёмин А.А.
Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте.
|