[ Обновленные темы · Новые сообщения · Участники · Правила форума · Поиск · RSS ]
  • Страница 4 из 6
  • «
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • »
Модератор форума: Andrey_A, ХарВик, chip642  
Форум » • Общение Пользователей • » Секреты мастерства » Скриптинг на AUTOIT (Учимся писать скрипты на Autoit и делимся опытом)
Скриптинг на AUTOIT
asmadeusДата: Понедельник, 16.12.2013, 16:44 | Сообщение № 1
Генералиссимус

На сайте с: 14.12.2012
Город: Кривой Рог
Сообщений: 1375
Награды: 29
Репутация: 32
Скриптинг на AUTOIT




Тема для вопросов и ответов по написанию скриптов на autoit'e - стремительно набирающем популярность языке автоматизации выполнения рутинных дел при работе на компьютере.


Сообщение отредактировал asmadeus - Суббота, 01.02.2014, 23:01
 
Andrey_AДата: Четверг, 27.11.2014, 19:43 | Сообщение № 46
Генералиссимус

На сайте с: 26.01.2012
Город: Сочи, Хоста
Сообщений: 7173
Награды: 139
Репутация: 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
Генералиссимус

На сайте с: 14.12.2012
Город: Кривой Рог
Сообщений: 1375
Награды: 29
Репутация: 32
Andrey_A, забираю, протестирую на работе и завтра отпишусь
[plus]
что то у меня не вышло со своими переменными.
вроде объявляю через EnvSet, нор какое значение то ей придавать? Абсолютный путь? А толку тогда? В общем, нужен интернет и читать, читать, читать...
[/plus]


Сообщение отредактировал asmadeus - Пятница, 28.11.2014, 08:18
 
asmadeusДата: Среда, 29.04.2015, 22:35 | Сообщение № 48
Генералиссимус

На сайте с: 14.12.2012
Город: Кривой Рог
Сообщений: 1375
Награды: 29
Репутация: 32
Привет!
Не совсем 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    +    -    -


Да и вообще, может я иду нелегким путем? :D
 
Andrey_AДата: Суббота, 02.05.2015, 22:05 | Сообщение № 49
Генералиссимус

На сайте с: 26.01.2012
Город: Сочи, Хоста
Сообщений: 7173
Награды: 139
Репутация: 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
Генералиссимус

На сайте с: 14.12.2012
Город: Кривой Рог
Сообщений: 1375
Награды: 29
Репутация: 32
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
Город: Сочи, Хоста
Сообщений: 7173
Награды: 139
Репутация: 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
Генералиссимус

На сайте с: 14.12.2012
Город: Кривой Рог
Сообщений: 1375
Награды: 29
Репутация: 32
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
Генералиссимус

На сайте с: 14.12.2012
Город: Кривой Рог
Сообщений: 1375
Награды: 29
Репутация: 32
Привет! Требуется ясность в вопросе. Для частичного упрощения кода хотел провести замену
Код
   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
Город: Сочи, Хоста
Сообщений: 7173
Награды: 139
Репутация: 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
Генералиссимус

На сайте с: 14.12.2012
Город: Кривой Рог
Сообщений: 1375
Награды: 29
Репутация: 32
Andrey_A, да, ты правильно все объяснил, это просто я тупой.
Работы будет много, но надо было с самого начала делать так, а сейчас это сплошной геморрой...
 
asmadeusДата: Пятница, 22.01.2016, 23:21 | Сообщение № 56
Генералиссимус

На сайте с: 14.12.2012
Город: Кривой Рог
Сообщений: 1375
Награды: 29
Репутация: 32
Всем привет!
Требуется помощь по регулярным выражениям, я пока слаб в работе с многострочными текстами.
Итак, суть. Есть текст - просто файл 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
Город: Сочи, Хоста
Сообщений: 7173
Награды: 139
Репутация: 125
Аверин Андрей
asmadeus,
Цитата
Надо извлечь все секции подменю - от строки POPUP до строки END_POPUP, включая их.
В приведенном тексте секции три.

Нет никаких секций POPUP до строки END_POPUP, а тем более в вашем варианте:
Как можно извлечь от 1 до 2 в таком:

Код
1
1
2
2
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
Генералиссимус

На сайте с: 14.12.2012
Город: Кривой Рог
Сообщений: 1375
Награды: 29
Репутация: 32
Andrey_A, тогда вопрос снят. Цикл ужк получился - регулярка невозможна без ступенчатости, а ступенчатость - без регулярки. Мы пойдем другим путем
Между прочим, приведенная тобой регулярка справляется со всем, кроме подменю второго уровня
 
asmadeusДата: Вторник, 13.12.2016, 21:37 | Сообщение № 59
Генералиссимус

На сайте с: 14.12.2012
Город: Кривой Рог
Сообщений: 1375
Награды: 29
Репутация: 32
Всем привет!
Поделитесь примером работы прогресс бара для скрипта Autoit. Скрипт интегрирует серию ключей в реестр, хотелось бы видеть ход выполнения
 
Andrey_AДата: Среда, 14.12.2016, 16:30 | Сообщение № 60
Генералиссимус

На сайте с: 26.01.2012
Город: Сочи, Хоста
Сообщений: 7173
Награды: 139
Репутация: 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)


 
Форум » • Общение Пользователей • » Секреты мастерства » Скриптинг на AUTOIT (Учимся писать скрипты на Autoit и делимся опытом)
  • Страница 4 из 6
  • «
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • »
Поиск:

Интеллектуальные права и отказ от ответственности