Имя пользователя:
Пароль:  
Помощь | Регистрация | Забыли пароль?  | Правила  

Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » AutoIt » [Архив - Часть 1.2] AutoIt скрипты

Ответить
Настройки темы
[Архив - Часть 1.2] AutoIt скрипты

Ветеран


Сообщения: 565
Благодарности: 41

Профиль | Сайт | Отправить PM | Цитировать


Изменения
Автор: Vadikan
Дата: 25-01-2008
Внимание!
Тема переведена в архивное состояние





(настоятельно рекомендуется к прочтению/поиску)


Руководство к действию по работе c AutoIt.
Можно ли с помощью AutoIt выбрать каталог? Хочу нацарапать оболочку, которая мне будет конфиги для nnBackup писать, дык выбрать каталог для бэкапа пока только вручную получается... Нельзя ли как-нть вывалить стандартный диалог по выбору файлов-папок, и получить из него результат действий пользователей?

-------
Tega AutoPatcher. Все обновления для XP в одном пакете. http://tega.ru/dirk/links.html


Отправлено: 10:47, 10-02-2006

 

Старожил


Сообщения: 205
Благодарности: 20

Профиль | Отправить PM | Цитировать


Creat0R
Цитата:
Попрубуй так:
Код:
$NerocmdTxt = WinGetText("Заголовок консоли", "")
Не работает. Более того, AutoItInfo тоже не видит никакого текста в окне консоли. Еще есть идеи?

Отправлено: 13:10, 04-11-2006 | #441



Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети.

Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля.


Googler


Сообщения: 3665
Благодарности: 1563

Профиль | Отправить PM | Цитировать


Creat0R
Цитата:
$Array = StringSplit("1|4|6|8", "|")
ну ты умеешь озадачить... зачем делать сплит строки если предложенная функция возвращает уже готовый массив с номерами строк?
Цитата:
если дубликатов нет, ненужно выводить сообщения, а просто в массив с нулём ($Array[0])
именно такой массив ф-ция и возвращает, только не одномерный, а двумерный - ты же вроде заказывал не только номера строк ($Array[$i][0]), но и их содержимое ($Array[$i][1])? Счетчик $Array[0][0] содержит число возвращенных строк - если он равен 0, то вхождений соответственно нет. SELECT добавлен для наглядности, я же вроде сказал что его можно убрать.
Цитата:
Но и тут есть проблема, после удаления строки под первым номером присутствующем в массиве, все остальные теряют своё значения, и удаляются уже не те строки
эта проблема решается просто - нужно проходить массив в обратном направлении: от конца файла к его началу:
Код: Выделить весь код
#include <File.au3>

$File = "c:\test.txt"
$Array = _TextInFile ($File, "Просто текст")
If $Array[0][0]>1 Then
	For $i = $Array[0][0] to 2 Step -1
		_FileWriteToLine($File, $Array[$i][0], "", 1)
	Next
EndIf

Func _TextInFile ($file, $text)
	Local $i, $txtLines, $res [1][2] = [[0,0]]
	_FileReadToArray ($file, $txtLines)
	If IsArray ($txtLines) Then
		For $i=1 To $txtLines [0]
			If StringInStr ($txtLines [$i], $text) Then
				ReDim $res [$res [0][0]+2][2]
				$res [0][0] = $res [0][0] +1
				$res [$res [0][0]][0] = $i
				$res [$res [0][0]][1] = $txtLines [$i]
			EndIf
		Next
	EndIf
	Return $res
EndFunc
Это сообщение посчитали полезным следующие участники:

Отправлено: 09:42, 05-11-2006 | #442


Аватара для Creat0R

Must AutoIt


Сообщения: 3054
Благодарности: 1009

Профиль | Сайт | Отправить PM | Цитировать


amel27
Приогромное спасибо! Я думал что функция для моей задумки, будет выглядеть намного длинее

В связи с тем, что эта функция относительно быстро срабатывает (я проверял на большом файле с текстом), у меня появился вопрос...

У меня есть функция (от Sanja Alone), которая делает поиск по файлу, и если текст найден, то возвращается в Array[0] номер строки где был найден текст, а в Array[1] возвращается состав этой строки. Так вот, та функция, визуально большая, и большие файлы обрабатывает довольно долго (доходит до 5-ти секунд). И ещё, возвращается только первое-найденное вхождение, а хотелось бы точно также как и с твоей функцией, чтобы в массив возвращались все номера строк, и все содержания этих строк.

