Страницы: 1 2 След.
RSS
Извлечь из адреса наименование города.
 
Добрый день, есть выгрузка из 1с и адресом грузополучателя. Мне необходимо вычислить наименование Города. Пробовала по разному. В итоге приглось изучить регулярные выражения, регион вытаскивается легко, а вот наименование города в случаях когда он указан после области( края) не могу сообразить .
Адрес
107140, Москва г, Верхняя Красносельская, дом № 3 А
141107, Московская обл, Щелковский р-н, Щелково г, Богородский мкр, владение № 9
142104, Московская обл, Подольск г, Большая Серпуховская ул, дом № 45
142791, Москва г, Сосенское п, Сосенки д, Калужкое ш, 21 км.
156010, Костромская обл, Костромской р-н, Кострома г, Магистральная ул, дом № 20
5
Изменено: bizyaeva - 11.01.2020 20:29:41
 
Цитата
bizyaeva написал:
В итоге приглось изучить логические выражения, регион вытаскивается легко, а вот наименование города
теперь изучайте регулярные выражения.
По вопросам из тем форума, личку не читаю.
 
Цитата
bizyaeva написал:
наименование города в случаях когда он указан после области
в D1 найденную область
Код
=СЖПРОБЕЛЫ(ПСТР(A1;НАЙТИ(D1;A1)+ДЛСТР(D1)+2;НАЙТИ(" ";A1;ДЛСТР(D1)+НАЙТИ(D1;A1)+2)-(ДЛСТР(D1)+НАЙТИ(D1;A1))-2))
 
скопируйте код этой функции
Код
Function GetTown$(s$)
  Dim re, t$
  Set re = CreateObject("VBScript.RegExp"): re.Pattern = ", [^,]+ г,"
  If re.test(s) Then
    t = re.Execute(s)(0): t = Left(t, Len(t) - 3): GetTown = Right(t, Len(t) - 2)
  End If
End Function
в программный модуль и используйте ее для получения названия города из текста
(убедитесь что буква г скопировалась как нужно, а не как у меня с первой попытки)
Изменено: Ігор Гончаренко - 11.01.2020 20:36:35
Программисты - это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете!
 
Доброе время суток
Игорь, а зачем код-то усложнять?
Код
Function GetTown(ByVal fromAddress As String) As String
    Dim pReg As Object
    Set pReg = CreateObject("VBScript.RegExp")
    pReg.Pattern = ", ([^,]+) г(?:,|$)"
    GetTown = pReg.Execute(fromAddress)(0).SubMatches(0)
End Function
 
написал:
наименование города в случаях когда он указан после области
в D1 найденную область
Извините, не поняла, что указать в Д1?
 
извините ВООБЩЕ не понимаю что писать в Д1.
по-барабану, где указан город, до области, перед ней, вместо области - лишь бы был в тексте
bizyaeva,
если вы не всегда понимаете, что делать с советами (решениями), которые вам предлагают, прикладывайте к сообщениям свой файл, ответ получите в нем и не нужно будет парить мозг мыслями "что же делать с этой непонятной подсказкой"

Андрей VG,
код нужно усложнить хоть чуть-чуть, чтобы не получать #ЗНАЧ!, если посылка отправлена И.Жуковым "на деревню, дедушке")
Изменено: Ігор Гончаренко - 11.01.2020 20:51:46
Программисты - это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете!
 
bizyaeva, воспользуйтесь другими вариантами решений
 
=TRIM(RIGHT(SUBSTITUTE(LEFT(A1;FIND(" г,";A1));",";REPT(" ";99));99))
По вопросам из тем форума, личку не читаю.
 
