|
Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » AutoIt » [архив - Часть 2] AutoIt скрипты |
|
[архив - Часть 2] AutoIt скрипты
|
(*.*) Сообщения: 36568 |
Внимание! Тема переведена в архивное состояние Текущая тема 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 | Цитировать Angelus
Цитата:
Как вариант менять раскладку перед посыланием символов, либо (намного надёжнее) писать текст используя ControlSetText(), ведь как я поняол нужно вписать текст в определёное поле другого приложения? Цитата:
Я лично такой метод использую: $File = "C:\test.txt" $Ret = _FileDeleteDuplicates($File, -1) If $Ret = 1 Then MsgBox(64, "", "Was deleted <" & @extended & "> duplicates in file [" & $File & "]") ElseIf @error Then MsgBox(48, "", "File [" & $File & "] was not found.") EndIf Func _FileDeleteDuplicates($sFile, $sDirection=-1) If Not FileExists($sFile) Then Return SetError(1, 0, -1) Local $sFileArray = StringSplit(StringStripCR(FileRead($sFile)), @LF) _ArrayDeleteClones($sFileArray, $sDirection) Local $Extended = @extended If $Extended = 0 Then Return SetError(0, 0, 0) Local $hFile = FileOpen($sFile, 130), $LF = @LF For $i = 1 To $sFileArray[0] If $i = $sFileArray[0] Then $LF = "" FileWrite($hFile, $sFileArray[$i] & $LF) Next FileClose($hFile) Return SetError(0, $Extended, 1) EndFunc Func _ArrayDeleteClones(ByRef $sArray, $sDirection=-1) If Not IsArray($sArray) Then Return SetError(1) If UBound($sArray, 0) > 1 Then Return SetError(2) Local $NewArr[1], $Extended=0, $FindDuplicate For $i = 1 To UBound($sArray)-1 $FindDuplicate = _FindInArray($sArray, $sArray[$i], $i-1, $sDirection) If $FindDuplicate = -1 Then ReDim $NewArr[UBound($NewArr)+1] $NewArr[UBound($NewArr)-1] = $sArray[$i] Else $Extended += 1 EndIf Next $NewArr[0] = UBound($NewArr) - 1 $sArray = $NewArr Return SetError(0, $Extended, $sArray) EndFunc Func _FindInArray(ByRef $Array, $WhatToFind, $StartFrom=1, $sDirection=-1) If UBound($Array) < 2 Then Return -1 Local $iFor = $StartFrom, $iTo = 1, $iStep = -1 If $sDirection = 1 Then $iFor = $StartFrom + 2 $iTo = UBound($Array)-1 $iStep = 1 EndIf For $iArr = $iFor To $iTo Step $iStep If $Array[$iArr] = $WhatToFind Then Return $iArr Next Return -1 EndFunc |
||
------- Отправлено: 09:49, 17-08-2007 | #311 |
Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети. Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля. |
Ветеран Сообщения: 604
|
Профиль | Отправить PM | Цитировать |
Отправлено: 17:59, 17-08-2007 | #312 |
Must AutoIt Сообщения: 3054
|
Профиль | Сайт | Отправить PM | Цитировать Maza Faka,
Цитата:
![]() |
|
------- Отправлено: 18:21, 17-08-2007 | #313 |
Googler Сообщения: 3665
|
Профиль | Отправить PM | Цитировать Maza Faka, Creat0R
еще два варианта удаления дублей: в 1-м случае файл подается в виде строки, во 2-м как массив строк #include <array.au3> Func _TextStripDupLines($text) If StringRight($text,2)<>@CRLF Then $text &= @CRLF Do $text = StringRegExpReplace($text,'(?s)(?m)(^[^\n]+\n)(.*?)(^\1)','\1\2') Until @extended=0 Return $text EndFunc Func _ArrayDeleteClones($strArray) Local $search, $newArray[1]=[0] For $i = 1 To $strArray[0] $search = -1 If $i<$strArray[0] Then $search = _ArraySearch($strArray, $strArray[$i], $i+1) If $search=-1 Then $newArray[0]+=1 ReDim $newArray[$newArray[0]+1] $newArray[$newArray[0]]=$strArray[$i] EndIf Next Return $newArray EndFunc |
Последний раз редактировалось amel27, 18-08-2007 в 12:21. Причина: ошибка в скрипте Отправлено: 07:34, 18-08-2007 | #314 |
Must AutoIt Сообщения: 3054
|
Профиль | Сайт | Отправить PM | Цитировать amel27,
Цитата:
![]() Правда этот метод расчитан только если попадаются как разделители строк @CRLF, а как быть с теми случаями когда строки поделены только лишь @LF/@CR? пробовал похимичить с Pattern, ничего не вышло ![]() |
|
------- Отправлено: 07:56, 18-08-2007 | #315 |
Ветеран Сообщения: 604
|
Профиль | Отправить PM | Цитировать amel27
Немного исправил твой код: #include <Array.au3> #include <File.au3> Dim $strArray, $newArray _FileReadToArray("C:\test.txt", $strArray) _ArrayDeleteClones($strArray, $newArray) Func _ArrayDeleteClones($strArray, $newArray) Dim $search, $newArray[1]=[0] For $i = 1 To $strArray[0] $search = $i If $i <= $strArray[0] Then $search = _ArraySearch($strArray, $strArray[$i], $i+1) If $search = -1 Then $newArray[0] += 1 ReDim $newArray[$newArray[0]+1] $newArray[$newArray[0]]=$strArray[$i] EndIf Next _ArrayDisplay($newArray, "Result") EndFunc |
Отправлено: 11:17, 18-08-2007 | #316 |
Googler Сообщения: 3665
|
Профиль | Отправить PM | Цитировать Цитата Maza Faka:
![]() Цитата Creat0R:
З.Ы. На самом деле AutoIT поддерживает не все возможности регулярных выражений, поэтому приходится выкручиваться. |
||
Последний раз редактировалось amel27, 19-08-2007 в 02:58. Отправлено: 12:17, 18-08-2007 | #317 |
Ветеран Сообщения: 604
|
Профиль | Отправить PM | Цитировать amel27
В итоге сделал так: #include <Array.au3> #include <File.au3> Dim $strArray, $newArray _FileReadToArray("C:\test.txt", $strArray) _ArrayDeleteClones($strArray, $newArray) _ArrayDisplay($newArray, "Result") Func _ArrayDeleteClones($strArray, ByRef $newArray) Dim $search, $newArray[1]=[0] For $i = 1 To $strArray[0] $search = _ArraySearch($strArray, $strArray[$i], $i+1) If $search = -1 Then $newArray[0] += 1 ReDim $newArray[$newArray[0]+1] $newArray[$newArray[0]]=$strArray[$i] EndIf Next EndFunc |
Отправлено: 13:26, 18-08-2007 | #318 |
Googler Сообщения: 3665
|
Профиль | Отправить PM | Цитировать Maza Faka
я тут подумал насчет твоего варианта - почему он работает хотя вроде не должен... ведь действительно, если использовать встроенную защиту _ArraySearch() код можно еще сократить ![]() #include <array.au3> #include <file.au3> Dim $a, $f = 'c:\test.txt' _FileReadToArray($f, $a) _FileWriteFromArray($f,_ArrayDeleteClones($a),1) Func _ArrayDeleteClones($strArray) Local $newArray[1]=[0] For $i = 1 To $strArray[0] If _ArraySearch($strArray, $strArray[$i], $i+1)<0 Then $newArray[0]+=1 ReDim $newArray[$newArray[0]+1] $newArray[$newArray[0]]=$strArray[$i] EndIf Next Return $newArray EndFunc |
Последний раз редактировалось amel27, 19-08-2007 в 02:36. Отправлено: 14:22, 18-08-2007 | #319 |
Ветеран Сообщения: 604
|
Профиль | Отправить PM | Цитировать amel27
Цитата amel27:
![]() |
|
------- Отправлено: 19:21, 18-08-2007 | #320 |
![]() |
Участник сейчас на форуме |
![]() |
Участник вне форума |
![]() |
Автор темы |
![]() |
Сообщение прикреплено |
| |||||
Название темы | Автор | Информация о форуме | Ответов | Последнее сообщение | |
Открывая 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 |
|