В общем, вопрос в том, можно ли немного переделать эту функцию, чтобы вместо поиска дубляжей, искалось просто слово, и возвращались те же значения, что и в этой функции? (чтобы также можно было воспользоваться ими, ну, допустим для замены текста на что то другое - для этого у меня уже есть функция).

-------
“Сделай так просто, как возможно, но не проще этого.”... “Ты никогда не решишь проблему, если будешь думать так же, как те, кто её создал.”

Альберт Эйнштейн

P.S «Не оказываю техподдержку через ПМ/ICQ, и по email - для этого есть форум. ©»

http://creator-lab.ucoz.ru/Images/Icons/autoit_icon.png Русское сообщество AutoIt | http://creator-lab.ucoz.ru/Images/Ic...eator_icon.png CreatoR's Lab | http://creator-lab.ucoz.ru/Images/Icons/oac_icon.png Opera AC Community


Отправлено: 23:47, 05-11-2006 | #443


Googler


Сообщения: 3665
Благодарности: 1563

Профиль | Отправить PM | Цитировать


Creat0R
Цитата:
та функция, визуально большая, и большие файлы обрабатывает довольно долго (доходит до 5-ти секунд).
Смотри текст скрипта - у Sanja Alone дополнительно реализована нечувствительность к регистру для русского текста (для английского это выполняется автоматически), возможно поэтому он и работает медленнее...

Цитата:
вопрос в том, можно ли немного переделать эту функцию, чтобы вместо поиска дубляжей, искалось просто слово, и возвращались те же значения, что и в этой функции?
м-да... подставь в функцию вместо "дубля" искомое "слово", и функция вернет "те же значения"...
в чем разница-то?.. возвращаются всегда все значения, просто при замене использовались не все (смотри пределы):
Код: Выделить весь код
For $i = $Array[0][0] to 2 Step -1
...
Next
Это сообщение посчитали полезным следующие участники:

Отправлено: 04:20, 06-11-2006 | #444


Аватара для Creat0R

Must AutoIt


Сообщения: 3054
Благодарности: 1009

Профиль | Сайт | Отправить PM | Цитировать


amel27
Ещё раз спасибо. В данном случае, нет необходимости в поиске текста содержащий кириллицу (разве что бывают ссылки с кириллицей ).

-------
“Сделай так просто, как возможно, но не проще этого.”... “Ты никогда не решишь проблему, если будешь думать так же, как те, кто её создал.”

Альберт Эйнштейн

P.S «Не оказываю техподдержку через ПМ/ICQ, и по email - для этого есть форум. ©»

http://creator-lab.ucoz.ru/Images/Icons/autoit_icon.png Русское сообщество AutoIt | http://creator-lab.ucoz.ru/Images/Ic...eator_icon.png CreatoR's Lab | http://creator-lab.ucoz.ru/Images/Icons/oac_icon.png Opera AC Community


Отправлено: 09:55, 06-11-2006 | #445


Аватара для TERMINAL

Ветеран


Сообщения: 753
Благодарности: 28

Профиль | Отправить PM | Цитировать


1. Creat0R спасибо за скрипт, но он всеравно не подходит. В твоём скрипте постоянно, бесконечно стартует Setup.exe

При установке программы (например-Setup.exe) может вывалиться окно с ошибкой ERROR (ошибка вылетает в том случае если неустановлены видео драйвера), а может и не вывалиться (если же установлены видео драйвера). Так вот, хотелось бы чтобы скрипт работал как с установленными дровами так и без них. Т.е. при старте Setup.exe может установка прекратиться и вылезет окно ERROR-так можно этот файл стартовать до 3х раз-потом уже ошибка не вылетает и прога начинает устанавливаться, а может ошибка и не вылезти.

=======================================================

2. ПОМОГИТЕ НАЙТИ ОШИБКУ !!!
Мне нужно убрать галочки при инсталяции (именно мышкой <ControlClick>)-написал такой скрипт, но он не убират галочки:

HTML код: Выделить весь код
WinWait("InstallShield Wizard","InstallShield Wizard Complete") WinActivate("InstallShield Wizard","InstallShield Wizard Complete") ControlClick("InstallShield Wizard","InstallShield Wizard Complete","Static1") ControlClick("InstallShield Wizard","InstallShield Wizard Complete","Static1")


Отправлено: 16:32, 06-11-2006 | #446


Аватара для Creat0R

Must AutoIt


Сообщения: 3054
Благодарности: 1009

Профиль | Сайт | Отправить PM | Цитировать


TERMINAL

