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



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

 

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

— Область

— Город

— Улица

— Дом

— и т.д.

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

 

19 Comments

  1. YPermitin

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

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

    Reply
  2. Boroda

    А если не секрет, в чём практический смысл этой обработки? Пример разбиения стороки на подстроки можно получить и из модуля конфигурации, если не полениться туда залезть…

    Reply
  3. YPermitin

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

    Чтобы разбить адрес на составляющие и корректно занести данные была написана обработка. Это лишь ее часть.

    Аналогов в 1С не нашел, которые бы корректно занесли все записи.

    Reply
  4. KliMich

    БД Какая? Самописная или стандартная?

    Если БД под 8.2 Управляемое приложение тогда лучше использовать БСП («Библиотека стандартных подсистем»)

    Там адрес вводиться по КЛАДРу (Классификатору адресов) Просто и удобно…

    Reply
  5. YPermitin

    БД стандартная. Обработка лишь помогает вытаскивать адреса в приемлемый вид для дальнейшего занесения в 1С и т.д.

    Насчет КЛАДРа согласен, удобная весчь. =)

    Reply
  6. iov

    О вроде то что надо. Осталось придумать как в запросе сформировать отчет по продажам по регионам (нужно вытащить из адреса).

    Reply
  7. Valerich

    Не очень силен в использовании регулярных выражений, поэтому вопрос: что такое «Шаблон регулярного выражения» как пишется и для чего используется? Что такое результат форматирования?

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

    Попробовал Вашу обработку и вот что получилось:

    Вот пример исходной строки

    ,02,,,Бекетово,Октябрьская,36,б,

    А вот что получилось:

    поле «Район» = Крамаскалинский р-н

    поле «Дом» = 02

    Все остальные поля пустые

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

    «Регион» = Тюменская обл

    «Район» = Нижнетавдинский

    «Дом» = 1 б

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

    как-то не совсем айс

    Reply
  8. YPermitin

    (6) Valerich,

    Согласен, не айс =)

    Поле «Шаблон» используется для написания регулярных выражений и их последующего тестирования. Вводим рег. выражение в шаблон, данные в исходную строку и в «Результат формитирования» видим что получим в итоге.

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

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

    Поэтому и ориентировал регулярки для этих примеров.

    Reply
  9. Valerich

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

    И как можно изменить рег выражения, чтобы понять в какую сторону двигаться в моем случае?

    Reply
  10. YPermitin

    По регулярным выражениям написаны целые книги. Я бы порекомендовал прочитать две статьи:

    Часть 1: http://phpclub.ru/detail/article/regexp_1 И

    Часть 2: http://phpclub.ru/detail/article/regexp_2.

    Пример приведу на ваших данных. Допустим есть строка «,02,,,Бекетово,Октябрьская,36,б,».

    Чтобы вытащить оттуда улицу с номером дома (без букв, чтобы не усложнять пример) сделаем следующее выражение:

    Шаблон = «[А-Я][а-я]+(,|)[0-9]{1,3}»

    Результат: Октябрьская,36

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

    Настоятельно рекомендую прочитать две статьи выше. Регулярные выражения могучая вещь. С их помощью ищут любые данные, делают парсеры сайтов и так далее.

    Reply
  11. graphbuh

    Классная вещь! Сейчас сижу именно над такой задачей — распознавания адресов. Думаю, применять можно и в ЗУП для загрузки адресов сотрудников из других (не таких правильных) систем. Интересно, можно же добавить опцию, чтобы по индексу восстанавливать часть адреса, если он задан не полно — на вашей практике часто индекс убивает «правильную часть адреса»???… <Регион, район, город>…

    Reply
  12. YPermitin

    (10) graphbuh,

    думаю, что можно. Конкретней надо смотреть по тем данным, которые необходимо обработать.

    Reply
  13. flybread

    думаю кому-то однозначно поможет.

    Reply
  14. a1ex4ndr

    мне кажется что такими простыми рег вырами: Шаблон = «[А-Я][а-я]+(,|)[0-9]{1,3}» нормально не обработаешь, потому что получается он подходит для одного конкретного случая. Для варианта: Тюменская обл, Нижнетавдинский р-н, Геолог с/т, Лесная ул, дом № 1 б это рег. выр. уже не проканает- потому что номер уже после текстового выражения дом, а не после улицы, в примере и написано что улица не определилась…

    Reply
  15. Stradivari

    Норм, может пригодиться!

    Reply
  16. Yakud3a

    Как раз пригодилось!!

    Reply
  17. Alfer

    пригодилось — доработочка не помешает — займусь на досуге

    Reply
  18. cool.vlad4

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

    Reply
  19. Scottlinch

    Вообщем хорошая тема для малоразвитых стран или республик. Недавно занимался подобного рода занятием в ДНР. Мало кто знает что на Украине это вообще огромная проблема по сравнению с Россией. Украина это страна в которой нет КЛАДРА или подобного рода классификатора!!!

    Reply

Leave a Comment

Ваш адрес email не будет опубликован. Обязательные поля помечены *