Скриптинг на AUTOIT
|
|
asmadeus | Дата: Понедельник, 16.12.2013, 16:44 | Сообщение № 1 |
|
Скриптинг на AUTOIT
Тема для вопросов и ответов по написанию скриптов на autoit'e - стремительно набирающем популярность языке автоматизации выполнения рутинных дел при работе на компьютере.
Сообщение отредактировал asmadeus - Суббота, 01.02.2014, 23:01 |
|
| |
Andrey_A | Дата: Четверг, 27.11.2014, 19:43 | Сообщение № 46 |
Генералиссимус
На сайте с: 26.01.2012
Город: Сочи, Хоста
Сообщений: 7191
Награды: 143
Репутация: 125
Аверин Андрей
|
Рекомендую сделать свою относительную переменную, как в TCIMG %TCIMG_PATH% к примеру %MENU_PATH%
Сама утилита может вызывать менюшки и без тотала - она самодостаточная, были предложения в ней тоже сделать свою относительную переменную, но всё руки не доходят Можем вместе принять решение и сделать её общей %MENU_PATH%
Код ; меняет относительный путь на абсолютный Func _Env($fName) If StringInStr($fName,"%MENU_") Then Return StringReplace($fName,"%MENU_PATH%",@ScriptDir) $aR=StringRegExp($fName,"%(\w+)%",3) If IsArray($aR) Then For $k=0 To UBound($aR)-1 $Env=EnvGet($aR[$k]) If $Env Then $fName=StringReplace($fName,"%"&$aR[$k]&"%",$Env) Next EndIf Return $fName EndFunc
|
|
| |
asmadeus | Дата: Четверг, 27.11.2014, 20:16 | Сообщение № 47 |
|
Andrey_A, забираю, протестирую на работе и завтра отпишусь [plus] что то у меня не вышло со своими переменными. вроде объявляю через EnvSet, нор какое значение то ей придавать? Абсолютный путь? А толку тогда? В общем, нужен интернет и читать, читать, читать... [/plus]
Сообщение отредактировал asmadeus - Пятница, 28.11.2014, 08:18 |
|
| |
asmadeus | Дата: Среда, 29.04.2015, 22:35 | Сообщение № 48 |
|
Привет! Не совсем autoit, но голову я уже сломал. Итак, моя любимая регулярка. Имеется выражение Код $tirag=StringRegExpReplace($Ishod, '(?s).*Монетный двор(?:\s+.+\s.+\s)([А-яЁё-]+)\,\h([А-яЁё]+)\h([0-9.+]+)(?s).*', '\3') Вроде нормально работает, но нужно внести в него примерно такие правки Код $tirag=StringRegExpReplace($Ishod, '(?s).*Монетный двор(?:\s+.+\s.+\s)([А-яЁё-]+)\,\h([А-яЁё]+)\h([A-z]+)?\h([0-9.+]+)(?s).*', '\4') То есть между второй и третьей группой вставить еще одну. Но вот в чем проблема - она ( вставленная третья группа) может быть, а может и не быть. Читал, что вроде знак вопроса решает такие проблемы, но наверное чего то недопонял - в реальности выходит, что если все четыре группы есть в наличии, то все прекрасно отрабатывает. Если третьей группы нет - все, никакого результата.
Примерный текст под это выражение (это без третьей группы) Код Тираж: Монетный двор Тираж Unc BU Proof Лондон, Великобритания 72.500.000 - +
С наличием всех групп Код Тираж: Монетный двор Знак Тираж Unc BU Proof Лима, Перу LIMA + - -
Да и вообще, может я иду нелегким путем?
|
|
| |
Andrey_A | Дата: Суббота, 02.05.2015, 22:05 | Сообщение № 49 |
Генералиссимус
На сайте с: 26.01.2012
Город: Сочи, Хоста
Сообщений: 7191
Награды: 143
Репутация: 125
Аверин Андрей
|
asmadeus, если я правильно понял, то так:
[img640]http://tc-image.3dn.ru/Image/Regex/0/rreegg.png[/img640]
Код (?s).*Монетный двор(?:\s+.+\s.+\s)([А-яЁё-]+),\h+([А-яЁё-]+)\h+([A-z]+)?\h+([\d\.\+]+)
|
|
| |
asmadeus | Дата: Воскресенье, 03.05.2015, 06:56 | Сообщение № 50 |
|
Andrey_A, у меня не находит Смотри, что я хотел получать. Есть страница http://ru.ucoin.net/coin/honduras-5-centavos-1998/?cid=44471 с текстом
Но может быть и так - http://ru.ucoin.net/coin/peru-50-centimos-1985/?cid=21668
Различие именно на монетном дворе из-за дополнительного поля "Знак", которое иногда есть, иногда нет. А в итоге получаю текст такого вида
И такое при ошибке с монетным двором Вот, как то так
|
|
| |
Andrey_A | Дата: Воскресенье, 03.05.2015, 14:18 | Сообщение № 51 |
Генералиссимус
На сайте с: 26.01.2012
Город: Сочи, Хоста
Сообщений: 7191
Награды: 143
Репутация: 125
Аверин Андрей
|
asmadeus, не до конца я понял 1. Откуда (как) берётся текст в скрипте 2. Тот полный итоговый текст, который ты написал, одной регуляркой не получить...
Если через буфер и если получать концовку (от "монетного двора"), то так в 2-х скопированных текстах со страниц получается массив с данными:
Код $sText=ClipGet() $aText=StringRegExp($sText, '(?s).*Монетный двор(?:\s+.+\s.+\s)([А-яЁё-]+),\h+([А-яЁё-]+)\h*?([A-z]+)*?\h+([\d\.\+]+)',3) _ViewValues($aText, '')
Далее уже как тебе надо...
|
|
| |
asmadeus | Дата: Понедельник, 04.05.2015, 00:22 | Сообщение № 52 |
|
Andrey_A, текст берется с буфера обмена с двух-трех сайтов, после чего обрабатывается. Одной нет, я получаю КАЖДОЕ значение ОТДЕЛЬНО. Например, так (фрагмент кода): Код _ArrayInsert($aDannie,'1',StringRegExpReplace($Ishod, '(?s).*Страна\s+([^\r\n]+)(?s).*', '\1')) _ArrayInsert($aDannie,'2',StringStripWS(StringRegExpReplace($Ishod, '(?s).*WWC номер\s+([^\r\n]+)(?s).*', '\1'),8)) _ArrayInsert($aDannie,'3',StringRegExpReplace($Ishod, '(?s).*Период\s+([^\r\n]+)(?s).*', '\1')) _ArrayInsert($aDannie,'4',StringRegExpReplace($Ishod, '(?s).*Номинал\s+(\d+)(?s).*', '\1')) Согласен, может нерационально и неправильно, но я по другому не умею. Косяки есть еще с двумя полями, если ничего не решу, то буду стучать. Кстати, регулярка, какая у меня отрабатывает как надо, выглядит так: Код '(?s).*Монетный двор(?:\s+.+\s.+\s)([А-яЁё-]+),\h+([А-яЁё-]+)\h*?([A-z]+)*?\h+([\d\.\+]+)(?s).*' (Ты присылал без окончания, из- за чего в строке оставались символы)
|
|
| |
asmadeus | Дата: Воскресенье, 10.01.2016, 21:02 | Сообщение № 53 |
|
Привет! Требуется ясность в вопросе. Для частичного упрощения кода хотел провести замену
Код GUICtrlSetState($aEdit[1], $GUI_HIDE) GUICtrlSetState($aEdit[2], $GUI_HIDE) GUICtrlSetState($Button1, $GUI_HIDE) GUICtrlSetState($Button3, $GUI_HIDE) GUICtrlSetState($Button4, $GUI_HIDE) GUICtrlSetState($Button5, $GUI_HIDE) GUICtrlSetState($Button10, $GUI_HIDE) GUICtrlSetState($Button11, $GUI_HIDE) GUICtrlSetState($Button13, $GUI_HIDE) GUICtrlSetState($Button16, $GUI_HIDE) в функции, создав массив
Код $aArray1=StringSplit("$aEdit[1]|$aEdit[2]|$Button1|$Button3|$Button4|$Button5|$Button10|$Button11|$Button13|$Button16","|") и прописав так
Код For $i=1 To $aArray1[0] GUICtrlSetState($aArray1[$i], $GUI_HIDE) Next Но результата работы нет. Хотел вообще заменить все по такому принципу. Согласен, почти под каждую замену надо писать свой массив, но другого пути не вижу
|
|
| |
Andrey_A | Дата: Воскресенье, 10.01.2016, 21:12 | Сообщение № 54 |
Генералиссимус
На сайте с: 26.01.2012
Город: Сочи, Хоста
Сообщений: 7191
Награды: 143
Репутация: 125
Аверин Андрей
|
asmadeus, можно попробовать по другому, 2 варианта:
Код #include <Array.au3>
Local $aEdit[4],$Button1=333,$Button3=444,$Button4=555,$Button5=666,$Button10=777,$Button11=888,$Button13=999,$Button16=1010 $aEdit[1]=111 $aEdit[2]=222
$aArray1=StringSplit($aEdit[1]&"|"&$aEdit[2]&"|"&$Button1&"|"&$Button3&"|"&$Button4&"|"&$Button5&"|"&$Button10&"|"&$Button11&"|"&$Button13&"|"&$Button16,"|") _ArrayDisplay($aArray1)
Dim $aArray1[11]=[10,$aEdit[1],$aEdit[2],$Button1,$Button3,$Button4,$Button5,$Button10,$Button11,$Button13,$Button16] _ArrayDisplay($aArray1)
.
|
|
| |
asmadeus | Дата: Понедельник, 11.01.2016, 12:30 | Сообщение № 55 |
|
Andrey_A, да, ты правильно все объяснил, это просто я тупой. Работы будет много, но надо было с самого начала делать так, а сейчас это сплошной геморрой...
|
|
| |
asmadeus | Дата: Пятница, 22.01.2016, 23:21 | Сообщение № 56 |
|
Всем привет! Требуется помощь по регулярным выражениям, я пока слаб в работе с многострочными текстами. Итак, суть. Есть текст - просто файл tcm, например
Код MENUITEM Au3ToPost#!#%COMMANDER_PATH%\Utilities\Scripting\AutoIt\Au3ToPost\Au3ToPost.exe,0#!#%COMMANDER_PATH%\Utilities\Scripting\AutoIt\Au3ToPost\Au3ToPost.exe MENUITEM Запустить скрипт под курсором#!#2027#!#%COMMANDER_PATH%\Utilities\Scripting\AutoIt\AutoIt3.exe#!#%P%N POPUP Компилирование скриптов MENUITEM Обфускация скрипта .au3 под курсором (по максимуму)#!#2038#!#%COMMANDER_PATH%\Utilities\Scripting\AutoIt\SciTE\Obfuscator\Obfuscator.exe#!#%P%N /sf /sv /om /cs=0 /cn=0 MENUITEM Обфускация скрипта .au3 под курсором (по минимуму)#!#2038#!#%COMMANDER_PATH%\Utilities\Scripting\AutoIt\SciTE\Obfuscator\Obfuscator.exe#!#%P%N /SO POPUP Компилирование скриптов MENUITEM Обфускация скрипта .au3 под курсором (по максимуму)#!#2038#!#%COMMANDER_PATH%\Utilities\Scripting\AutoIt\SciTE\Obfuscator\Obfuscator.exe#!#%P%N /sf /sv /om /cs=0 /cn=0 MENUITEM Сжать файл под курсором#!#2227#!#%COMMANDER_PATH%\Programs\Resources\mpress\mpress.exe#!#%P%N GREYITEM Компилирование одним кликом END_POPUP MENUITEM Сжать файл под курсором#!#2006#!#%COMMANDER_PATH%\Programs\Resources\PECompact\pec2gui.exe#!#%P%N MENUITEM Сжать файл под курсором#!#2227#!#%COMMANDER_PATH%\Programs\Resources\mpress\mpress.exe#!#%P%N GREYITEM Компилирование одним кликом END_POPUP MENUITEM SEPARATOR POPUP Справка MENUITEM AutoIt3Help#!#2048#!#%COMMANDER_PATH%\Utilities\Scripting\AutoIt\AutoIt3Help.exe MENUITEM RegExp#!#%COMMANDER_PATH%\AkelFiles\Tools\RegExp\RegExp.exe,0#!#%COMMANDER_PATH%\AkelFiles\Tools\RegExp\RegExp.exe END_POPUP Надо извлечь все секции подменю - от строки POPUP до строки END_POPUP, включая их. В приведенном тексте секции три. Пробовал так
Код (?mi)^POPUP.+[\r\n]+(?:[^[\r\n].*(?:[\r\n]+|END_POPUP))* Не подходит, извлекается только одна секция подменю, а если в ней еще есть подменю вложенное, как в примере, то его не учитывает. С горя пробовал и так
Код (?smi)^POPUP.+END_POPUP Берет практически весь текст - с начала первой секции и до конца последней. Такие преобразования нужны мне для работы с TCMConverter - хочу создавать ступенчатость при сохранении. Другого метода не придумал - находим нужные строки и вставляем пробелы в начало строк.
|
|
| |
Andrey_A | Дата: Пятница, 22.01.2016, 23:59 | Сообщение № 57 |
Генералиссимус
На сайте с: 26.01.2012
Город: Сочи, Хоста
Сообщений: 7191
Награды: 143
Репутация: 125
Аверин Андрей
|
asmadeus,
Цитата Надо извлечь все секции подменю - от строки POPUP до строки END_POPUP, включая их. В приведенном тексте секции три. Нет никаких секций POPUP до строки END_POPUP, а тем более в вашем варианте: Как можно извлечь от 1 до 2 в таком:
Где тут вложенность ? где что?
Можно решить следующим образом: 1. Должна быть чёткая структура, где вложенные отделены начальными пробелами:
Код MENUITEM Au3ToPost#!#%COMMANDER_PATH% MENUITEM Запустить скрипт под курсором#! POPUP Компилирование скриптов MENUITEM Обфускация скрипта .au3 под курс MENUITEM Обфускация скрипта .au3 под курсо POPUP Компилирование скриптов MENUITEM Обфускация скрипта .au3 под кур MENUITEM Сжать файл под курсором#!#2227 GREYITEM Компилирование одним кликом END_POPUP MENUITEM Сжать файл под курсором#!#2006#! MENUITEM Сжать файл под курсором#!#2227#! GREYITEM Компилирование одним кликом END_POPUP MENUITEM SEPARATOR POPUP Справка MENUITEM AutoIt3Help#!#2048#!#%COMMANDER_ MENUITEM RegExp#!#%COMMANDER_PATH%\Akel END_POPUP
Тогда можно те POPUP и END_POPUP, которые в начале строки отделить:
Код (?m)^P[^\r\n]+.*(?:[\r\n]+[^P\r\n][^\r\n]+)*[\r\n]*END_POPUP[^\r\n]*
В ином случае (без структуры) рег. выражения не помогут - только в цикле перебирать...
|
|
| |
asmadeus | Дата: Суббота, 23.01.2016, 00:15 | Сообщение № 58 |
|
Andrey_A, тогда вопрос снят. Цикл ужк получился - регулярка невозможна без ступенчатости, а ступенчатость - без регулярки. Мы пойдем другим путем Между прочим, приведенная тобой регулярка справляется со всем, кроме подменю второго уровня
|
|
| |
asmadeus | Дата: Вторник, 13.12.2016, 21:37 | Сообщение № 59 |
|
Всем привет! Поделитесь примером работы прогресс бара для скрипта Autoit. Скрипт интегрирует серию ключей в реестр, хотелось бы видеть ход выполнения
|
|
| |
Andrey_A | Дата: Среда, 14.12.2016, 16:30 | Сообщение № 60 |
Генералиссимус
На сайте с: 26.01.2012
Город: Сочи, Хоста
Сообщений: 7191
Награды: 143
Репутация: 125
Аверин Андрей
|
Код Global $h_Progress,$ProgressID,$n=100
$h_Progress=GUICreate('прогресс',200,30,10,10,-1,8) $ProgressID=GUICtrlCreateProgress(5,5,190,20) GUISetState(8)
For $i=1 To $n GUICtrlSetData($ProgressID,Ceiling(100*$i/$n)) Sleep(100) Next
GUIDelete($h_Progress)
|
|
| |
|