Цитата:
постоянно, бесконечно стартует Setup.exe
Присмотрись в скрипт, там указанно окно при пресутствии которого, скрипт опять запустит Setup.exe

Цитата:
вылезет окно ERROR
Кажется это было окно "MM" ...

Код: Выделить весь код
If WinExists("ERROR", "") Then ;Если окно с заголовком ERROR существует, то....
WinClose("ERROR", "")  ;Закрываем это окно
ContinueLoop ;продолжаем (начинаем) скрипт сначала (запустив Setup.exe опять)
EndIf ;Конец условия (“Если окно с заголовком ERROR существует, то....”)
ExitLoop ;Выход из цикла (без запуска Setup.exe)
Цитата:
он не убират галочки
Он убирает, и, ставит сразу обратно - у тебя две одинаковые строки (два нажатия мышкой в одном и том же чекбоксе)...

Код: Выделить весь код
ControlClick("InstallShield Wizard","InstallShield Wizard Complete","Static1")
ControlClick("InstallShield Wizard","InstallShield Wizard Complete","Static1")
Убери (или измени) один, и будет ставить галку (если все параметры верные).

-------
“Сделай так просто, как возможно, но не проще этого.”... “Ты никогда не решишь проблему, если будешь думать так же, как те, кто её создал.”

Альберт Эйнштейн

P.S «Не оказываю техподдержку через ПМ/ICQ, и по email - для этого есть форум. ©»

http://creator-lab.ucoz.ru/Images/Icons/autoit_icon.png Русское сообщество AutoIt | http://creator-lab.ucoz.ru/Images/Ic...eator_icon.png CreatoR's Lab | http://creator-lab.ucoz.ru/Images/Icons/oac_icon.png Opera AC Community


Отправлено: 16:53, 06-11-2006 | #447


Аватара для Creat0R

Must AutoIt


Сообщения: 3054
Благодарности: 1009

Профиль | Сайт | Отправить PM | Цитировать


amel27
Есть ещё небольшой вопрос, также немного затрагивающий функцию поиска дубликатов...

Возможно ли сделать поиск по файлу на дубликаты, но заранее не знаяя вхождения? т.е нужно проверить все существующие строки в файле, и если хоть какая то из них имеет дубликат (именно по строке), то удалить все точно такие же строки, но оставив оригинал (для каждой такой найденной строки, произвести данную операцию - т.е удаление дубликатов найденных строк). Но, подвог (для меня) в том, что нужно удалить не именно те строки (их дубликаты), а те которые располагаются на три строчки выше.

Вот пример файла:

Код: Выделить весь код
Первая строка
Ещё строка - > вот это и нужно чтобы удалилось (так как на три строки ниже, есть дубль той строки, которая на одну ниже этой (но её положение не фажно))
и ещё строка
просто текст
и ещё строка
и ещё больше текста
строка номер 7  - > и вот это нужно чтобы удалилось
строка 8
и текст строки номер 9
И ещё больше текста

P.S.
В данном случае, скорость обработки, не очень уж важно, да и визуализация тоже - Главное функционал!

-------
“Сделай так просто, как возможно, но не проще этого.”... “Ты никогда не решишь проблему, если будешь думать так же, как те, кто её создал.”

Альберт Эйнштейн

P.S «Не оказываю техподдержку через ПМ/ICQ, и по email - для этого есть форум. ©»

http://creator-lab.ucoz.ru/Images/Icons/autoit_icon.png Русское сообщество AutoIt | http://creator-lab.ucoz.ru/Images/Ic...eator_icon.png CreatoR's Lab | http://creator-lab.ucoz.ru/Images/Icons/oac_icon.png Opera AC Community


Отправлено: 20:17, 06-11-2006 | #448


Googler


Сообщения: 3665
Благодарности: 1563

Профиль | Отправить PM | Цитировать


Creat0R
Цитата:
ещё небольшой вопрос
примерно так... Пара замечаний - во-первых, оператор "=" (для целых строк) в отличие от StringInStr (для вхождений) дружит с русским языком и это хорошо... во-вторых, строки с дополнительными пробелами в конце/начале строк будут рассматриваться как различные, если это не устраивает нужно применить функцию StringStripWS.
Код: Выделить весь код
#include <File.au3>

$File = "c:\test.txt"

