Добрый день, есть выгрузка из 1с и адресом грузополучателя. Мне необходимо вычислить наименование Города. Пробовала по разному. В итоге приглось изучить регулярные выражения, регион вытаскивается легко, а вот наименование города в случаях когда он указан после области( края) не могу сообразить .
Адрес
107140, Москва г, Верхняя Красносельская, дом № 3 А
141107, Московская обл, Щелковский р-н, Щелково г, Богородский мкр, владение № 9
142104, Московская обл, Подольск г, Большая Серпуховская ул, дом № 45
142791, Москва г, Сосенское п, Сосенки д, Калужкое ш, 21 км.
156010, Костромская обл, Костромской р-н, Кострома г, Магистральная ул, дом № 20
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
в программный модуль и используйте ее для получения названия города из текста (убедитесь что буква г скопировалась как нужно, а не как у меня с первой попытки)
Доброе время суток Игорь, а зачем код-то усложнять?
Код
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
извините ВООБЩЕ не понимаю что писать в Д1. по-барабану, где указан город, до области, перед ней, вместо области - лишь бы был в тексте bizyaeva, если вы не всегда понимаете, что делать с советами (решениями), которые вам предлагают, прикладывайте к сообщениям свой файл, ответ получите в нем и не нужно будет парить мозг мыслями "что же делать с этой непонятной подсказкой"
Андрей VG, код нужно усложнить хоть чуть-чуть, чтобы не получать #ЗНАЧ!, если посылка отправлена И.Жуковым "на деревню, дедушке")
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
У меня скопирован вот такой код, и далее я в ячейке пишу рег. выражение
прикладывайте к сообщениям свой файл, ответ получите в нем и не нужно будет парить мозг мыслями "что же делать с этой непонятной подсказкой" Игорь, прикладываю
Андрей VG, самый клиентоориентированный способ - это получить у клиента описание задачи или выбить его из него силой, и сделать согласно указанным требованиям а то что демонстрируем мы в этой теме (и не только в ней) называется задачирешениеугадывательный способ: угадал - молодец, не угадал - а не очень-то и хотелось!
Программисты - это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете!
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
Logistic, =TRIM(LEFT(SUBSTITUTE(TRIM(MID(SUBSTITUTE(A2;",";" ");FIND(" г.";SUBSTITUTE(A2;",";" "))+3;30));" ";REPT(" ";25));25)) конечно если пометка г. в начале. и нет городов с пробелом, а если есть то не понятно как отделять в случае если нет разделителя. В этом случае поможет только перечень городов отсортированный в порядке уменьшения количества символов, или подключение к геобазам. Google, Yandex, OSM .
БМВ написал: конечно если пометка г. в начале. и нет городов с пробелом, а если есть то не понятно как отделять
Вот только ,что проверил на г.Белая Церковь и на Вашей формуле выдает: +ЗНАЧ А на Игоря варианте : Белая Я думаю,что ручками допишем. Потому что варианты есть : с.Погребы или пгт Ставище, и т.д.