|
Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » AutoIt » [Архив - Часть 1.3] AutoIt скрипты |
|
[Архив - Часть 1.3] AutoIt скрипты
|
Старожил Сообщения: 250 |
Внимание! Тема переведена в архивное состояние (настоятельно рекомендуется к прочтению/поиску) Руководство к действию по работе c AutoIt. Помогите пожалуйста. Нужен маленький скриптик для решения некоторых рутинных задачь. Вот что нужно сделать последовательно: 1) в папке DIR1 находим и удаляем файлы в названии которых присутствует text_1 2) в папке DIR2 находим xxx.sif и удаляем строки, в которых присутствует text_1 3) в папке DIR3 находим xxx.inf и добавляем в его секцию [XXX] несколько строчкек (text_2, text_3, ..., text_n) 4) в папке DIR4 находим yyy.inf ищем в его секции [YYY] text_4 и заменяем его на text_5 5) сохраняем все изменения и выводим отчёт о проделанной работе :-) Заранее благодарен. |
|
Отправлено: 05:05, 03-12-2006 |
Googler Сообщения: 3665
|
Профиль | Отправить PM | Цитировать Creat0R
Цитата:
![]() - во избежание проблем индексные переменные в функциях нужно объявлять как Local; - пустые массивы (счетчик со значением 0) нужно обрабатывать отдельно перед входом в цикл; - учитывая, что счет индекса идет всегда с единицы, одной проверки IsArray() явно недостаточно. На самом деле все приведенные функции работают с пользовательским типом данных - "массив со счетчиком"… вот на принадлежность этому типу и надо проверять. Более того, при наличии уверенности в корректности массива можно обойтись без лишнего пользования UBound() - достаточно взять значение по индексу 0. - параметр $JoinedArray в функции _ArrayJoin() имхо избыточный, при нужде поменять параметры проблемы не составит: - зачем нужна _ArrayClear(), если можно обычным оператором присвоения переинициализировать массив? - в функции _ArrayReplace две строки перепутаны местами. #include <Array.au3> Func _IsCountArray (ByRef $arr) If IsArray ($arr) Then If $arr[0] = UBound ($arr)-1 Then Return True EndIf Return False EndFunc Func _ArrayJoin (ByRef $arrFrom, ByRef $arrTo) If _IsCountArray($arrFrom) And _IsCountArray($arrTo) Then Local $i, $n=0 If $arrFrom[0] =0 Then Return 0 For $i=1 To $arrFrom[0] $n+=_ArrayAdd ($arrTo, $arrFrom [$i]) Next $arrTo[0]+=$n Return $n EndIf SetError (1) Return -1 EndFunc Func _ArrayClone (ByRef $arr, $count = 1) Local $i, $n=0, $tmp = $arr If _IsCountArray ($arr) Then For $i=1 To $count $n+=_ArrayJoin ($tmp, $arr) Next Return $n EndIf SetError(1) Return -1 EndFunc Func _ArrayDeleteClones (ByRef $arr, $iCaseSense = 0) If _IsCountArray ($arr) Then Local $i, $n=0, $iClone If $arr[0] <2 Then Return 0 For $i=$arr[0] To 2 Step -1 $iClone = _ArraySearch ($arr, $arr[$i], 1, $i-1, $iCaseSense) If $iClone >0 Then $n+=_ArrayDelete ($arr, $iClone) $i-=1 EndIf Next $arr[0] = UBound($arr) -1 Return $n EndIf SetError(1) Return -1 EndFunc Func _ArrayReplace (ByRef $Array, $ValueToReplace, $NewValue) Local $i, $n=0 If _IsCountArray($Array) And IsString ($ValueToReplace) Then For $i = 1 To $Array[0] If StringInStr ($Array[$i], $ValueToReplace) Then $Array[$i] = StringReplace ($Array[$i], $ValueToReplace, $NewValue) $n+=1 EndIf Next Return $n EndIf SetError(1) Return -1 EndFunc Цитата:
|
||
Отправлено: 05:40, 19-02-2007 | #211 |
Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети. Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля. |
Googler Сообщения: 3665
|
Профиль | Отправить PM | Цитировать Creat0R
Цитата:
![]() Цитата:
|
||
Отправлено: 07:28, 19-02-2007 | #212 |
Must AutoIt Сообщения: 3054
|
Профиль | Сайт | Отправить PM | Цитировать amel27
Цитата:
Цитата:
Цитата:
![]() Цитата:
Цитата:
Цитата:
Цитата:
![]() ![]() Цитата:
P.S Думаю мне можно простить ошибки которые я допустил в функциях, т.к совсем недавно я вовсе не мог работать с массивами (для меня это было что то страшное и неопознанное), и то что я осмелился написать сам нужные мне функции, это что то - и благодаря таким замечаням как твои, думаю я вскоре освою их основы :UP: . |
||||||||
------- Отправлено: 10:16, 19-02-2007 | #213 |
Googler Сообщения: 3665
|
Профиль | Отправить PM | Цитировать Creat0R
Цитата:
Цитата:
![]() Цитата:
![]() ...теперь вопрос: нужно ли для этого создавать отдельную функцию? ![]() Цитата:
![]() |
||||
Отправлено: 11:44, 19-02-2007 | #214 |
Must AutoIt Сообщения: 3054
|
Профиль | Сайт | Отправить PM | Цитировать amel27
Цитата:
![]() Цитата:
Цитата:
![]() |
|||
------- Отправлено: 21:25, 19-02-2007 | #215 |
Must AutoIt Сообщения: 3054
|
Профиль | Сайт | Отправить PM | Цитировать amel27
На основе твоего примера для определения цифрового значения, я сделал функцию для обнажения всех НЕ числовых значении, т.е в результате возвращается значение содержащее только цифры: Func _StringStripNotNumber($String, $RetType=0) If StringLen($String) < 2 Then If StringRegExp($String, '^ *([0-9]+\.{0,1}[0-9]*|0x[0-9]+) *$') Then Return $String Return "" EndIf Local $i, $RetNumber, $AllStringArr = StringSplit($String, "") For $i = 1 To $AllStringArr[0] If StringRegExp($AllStringArr[$i], '^ *([0-9]+\.{0,1}[0-9]*|0x[0-9]+) *$') Then $RetNumber &= $AllStringArr[$i] Next If $RetType = 1 And StringLen($RetNumber) >= 1 Then $AllStringArr = StringSplit($RetNumber, "") Return $AllStringArr EndIf Return $RetNumber EndFunc Может у кого то есть более оригинальное название для этой функции? ![]() А как можно получить весь путь до файла, за исключением самого имени файла? Т.е к примеру, имеем путь C:\test\test.zip - и нужно получить только путь C:\test - хотел бы узнать как это можно осуществить исключительно регулярными вырожениями.... Я до сих пор обходился так: Но может есть путь по короче? я имею в виду так чтобы одной функцией StringRegExpReplace получить этот же эффект. |
------- Отправлено: 04:28, 20-02-2007 | #216 |
Must AutoIt Сообщения: 3054
|
Профиль | Сайт | Отправить PM | Цитировать amel27
Извини что достаю тебя уже третьий пост подряд, но я нашел небольшой недочёт в функции _FileSelectFolder() - там заголовок (первый параметр $title) не отображается ![]() |
------- Отправлено: 06:02, 20-02-2007 | #217 |
Googler Сообщения: 3665
|
Профиль | Отправить PM | Цитировать Creat0R
Цитата:
Func _StringStripNotNumber ($String, $RetType=0) $String = StringRegExpReplace ($String,'[^0-9]','') ; Удаляем все не-цифры If $RetType = 1 Then Return StringSplit ($String, "") Return $String EndFunc Цитата:
|
||
Отправлено: 08:38, 20-02-2007 | #218 |
Googler Сообщения: 3665
|
Профиль | Отправить PM | Цитировать Creat0R
Цитата:
![]() |
|
Отправлено: 08:54, 20-02-2007 | #219 |
Must AutoIt Сообщения: 3054
|
Профиль | Сайт | Отправить PM | Цитировать amel27
Цитата:
![]() Цитата:
Цитата:
Цитата:
![]() Моя версия на функцию деления пути используя регулярные выражения: #include <Array.au3> $Path = "c:\my test\path\test.zip" $PathArr = _PathSplitByRegExp($Path) _ArrayDisplay($PathArr, "Demo of _PathSplitByRegExp()") Func _PathSplitByRegExp($sPath, $pDelim="\") Local $RetArray[8], $iArr $pDelim = "\" & $pDelim $RetArray[0] = $sPath $RetArray[1] = StringRegExpReplace($sPath, $pDelim & '.*', $pDelim) ;Drive letter $RetArray[2] = StringRegExpReplace($sPath, $pDelim & '[^' & $pDelim & ']*$', '') ;Path without FileName and extension $RetArray[3] = StringRegExpReplace($sPath, '\.[^.]*$', '') ;Full path without File Extension $RetArray[4] = StringRegExpReplace($sPath, '^.' & $pDelim & '*:', '') ;Full path without drive letter $RetArray[5] = StringRegExpReplace($sPath, '^.*' & $pDelim, '') ;FileName and extension $RetArray[6] = StringRegExpReplace(StringRegExpReplace($sPath, '^.*' & $pDelim, ''), '\.[^.]*$', '') ;Just Filename $RetArray[7] = StringRegExpReplace($sPath, '^.*\.', '') ;Just Extension of a file ;Проверяем все значения (элементы массива), если в каком то из них небыла произведена замена, то присваеваем ему пустое значение ("") For $iArr = 1 To 7 If $RetArray[$iArr] = $sPath Then $RetArray[$iArr] = "" Next Return $RetArray EndFunc |
||||
------- Отправлено: 11:27, 20-02-2007 | #220 |
![]() |
Участник сейчас на форуме |
![]() |
Участник вне форума |
![]() |
Автор темы |
![]() |
Сообщение прикреплено |
| |||||
Название темы | Автор | Информация о форуме | Ответов | Последнее сообщение | |
Открывая 7z архив пишет не удаётся открыть как архив. Можно ли его восстановить? | DreDo | Хочу все знать | 4 | 01-12-2009 18:54 | |
[Архив - Часть 3] AutoIt скрипты .:[общие вопросы]:. | Vadikan | AutoIt | 1543 | 18-01-2009 10:46 | |
[архив - Часть 2] AutoIt скрипты | Vadikan | AutoIt | 985 | 21-01-2008 09:58 | |
[Архив - Часть 1.2] AutoIt скрипты | Dirk Diggler | AutoIt | 505 | 02-12-2006 11:00 | |
[Архив - Часть 1.1] AutoIt скрипты | EgOrus | AutoIt | 335 | 04-02-2006 16:58 |
|