|
Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » AutoIt » [архив - Часть 2] AutoIt скрипты |
|
[архив - Часть 2] AutoIt скрипты
|
(*.*) Сообщения: 36549 |
Профиль | Сайт | Отправить PM | Цитировать
Внимание! Тема переведена в архивное состояние Текущая тема http://forum.oszone.net/thread-98914.html (настоятельно рекомендуется к прочтению/поиску) Руководство к действию по работе c AutoIt. Сайт программы Русская справка Коллекция AutoIt скриптов от Sanja Alone Коллекция AutoIt скриптов от MSFN (могут быть устаревшие). Справочник по командам rundll32 (команды запуска диалоговых окон и не только...) AutoIt скрипты - введение и FAQ (статья содержит вводную информацию по AutoIt, а также ответы на ЧаВо). Данная тема предназначена для общих вопросов по AutoIt. Вопросы по установке приложений при помощи AutoIt следует задавать в соответствии с правилами форума "Автоматическая установка приложений". Таким образом, если вы хотите узнать как установить Winamp 5.x при помощи AutoIt, то создайте тему [autoit] Winamp 5.х (если таковой еще нет на форуме). Проверить наличие тем можно при помощи поиска или фильтров. Цитата Vadikan:
|
||
------- Отправлено: 00:02, 05-02-2006 |
Must AutoIt Сообщения: 3054
|
Профиль | Сайт | Отправить PM | Цитировать amel27,
Цитата:
Я кстати нашёл ещё один способ как это можно сделать, только не уверен надёжен ли он: StringRegExpReplace($Str, '\A' & $Char & '+', '') И для конечных символов... StringRegExpReplace($Str, $Char & '+\z', '') Цитата:
Заметил один глюк при использовании $BIF_BROWSEINCLUDEFILES - Если сразу после появления окна нажать Отмена или ОК (на выбранном элементе), то функция не сразу возвращает (проходит около секунды). И ещё, значки для файлов (если есть таковы в начальном каталоге), все имеют иконку Internet Explorer - А остальные значки (для папок и системные элементы), вовсе не имеют значков, все как будто папки... это длится также около секунды, потом всё нормально становится. |
||
------- Отправлено: 04:28, 06-08-2007 | #231 |
Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети. Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля. |
Googler Сообщения: 3665
|
Профиль | Отправить PM | Цитировать Creat0R
Цитата:
Цитата:
Цитата:
Цитата:
|
||||
Отправлено: 07:46, 06-08-2007 | #232 |
Must AutoIt Сообщения: 3054
|
Профиль | Сайт | Отправить PM | Цитировать amel27,
Цитата:
Но и с ствоим методом есть небольшая проблема: $Char = '\t' $Char = StringRegExpReplace($Char, '([][{}()|.?+*\\^])', '\\\1') $Ret = StringRegExpReplace("\\test", '(?i)^[' & $Char & ']+([^' & $Char & '])', '\1') ConsoleWrite($Ret) Вот функция (для чего вообще мне и требовалось сия опция), позволяет стриппить (обножать) определённый(е) символ(ы): ;======================================= ;$Flag = 0 (или любое значение кроме 1,2, и 3) - обычная замена всех вхождении заданного символа ;$Flag = 1 - убирание заданного символа в начале $String ;$Flag = 2 - убирание заданного символа в конце $String ;$Flag = 3 - убирание заданного символа в начале и в конце $String ; ;$ReplaceAll = 0 (по умолчанию) - заменяется только первое вхождение заданного(ных) символа(ов) ;$ReplaceAll = 0 - заменяются все вхождения символов с заданой стороны (в зависимости от значения $Flag) ;======================================= Func _StringStripChars($String, $Char, $Flag=0, $ReplaceAll=0) If StringLen($String) = 0 Or Not StringInStr($String, $Char) Then Return SetError(1, 0, $String) Local $Patern, $RetStr = $String $Char = StringRegExpReplace($Char, '([][{}()|.?+*\\^])', '\\\1') Switch $Flag Case 1 $Patern = '(?i)\A' & $Char If $ReplaceAll = 1 Then $Patern = '(?i)\A' & $Char & '+' $RetStr = StringRegExpReplace($String, $Patern, '') Return $RetStr Case 2 $Patern = '(?i)' & $Char & '\z' If $ReplaceAll = 1 Then $Patern = '(?i)' & $Char & '+\z' $RetStr = StringRegExpReplace($String, $Patern, '') Return $RetStr Case 3 $Patern = '(?i)\A' & $Char & '|' & $Char & '\z' If $ReplaceAll = 1 Then $Patern = '(?i)\A' & $Char & '+|' & $Char & '+\z' $RetStr = StringRegExpReplace($String, $Patern, '') Return $RetStr Case Else $String = StringReplace($String, $Char, '') Return SetError(0, @extended, $String) EndSwitch Return SetError(2, 0, $String) EndFunc Это конечно можно сделать проверкой длины и т.п... но хотелось именно средствами RegExp... Цитата:
Цитата:
|
|||
------- Последний раз редактировалось Creat0R, 06-08-2007 в 09:30. Отправлено: 08:57, 06-08-2007 | #233 |
Googler Сообщения: 3665
|
Профиль | Отправить PM | Цитировать Creat0R
Цитата:
Цитата:
; $Chars - удаляемые символы ; $Flags - тип замены: ; $Flag = 0 - удаление символов по всей строке ; $Flag = 1 - удаление символов в начале строки ; $Flag = 2 - удаление символов в конце строки ; $Flag = 3 - удаление символов в начале И в конце строки ; другие значения флагов равносильны $Flag = 0, $Count=0 ; $Count - количество удаляемых символов ; $Count<=0 - глобальное удаление всех вхождений (для заданных значений флагов) Func _StringStripChars($String, $Chars, $Flag=0, $Count=0) $Chars = StringRegExpReplace($Chars, '([]\\^])', '\\\1') Local $Pattern = '(?i)[' & $Chars & ']', $sCnt = '{1,'& $Count &'}' If $Count<=0 Then $sCnt='+' If $Flag <>0 Then $Count = 0 If $Flag=1 Then $Pattern= '(?i)^['& $Chars &']'& $sCnt If $Flag=2 Then $Pattern= '(?i)[' & $Chars &']'& $sCnt &'$' If $Flag=3 Then $Pattern= '(?i)^['& $Chars &']'& $sCnt &'|[' & $Chars &']'& $sCnt &'$' Return StringRegExpReplace($String, $Pattern, '', $Count) EndFunc Цитата Creat0R:
|
|||
Последний раз редактировалось amel27, 07-08-2007 в 02:54. Причина: ошибка в скрипте Отправлено: 11:49, 06-08-2007 | #234 |
Must AutoIt Сообщения: 3054
|
Профиль | Сайт | Отправить PM | Цитировать amel27,
Цитата amel27:
Спасибо за (довольно укороченную) функцию _StringStripChars() - но в ней тоже есть проблема... К примеру: Получаем на выходе test_ - а должно вернуться _test_, т.е должно заменяться только найденное в начале (из за того что указан $Flag = 1), ведь там нету символа -. А вот к примеру если имеем такую строку: -_-_test_, то используя $Count = 1 должно вернуться -_test_ А возвращается _-_test_ - я понимаю что заменяется только первое вхождение, но суть этой функции в том, чтобы заменялось то вхождение, которое передаётся через $Chars, вне зависимости от количества символов, т.е чтобы оно расматривалось как одно целое значение (символ). У меня получилось это сделать обычными средствами (циклами и проверками String...), но это не так быстро как через RegExp . Цитата:
|
||
------- Отправлено: 21:07, 06-08-2007 | #235 |
Googler Сообщения: 3665
|
Профиль | Отправить PM | Цитировать Creat0R
Цитата:
; $SubString - удаляемая подстрока ; $Flags - тип замены: ; $Flag = 0 - удаление вхождений подстроки по всей строке ; $Flag = 1 - удаление вхождений подстроки в начале строки ; $Flag = 2 - удаление вхождений подстроки в конце строки ; $Flag = 3 - удаление вхождений подстроки в начале И в конце строки ; другие значения флагов равносильны $Flag = 0, $Count=0 ; $Count - количество удаляемых вхождений ; $Count<=0 - глобальное удаление всех вхождений (для заданных значений флагов) Func _StringStripString($String, $SubString, $Flag=0, $Count=0) $SubString = StringRegExpReplace($SubString, '([][{}()|.?+*\\^])', '\\\1') Local $Pattern = '(?i)(' & $SubString & ')', $sCnt = '{1,'& $Count &'}' If $Count<=0 Then $sCnt='+' If $Flag <>0 Then $Count = 0 If $Flag=1 Then $Pattern= '(?i)^('& $SubString &')'& $sCnt If $Flag=2 Then $Pattern= '(?i)(' & $SubString &')'& $sCnt &'$' If $Flag=3 Then $Pattern= '(?i)^('& $SubString &')'& $sCnt &'|(' & $SubString &')'& $sCnt &'$' Return StringRegExpReplace($String, $Pattern, '', $Count) EndFunc Цитата:
З.Ы. в функции _StringStripChars() была ошибка - слово "Pattern" кое-где было с одной "t" (исправил) |
||
Отправлено: 03:45, 07-08-2007 | #236 |
Must AutoIt Сообщения: 3054
|
Профиль | Сайт | Отправить PM | Цитировать amel27,
Цитата:
Цитата:
Кстати, теперь почему то не нужно проверять окончание начального каталога, т.е работает без тех двух добавленных строк (с ними кстати НЕ работает ). Цитата:
|
|||
------- Отправлено: 04:34, 07-08-2007 | #237 |
Googler Сообщения: 3665
|
Профиль | Отправить PM | Цитировать Creat0R
Цитата:
DllCall ("user32.dll","int","SendMessage", "hwnd", $hWnd, "int", $BFFM_SETSELECTIONA, "int", 1, "ptr", DllStructGetPtr($uCB,1)) DllCall ("user32.dll","int","SendMessage", "hwnd", $hWnd, "int", $BFFM_SETEXPANDED, "int", 1, "wstr", DllStructGetData($uCB,1)) Цитата:
|
||
Отправлено: 11:23, 07-08-2007 | #238 |
Новый участник Сообщения: 13
|
Профиль | Отправить PM | Цитировать Премного извиняюсь, почитал документацию, немного разобрался, стал скрипты писать, все ок, но теперь понадобилось сделать так, чтобы если программа уже установлена, то скрипт завершался, сразу не нашел , а тут страниц очень много, подскажите пожалуйста
Типа такого: if exists ("c:\1c\1c.exe") Then Exit |
Отправлено: 12:43, 07-08-2007 | #239 |
Ветеран Сообщения: 604
|
Профиль | Отправить PM | Цитировать spooll,
Либо так и проверять, к примеру: If FileExists(@ProgramFilesDir & "\MyProgram\Program.exe") Then Exit Else ;...Your script EndIf |
Отправлено: 14:13, 07-08-2007 | #240 |
Участник сейчас на форуме | Участник вне форума | Автор темы | Сообщение прикреплено |
| |||||
Название темы | Автор | Информация о форуме | Ответов | Последнее сообщение | |
Открывая 7z архив пишет не удаётся открыть как архив. Можно ли его восстановить? | DreDo | Хочу все знать | 4 | 01-12-2009 18:54 | |
[Архив - Часть 3] AutoIt скрипты .:[общие вопросы]:. | Vadikan | AutoIt | 1543 | 18-01-2009 10:46 | |
[Архив - Часть 1.3] AutoIt скрипты | biork | AutoIt | 503 | 09-06-2007 11:27 | |
[Архив - Часть 1.2] AutoIt скрипты | Dirk Diggler | AutoIt | 505 | 02-12-2006 11:00 | |
[Архив - Часть 1.1] AutoIt скрипты | EgOrus | AutoIt | 335 | 04-02-2006 16:58 |
|