Добрый день! Подскажите пож-та, необходимо вытащить из полного адреса, который записан не по шаблону - улицу или проспект или бульвар или..... . Как получить двойное название (н-р "Большой Афанасьевский") или " 1-й Котельнический" или "Садовая-Сухаревская", или возможно такую регулярку в одну строку, которая всё выцепит. Заранее спасибо!
#NoEnv ; Recommended for performance and compatibility with future AutoHotkey releases.
SendMode Input ; Recommended for new scripts due to its superior speed and reliability.
SetWorkingDir %A_ScriptDir% ; Ensures a consistent starting directory.
#SingleInstance force
StringCaseSense, Locale ; чувствительность к регистру
; текущее время и дата в переменные
FormatTime, TimeString_time, , HH-mm-ss
; переменные на Progress bar
loop 10
{
flash%A_Index% := A_Index*10
}
Y := A_ScreenHeight- 200
W := "550"
svod = %A_Desktop%\Сводная.xlsx
; открытие книги
Xl := ComObjCreate("Excel.Application")
svod_book := Xl.Workbooks.Open(svod)
xl.visible := true
;~ xl.screenUpdating := 0
all_svod := svod_book.workSheets(1).Cells.(svod_book.workSheets(1).Rows.Count, 1).End(xlUp := -4162).Row
Progress,b w%W% y%Y% , Распознование адресов в Сводной .... %A_index% строка из %all_svod%, Loadning.., ( *_* )
loop % all_svod
{
svod_addres := svod_book.workSheets(1).cells(A_index,1).value := Trim(svod_book.workSheets(1).cells(A_index,1).value)
A1 :=
B1 :=
Out :=
if Instr(svod_addres, "улица")
{
RegExMatch(svod_addres, "(*UCP)((\w|\s)\d*)улица", A)
RegExMatch(svod_addres, "(*UCP)улица((\w|\s)*)", B)
}
if Instr(svod_addres, "ул.")
{
RegExMatch(svod_addres, "(*UCP)((\w|\s)\d*)ул\.", A)
RegExMatch(svod_addres, "(*UCP)ул\.((\w|\s)*)", B)
}
if Instr(svod_addres, "бульвар")
{
RegExMatch(svod_addres, "(*UCP)((\w|\s)\d*)бульвар", A)
RegExMatch(svod_addres, "(*UCP)бульвар((\w|\s)*)", B)
}
if Instr(svod_addres, "переулок")
{
RegExMatch(svod_addres, "(*UCP)((\w|\s)\d*)переулок", A)
RegExMatch(svod_addres, "(*UCP)переулок((\w|\s)*)", B)
}
if Instr(svod_addres, "набережная")
{
RegExMatch(svod_addres, "(*UCP)((\w|\s)\d*)набережная", A)
RegExMatch(svod_addres, "(*UCP)набережная((\w|\s)*)", B)
}
if Instr(svod_addres, "проезд")
{
RegExMatch(svod_addres, "(*UCP)((\w|\s)\d*)проезд", A)
RegExMatch(svod_addres, "(*UCP)проезд((\w|\s)*)", B)
}
if Instr(svod_addres, "тупик")
{
RegExMatch(svod_addres, "(*UCP)((\w|\s)\d*)тупик", A)
RegExMatch(svod_addres, "(*UCP)тупик(\w|\s)*)", B)
}
if Instr(svod_addres, "пл.")
{
RegExMatch(svod_addres, "(*UCP)((\w|\s)\d*)пл\.", A)
RegExMatch(svod_addres, "(*UCP)пл\.((\w|\s)*)", B)
}
if Instr(svod_addres, "пр-кт")
{
RegExMatch(svod_addres, "(*UCP)((\w|\s)\d*)пр-кт", A)
RegExMatch(svod_addres, "(*UCP)пр-кт((\w|\s)*)", B)
}
if Instr(svod_addres, "проспект")
{
RegExMatch(svod_addres, "(*UCP)((\w|\s)\d*)проспект", A)
RegExMatch(svod_addres, "(*UCP)проспект((\w|\s)*)", B)
}
iF !StrLen(Out :=Trim(A1 B1))
{
RegExMatch(svod_addres, "(*UCP)^(\w*)", Z)
Out := Z1
}
; вставка полученного результата в заданные столбцы
svod_book.workSheets(1).cells(A_index,2).value := Out
; Progress bar
Progress, , Распознование адресов в Сводной .... %A_index% строка из %all_svod%, Loadning.., ( *_* )
Progress, %flash4%
}
; включение обновление экрана
xl.screenUpdating := 1
;сохранение excel
file := A_Desktop "\" svod_book.name "_проверено_" TimeString_time ".xlsx"
svod_book.SaveAs(file, 51)
svod_book.close(false)
Progress, Off
; проигрывание звука уведомления с увеличенной громкостью +50
SoundSet +50
SoundPlay, %A_WinDir%\Media\Ring10.wav
SoundSet -50
MsgBox, 262208, , Готово!
xl.quit
ExitApp
; на закрытие скрипта и excel ( без сохранения)
^esc::
xl.quit
Process, Exist, excel.exe
If errorLevel
{
MsgBox, 4144, , Все открытые ExceL буду закрыты автоматически!!!!
Process, close, excel.exe
}
ExitApp