Разбиение адреса на составляющие
Обработка для разбиения адреса на отдельные составляющие.
24.09.2011 11:14 [24.09.2011 11:27] 15 [+] [−] Перейти к публикации
Была задача по внесению адреса в БД. Пользователи записывали в таблицу адреса в виде одной строки. Порядок и вид записанного адреса постоянно менялся.
Чтобы разбить адрес на составляющие и корректно занести данные была написана обработка. Это лишь ее часть.
Аналогов в 1С не нашел, которые бы корректно занесли все записи.
Не очень силен в использовании регулярных выражений, поэтому вопрос: что такое "Шаблон регулярного выражения" как пишется и для чего используется? Что такое результат форматирования?
По долгу работы приходится обрабатывать огромное количество адресной информации (юридические адреса, адреса доставки, ...) присылают как попало. Есть стандартная функция, которая в привязке к кладру пытается разложить исходную строку на составляющие, но не справляется даже в простейших случаях (справляется только если совсем идеал и версии кладра совпадают).
Попробовал Вашу обработку и вот что получилось:
Вот пример исходной строки
,02,,,Бекетово,Октябрьская,36,б,
А вот что получилось:
поле "Район" = Крамаскалинский р-н
поле "Дом" = 02
Все остальные поля пустые
Для варианта: Тюменская обл, Нижнетавдинский р-н, Геолог с/т, Лесная ул, дом № 1 б
"Регион" = Тюменская обл
"Район" = Нижнетавдинский
"Дом" = 1 б
остальное пусто
как-то не совсем айс
Ответили: (7)
(6) Valerich,
Согласен, не айс =)
Поле "Шаблон" используется для написания регулярных выражений и их последующего тестирования. Вводим рег. выражение в шаблон, данные в исходную строку и в "Результат формитирования" видим что получим в итоге.
Насчет приведенных примеров. Да, он не будет их нормально обрабатывать, ибо там запятые и другие символы, не предусмотренные в рег. выражениях, которые я написал + некоторые другие моменты.
Но, думаю, что добавить изменения в рег. выражения не составит проблем для вашего случая, ведь сразу все предусмотреть невозможно. Помню, что в моей задаче раньше стояло разбить адреса, которые были записаны на подобие: "г. Тюмень, ул Одесская 56, дом 5 корп 6 425252 кв. 76".
Поэтому и ориентировал регулярки для этих примеров.
Ответили: (8)
(7) Можете привести какие-нибудь примеры того, что можно вводить в шаблон, чтобы увидеть какой-то эффект, пусть даже на Ваших данных. Просто для понимания как все работает.
И как можно изменить рег выражения, чтобы понять в какую сторону двигаться в моем случае?
По регулярным выражениям написаны целые книги. Я бы порекомендовал прочитать две статьи:
Часть 1: И
Часть 2: .
Пример приведу на ваших данных. Допустим есть строка ",02,,,Бекетово,Октябрьская,36,б,".
Чтобы вытащить оттуда улицу с номером дома (без букв, чтобы не усложнять пример) сделаем следующее выражение:
Шаблон = "[А-Я][а-я]+(,|)[0-9]{1,3}"
Результат: Октябрьская,36
Принцип работы заключается в поиске по заданным параметрам. В примере первое слово начинается с большой буквы, далее идут символы нижнего регистра в произвольном количестве (для этого поставлен +), потом идет символ запятая, хотя его может и не быть. И в конце вытаскивается номер дома.
Настоятельно рекомендую прочитать две статьи выше. Регулярные выражения могучая вещь. С их помощью ищут любые данные, делают парсеры сайтов и так далее.
Классная вещь! Сейчас сижу именно над такой задачей - распознавания адресов. Думаю, применять можно и в ЗУП для загрузки адресов сотрудников из других (не таких правильных) систем. Интересно, можно же добавить опцию, чтобы по индексу восстанавливать часть адреса, если он задан не полно - на вашей практике часто индекс убивает "правильную часть адреса"???... <Регион, район, город>...
Ответили: (11)
15 [+] [−] Перейти к публикации
А если не секрет, в чём практический смысл этой обработки? Пример разбиения стороки на подстроки можно получить и из модуля конфигурации, если не полениться туда залезть...