1

Тема: AHK V2: Извлечение номера заказа из строки в буфере обмена

Добрый день, имеется строка

Приобретение товаров и услуг ОА00-004952 от 29.07.2024 13:14:24

Из нее нужен только номер заказа ОА00-004952. Пытаюсь сделать следующее, чтобы при копировании строки, из нее извлекался номер заказа и помещался в буфер обмена вместо неё. Вроде бы в верном направлении двигаюсь, но вот если скопировать что-то другое, то фатальная ошибка скрипт закрывается, хотелось бы просто отделаться Tooltip или MsgBox с ошибкой. Плюс слабая часть плана в том, что в данном примере я ищу 5-е слово, а оно может быть не всегда 5-м. В нумерации заказов постоянная часть "ОА00" и переменная после дефиза "004952". Пытался находить по постоянной части, но тоже не вышло.

For index, strPart In strParts {    
	If (strPart == "ОА00") {      
		resultStr := strParts[index+1]
		

Хотелось бы сделать: находим ОА00, берем его и все что после него до спец. символа ("пробел", "\", "," и т.д), должно получится ОА00-004952 и кладем в буфер обмена. Можно уведомлять в ToolTip, если получилось просто номер заказа, если в строке его нет "Нет номера заказа".

Весь код

#Requires AutoHotkey v2.0
#SingleInstance
F5:: ExitApp
C::
{
;TestString := "Приобретение товаров и услуг ОА00-004952 от 29.07.2024 13:14:24"
;A_Clipboard := ""
TestString := A_Clipboard
word_array := StrSplit(TestString, A_Space, ".")  ; Omits periods.
MsgBox "Номер заказа " word_array[5]
word_array[5] := A_Clipboard
MsgBox "Номер заказа " A_Clipboard
}

2

Re: AHK V2: Извлечение номера заказа из строки в буфере обмена

#Requires AutoHotkey v2

str := 'Приобретение товаров и услуг ОА00-004952 от 29.07.2024 13:14:24'
RegExMatch(str, 'ОА00-\d+', &m)
MsgBox m[0]
Разработка AHK-скриптов:
e-mail dfiveg@mail.ru
Telegram jollycoder

3

Re: AHK V2: Извлечение номера заказа из строки в буфере обмена

teadrinker Благодарю, это прекрасно работает, но только до того момента, как я скопирую что-то другое.

Если поместить в буфер обмена Приобретение товаров и услуг ОА00-004952 от 29.07.2024 13:14:24, то все работает прекрасно, возвращаю обратно в буфер уже номер заказа. Но стоит мне что-то другое скопировать, то ловлю ошибку и скрипт закрывается:

Error: This value of type "String" has no property named "__Item".

Ругается явно на m[0], но не понимаю как сделать проверку, в справке что-то про класс. Но видно не то.

F5:: ExitApp

Z::
{
;str := 'Приобретение товаров и услуг ОА00-004952 от 29.07.2024 13:14:24'
str := A_Clipboard
RegExMatch(str, 'ОА00-\d+', &m)
;MsgBox m[0]
ToolTip "Номер заказа: " m[0]
SetTimer () => ToolTip(), -1000
A_Clipboard := m[0]
}

4

Re: AHK V2: Извлечение номера заказа из строки в буфере обмена

Проверяйте, нашёл ли RegExMatch шаблон:

#Requires AutoHotkey v2

A_Clipboard := 'Приобретение товаров и услуг ОА00-004952 от 29.07.2024 13:14:24'

z:: {
    if !RegExMatch(A_Clipboard, 'ОА00-\d+', &m) {
        return
    }
    ToolTip "Номер заказа: " m[0]
    SetTimer () => ToolTip(), -1000
    A_Clipboard := m[0]
}
Разработка AHK-скриптов:
e-mail dfiveg@mail.ru
Telegram jollycoder

5

Re: AHK V2: Извлечение номера заказа из строки в буфере обмена

teadrinker, это было очевидней, чем я думал. Благодарю. Это блестяще.