gifts2017

Разбиение адреса на составляющие

Опубликовал Юрий Пермитин (YPermitin) в раздел Программирование - Практика программирования

Обработка для разбиения адреса на отдельные составляющие.

 

Введенный адрес в единую строку разбивается на такие составляющие, как:

- Область

- Город

- Улица

- Дом

- и т.д.

Код обработки закомментирован. Используются регулярные выражения для обработки информации.
В обработку также встроена функция по интерактивному просмотру работы регулярных выражений.
При вводе регулярного выражения в поле "Шаблон", в поле "Результат выражения" появится результат поиска в исходной строке по введенному регулярному выражению.

 

Скачать файлы

Наименование Файл Версия Размер Кол. Скачив.
Разбиение адреса на составляющие
.epf 11,22Kb
24.09.11
148
.epf 11,22Kb 148 Скачать

См. также

Подписаться Добавить вознаграждение

Комментарии

0. Юрий Пермитин (YPermitin) 24.09.11 14:10
Обработка для разбиения адреса на отдельные составляющие.


Перейти к публикации

1. Vladimir (Boroda) 24.09.11 18:24
А если не секрет, в чём практический смысл этой обработки? Пример разбиения стороки на подстроки можно получить и из модуля конфигурации, если не полениться туда залезть...
2. Юрий Пермитин (YPermitin) 24.09.11 18:30
Была задача по внесению адреса в БД. Пользователи записывали в таблицу адреса в виде одной строки. Порядок и вид записанного адреса постоянно менялся.

Чтобы разбить адрес на составляющие и корректно занести данные была написана обработка. Это лишь ее часть.
Аналогов в 1С не нашел, которые бы корректно занесли все записи.
3. Владимир Клименко (KliMich) 24.09.11 22:29
БД Какая? Самописная или стандартная?
Если БД под 8.2 Управляемое приложение тогда лучше использовать БСП ("Библиотека стандартных подсистем")
Там адрес вводиться по КЛАДРу (Классификатору адресов) Просто и удобно...
4. Юрий Пермитин (YPermitin) 24.09.11 22:53
БД стандартная. Обработка лишь помогает вытаскивать адреса в приемлемый вид для дальнейшего занесения в 1С и т.д.

Насчет КЛАДРа согласен, удобная весчь. =)
5. Александр Зубцов (iov) 26.09.11 17:12
О вроде то что надо. Осталось придумать как в запросе сформировать отчет по продажам по регионам (нужно вытащить из адреса).
6. Валерий Дубовой (Valerich) 29.09.11 07:40
Не очень силен в использовании регулярных выражений, поэтому вопрос: что такое "Шаблон регулярного выражения" как пишется и для чего используется? Что такое результат форматирования?

По долгу работы приходится обрабатывать огромное количество адресной информации (юридические адреса, адреса доставки, ...) присылают как попало. Есть стандартная функция, которая в привязке к кладру пытается разложить исходную строку на составляющие, но не справляется даже в простейших случаях (справляется только если совсем идеал и версии кладра совпадают).

Попробовал Вашу обработку и вот что получилось:
Вот пример исходной строки
,02,,,Бекетово,Октябрьская,36,б,
А вот что получилось:

поле "Район" = Крамаскалинский р-н
поле "Дом" = 02
Все остальные поля пустые

Для варианта: Тюменская обл, Нижнетавдинский р-н, Геолог с/т, Лесная ул, дом № 1 б
"Регион" = Тюменская обл
"Район" = Нижнетавдинский
"Дом" = 1 б

остальное пусто

как-то не совсем айс
7. Юрий Пермитин (YPermitin) 29.09.11 08:14
(6) Valerich,
Согласен, не айс =)
Поле "Шаблон" используется для написания регулярных выражений и их последующего тестирования. Вводим рег. выражение в шаблон, данные в исходную строку и в "Результат формитирования" видим что получим в итоге.

Насчет приведенных примеров. Да, он не будет их нормально обрабатывать, ибо там запятые и другие символы, не предусмотренные в рег. выражениях, которые я написал + некоторые другие моменты.

