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



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

 

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

— Область

— Город

— Улица

— Дом

— и т.д.

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

 

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 не будет опубликован. Обязательные поля помечены *