Dim $FileLines
_FileReadToArray ($file, $FileLines)
; Возвращаем массив из дублирующихся записей
$DupLines = _DupsInArray ($FileLines)
; Страховка от пустого массива если дублей нет
If $DupLines [0][0] >0 Then
	; Рабочий массив для отметок удаляемых записей
	Local $DelFlags [$FileLines [0] +1]
	For $i=1 To $DupLines [0][0]
		; расчитываем номер строки для удаления
		$delNum = $DupLines [$i][0] - 3
		; отмечаем кандидата на удаление в массиве
		$DelFlags [$delNum] = 1
	Next
	; Собственно цикл удаления
	For $i = $FileLines [0] To 1 Step -1
		If $DelFlags [$i] = 1 Then
			_FileWriteToLine ($File, $i, "", 1)
		EndIf
	Next
EndIf

; Возвращает двумерный массив со счетчиком, содержащий только дубли
Func _DupsInArray (ByRef $array)
	Local $i, $i, $res [1][2] = [[0,0]]
	; рабочий массив для отметки обработанных дублей
	Local $flags [$array [0] +1]
	For $i=1 To $array [0]
		For $j=$i+1 To $array [0]
			If $flags [$j] <> 1 Then
				If $array [$i] = $array [$j] Then
					ReDim $res [$res [0][0]+2][2]
					$res [0][0] = $res [0][0] +1
					$res [$res [0][0]][0] = $j
					$res [$res [0][0]][1] = $array [$j]
					$flags [$j] = 1
				EndIf
			EndIf
		Next
	Next
	Return $res
EndFunc
Это сообщение посчитали полезным следующие участники:

Отправлено: 11:21, 07-11-2006 | #449


Аватара для Creat0R

Must AutoIt


Сообщения: 3054
Благодарности: 1009

Профиль | Сайт | Отправить PM | Цитировать


amel27
Я извеняюсь, я не обращал внимания, но в том файле, для которго это будет делаться, есть дубли которые не должны быть тронуты. Т.е я даже заранее знаю начало строки - URL= но перед этим идёт таб (@Tab)... в общем, вот часть этого файла (это закладки от браузера Opera):

Код: Выделить весь код
#URL
	ID=16
	NAME=ICQ2Go!
	URL=http://www.icq.com/icq2go/flicq.html
	ICONFILE=www.icq.com.ico
	IN PANEL=YES
	PANEL_POS=10

#URL
	ID=17
	NAME=Сетевые инструменты
	URL=file://C:/Program Files/Opera/help/tools/tools.htm
	ICONFILE=tools.ico
	IN PANEL=YES
	PANEL_POS=13

#URL
	ID=18
	NAME=Просмотр Кеша
	URL=file://C:/Program Files/Opera/help/Opera_Cache_Viewer76/viewer.htm
	ICONFILE=cash.ico
	IN PANEL=YES
	PANEL_POS=14

#URL
	ID=19
	NAME=ICQ2Go!
	URL=http://www.icq.com/icq2go/flicq.html
	ICONFILE=www.icq.com.ico
	IN PANEL=YES
	PANEL_POS=10

#URL
	ID=20
	NAME=Просмотр Кеша
	URL=file://C:/Program Files/Opera/help/Opera_Cache_Viewer76/viewer.htm
	ICONFILE=cash.ico
	IN PANEL=YES
	PANEL_POS=14
Так вот, тут видно, что есть много дублей, но не все нужно трогать, а именно те, которые имеют начало URL= (ссылка потом может быть любая). И нужно чтобы удалилась строчка, содержащая это - #URL (т.е она расположена на три строки выше чем совпавший дубль). Я пометил красным те строки, которые именно в этом куске, и должны будут быть удалены в конце обработки.

-------
“Сделай так просто, как возможно, но не проще этого.”... “Ты никогда не решишь проблему, если будешь думать так же, как те, кто её создал.”

Альберт Эйнштейн

P.S «Не оказываю техподдержку через ПМ/ICQ, и по email - для этого есть форум. ©»

http://creator-lab.ucoz.ru/Images/Icons/autoit_icon.png Русское сообщество AutoIt | http://creator-lab.ucoz.ru/Images/Ic...eator_icon.png CreatoR's Lab | http://creator-lab.ucoz.ru/Images/Icons/oac_icon.png Opera AC Community


Отправлено: 12:01, 07-11-2006 | #450



Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » AutoIt » [Архив - Часть 1.2] AutoIt скрипты

Участник сейчас на форуме Участник сейчас на форуме Участник вне форума Участник вне форума Автор темы Автор темы Шапка темы Сообщение прикреплено

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
Открывая 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.3] AutoIt скрипты biork AutoIt 503 09-06-2007 11:27
[Архив - Часть 1.1] AutoIt скрипты EgOrus AutoIt 335 04-02-2006 16:58




 
Переход