Код
Public Function RegExpExtract(Text As String, Pattern As String, Optional Item As Integer = 1) As String
   On Error GoTo ErrHandl
   Set regex = CreateObject("VBScript.RegExp")

   regex.Pattern = Pattern
   regex.Global = True

   If regex.Test(Text) Then
       Set matches = regex.Execute(Text)
       RegExpExtract = matches.Item(Item - 1
       Exit Function
   End If

ErrHandl:

   RegExpExtract = CVErr(xlErrValue)
End Function

У меня скопирован вот такой код, и далее я в ячейке пишу рег. выражение
 
=RegExpExtract(A1;$E$1), где A1 ячейка с адресом, а E1 ячейка с вот этим выражением -   ([0-1]\d|2[0-3]):[0-9]\d
 
прикладывайте к сообщениям свой файл, ответ получите в нем и не нужно будет парить мозг мыслями "что же делать с этой непонятной подсказкой"
Игорь, прикладываю
 
Цитата
Ігор Гончаренко написал:
код нужно усложнить хоть чуть-чуть, чтобы не получать #ЗНАЧ!, если посылка отправлена И.Жуковым "на деревню, дедушке")
Вы хотите сказать, что более клиентоориентированным подходом будет показывать пустоту, как признак отсутствия в данных города?
 
Хм, у меня не получилось  
 
см.вложение
Программисты - это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете!
 
Спасибо, это Бомба
 
Андрей VG,
самый клиентоориентированный способ - это получить у клиента описание задачи или выбить его из него силой, и сделать согласно указанным требованиям
а то что демонстрируем мы в этой теме (и не только в ней) называется задачирешениеугадывательный способ: угадал - молодец, не угадал - а не очень-то и хотелось!
Программисты - это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете!
 
Цитата
bizyaeva написал:
Спасибо, это Бомба
в вашей теме 4-5 точно также бомб, только никто не мог подложить свою бомбу в ваш файл, ввиду его отсутствия))
Изменено: Ігор Гончаренко - 11.01.2020 21:31:37
Программисты - это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете!
 
Цитата
bizyaeva написал:
Спасибо, это Бомба
разбомбим номером 9  :D
По вопросам из тем форума, личку не читаю.
 
Боже, какие Вы УМНЫЕ... ОГРОМНОЕ Спасибо. Посоветуйте курсы по экселю, ХОРОШИЕ
 
учу удаленно и по-немного) (почта в профиле)
Изменено: Ігор Гончаренко - 11.01.2020 22:09:46
Программисты - это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете!
 
Добрый вечер. У меня есть база данных почтовых адрессов клиентов. Мне нужно извлечь из текста название города.
Заранее благодарен.
 
Спасибо, полагаю могу связаться с Вами по почте
 
bizyaeva, пишите)
Logistic,
Код
Function GetTown$(s$)
  Dim re
  Set re = CreateObject("VBScript.RegExp"): re.Pattern = "г[.] ?([^, ]+)"
  If re.test(s) Then GetTown = re.Execute(s)(0).SubMatches(0)
End Function
Изменено: Ігор Гончаренко - 11.01.2020 22:33:32
Программисты - это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете!
 
Logistic,
=TRIM(LEFT(SUBSTITUTE(TRIM(MID(SUBSTITUTE(A2;",";" ");FIND(" г.";SUBSTITUTE(A2;",";" "))+3;30));" ";REPT(" ";25));25))
конечно если пометка г. в начале. и нет городов с пробелом, а если есть то не понятно как отделять в случае если нет разделителя. В этом случае поможет только перечень городов отсортированный в порядке уменьшения количества символов, или подключение к геобазам. Google, Yandex, OSM .
Изменено: БМВ - 11.01.2020 22:37:09
По вопросам из тем форума, личку не читаю.
 
спасибо, Мне тоже пришла в голову мысль,  что можно извлекать населенный пункт из справочника индексов России. Спасибо
 
БМВ , спасибо за ответ. :)  А что значат цифры в Вашем коде  : ..+3;30

Ігор Гончаренко, благодарю за ответ. :D
 можно прокомментировать Ваш код

 

Код
Set re = CreateObject("VBScript.RegExp"): re.Pattern = "г[.] ?([^, ]+)"  If re.test(s) Then GetTown = re.Execute(s)(0).SubMatches(0)
 
30 -  взята с запасом максимальная длинна названия города.
+3  - так как ищем " г.", то на эти три символа и смещаем
По вопросам из тем форума, личку не читаю.
 
БМВ, еще раз благодарю за быстрый ответ.
Цитата
БМВ написал:
конечно если пометка г. в начале. и нет городов с пробелом, а если есть то не понятно как отделять
Вот только ,что проверил на г.Белая Церковь и на Вашей формуле выдает: +ЗНАЧ
А на Игоря варианте : Белая
Я думаю,что ручками допишем. Потому что варианты есть : с.Погребы или пгт Ставище, и т.д. 8-0  
 
Цитата
Logistic написал:
г.Белая Церковь
Цитата
БМВ написал:
и нет городов с пробелом

Цитата
Logistic написал:
с.Погребы или пгт Ставище, и т.д.
Цитата
БМВ написал:
г. в начале.

вот как например быть если будет такое  "Новая почта г.Белая Церковь  отделение № 1" ???

Цитата
Logistic написал:
с.Погребы или пгт Ставище, и т.д.
я ваще молчу, хотя если список конечный то и это можно обойти.
По вопросам из тем форума, личку не читаю.
Страницы: 1 2 След.
Наверх