Но, думаю, что добавить изменения в рег. выражения не составит проблем для вашего случая, ведь сразу все предусмотреть невозможно. Помню, что в моей задаче раньше стояло разбить адреса, которые были записаны на подобие: "г. Тюмень, ул Одесская 56, дом 5 корп 6 425252 кв. 76".

Поэтому и ориентировал регулярки для этих примеров.
8. Валерий Дубовой (Valerich) 29.09.11 12:50
(7) Можете привести какие-нибудь примеры того, что можно вводить в шаблон, чтобы увидеть какой-то эффект, пусть даже на Ваших данных. Просто для понимания как все работает.

И как можно изменить рег выражения, чтобы понять в какую сторону двигаться в моем случае?
9. Юрий Пермитин (YPermitin) 30.09.11 10:01
По регулярным выражениям написаны целые книги. Я бы порекомендовал прочитать две статьи:
Часть 1: http://phpclub.ru/detail/article/regexp_1 И
Часть 2: http://phpclub.ru/detail/article/regexp_2.

Пример приведу на ваших данных. Допустим есть строка ",02,,,Бекетово,Октябрьская,36,б,".
Чтобы вытащить оттуда улицу с номером дома (без букв, чтобы не усложнять пример) сделаем следующее выражение:
Шаблон = "[А-Я][а-я]+(,|)[0-9]{1,3}"
Результат: Октябрьская,36
Принцип работы заключается в поиске по заданным параметрам. В примере первое слово начинается с большой буквы, далее идут символы нижнего регистра в произвольном количестве (для этого поставлен +), потом идет символ запятая, хотя его может и не быть. И в конце вытаскивается номер дома.

Настоятельно рекомендую прочитать две статьи выше. Регулярные выражения могучая вещь. С их помощью ищут любые данные, делают парсеры сайтов и так далее.
Valerich; +1 Ответить
10. Юрий Н (graphbuh) 21.01.12 02:10
Классная вещь! Сейчас сижу именно над такой задачей - распознавания адресов. Думаю, применять можно и в ЗУП для загрузки адресов сотрудников из других (не таких правильных) систем. Интересно, можно же добавить опцию, чтобы по индексу восстанавливать часть адреса, если он задан не полно - на вашей практике часто индекс убивает "правильную часть адреса"???... <Регион, район, город>...
11. Юрий Пермитин (YPermitin) 30.01.12 05:10
(10) graphbuh,
думаю, что можно. Конкретней надо смотреть по тем данным, которые необходимо обработать.
12. Иван Булычев (flybread) 03.02.12 08:48
думаю кому-то однозначно поможет.
14. Александр *** (a1ex4ndr) 20.07.12 11:09
мне кажется что такими простыми рег вырами: Шаблон = "[А-Я][а-я]+(,|)[0-9]{1,3}" нормально не обработаешь, потому что получается он подходит для одного конкретного случая. Для варианта: Тюменская обл, Нижнетавдинский р-н, Геолог с/т, Лесная ул, дом № 1 б это рег. выр. уже не проканает- потому что номер уже после текстового выражения дом, а не после улицы, в примере и написано что улица не определилась...
15. Роман Г (Stradivari) 16.04.13 11:33
Норм, может пригодиться!
16. Валерий Карпов (Yakud3a) 24.04.13 19:49
17. Андрей Штоколов (Alfer) 16.01.14 19:19
пригодилось - доработочка не помешает - займусь на досуге
18. Ийон Тихий (cool.vlad4) 16.01.14 19:32
(14) a1ex4ndr, надо понимать, что в общем случае, задача слабо решаема, либо вообще нерешаема. и имхо регулярки не самый лучший способ парсинга слабоструктурированной/неструктурированной информации, но менее трудоемкий и быстрый.
19. Scott Linch (Scottlinch) 10.08.16 15:38
Вообщем хорошая тема для малоразвитых стран или республик. Недавно занимался подобного рода занятием в ДНР. Мало кто знает что на Украине это вообще огромная проблема по сравнению с Россией. Украина это страна в которой нет КЛАДРА или подобного рода классификатора!!!
Для написания сообщения необходимо авторизоваться
Прикрепить файл
Дополнительные параметры ответа