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

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

Закрытая тема
Настройки темы
[архив - Часть 2] AutoIt скрипты

(*.*)


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


Конфигурация

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


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







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


Руководство к действию по работе c AutoIt.


Сайт программы
Русская справка
Коллекция AutoIt скриптов от Sanja Alone
Коллекция AutoIt скриптов от MSFN (могут быть устаревшие).
Справочник по командам rundll32 (команды запуска диалоговых окон и не только...)

AutoIt скрипты - введение и FAQ (статья содержит вводную информацию по AutoIt, а также ответы на ЧаВо).



Данная тема предназначена для общих вопросов по AutoIt. Вопросы по установке приложений при помощи AutoIt следует задавать в соответствии с правилами форума "Автоматическая установка приложений". Таким образом, если вы хотите узнать как установить Winamp 5.x при помощи AutoIt, то создайте тему [autoit] Winamp 5.х (если таковой еще нет на форуме). Проверить наличие тем можно при помощи поиска или фильтров.
Цитата Vadikan:
В теме уже свыше 500 сообщений и поиск нужной информации в ней усложняется. Есть предложение собрать все решения (скрипты) и разместить их на Wiki по принципу "один скрипт - одна статья wiki", добавляя статьи в категорию Autoit. Речь, в принципе, идет об общих решениях, а не о скриптах для установки конкретной программы. Название статьи, очевидно, должно отражать назначение скрипта. Затем можно в шапке просто разместить ссылки на статьи Wiki.

-------
Канал Windows 11, etc | Чат @winsiders

Это сообщение посчитали полезным следующие участники:

Отправлено: 00:02, 05-02-2006

 

Googler


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

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


Creat0R
еще немного поразмыслил - про "+" я пожалуй не прав (были и другие варианты) - если поставить "*" функция должна корректно отрабатывать @LF/@CRLF, ну а про @CR я уже сказал... Кстати, из каждой пары одинаковых строк остается первая а вторая удаляется, если нужно наоборот достаточно поменять подстановку "\1\2" на "\2\1".
Это сообщение посчитали полезным следующие участники:

Отправлено: 03:08, 19-08-2007 | #321



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

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


Аватара для Maza Faka

Ветеран


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

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


amel27
Откуда такие познания в синтаксисе регулярных выражений? Может FAQ есть какой подробный?

-------
Сообщение помогло? Не забудьте нажать на Полезное сообщение


Отправлено: 08:01, 19-08-2007 | #322


Аватара для Creat0R

Must AutoIt


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

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


amel27,
Вобщем видимо это оптимальный вариант, без никаких массивов, и сторонних библиотек:

Код: Выделить весь код
$File = "C:\Test.txt"

$Ret = _FileDeleteDuplicates($File, -1)

If $Ret = 1 Then
    MsgBox(64, "Results", "Was deleted <" & @extended & "> duplicates in file [" & $File & "]")
ElseIf @error Then
    MsgBox(48, "Error", "File [" & $File & "] was not found.")
EndIf

Func _FileDeleteDuplicates($sFile, $sDirection=-1)
    If Not FileExists($sFile) Or StringInStr(FileGetAttrib($sFile), "D") Then Return SetError(1, 0, 0)

        Local $FileStr = FileRead($sFile), $FileHasEndCRLF = True, $Extended = 0
    Local $ReplDirectVal = '\1\2'
    If $sDirection <> -1 Then $ReplDirectVal = '\2\1'

        If StringRight($FileStr, 2) <> @CRLF Then
        $FileStr &= @CRLF
        $FileHasEndCRLF = False
    EndIf

        Do
        $FileStr = StringRegExpReplace($FileStr, '(?s)(?m)(^[^\n]+\n)(.*?)(^\1)', $ReplDirectVal)
        $Extended += @extended
    Until @extended = 0
    If $Extended = 0 Then Return SetExtended(0, 0)

        If Not $FileHasEndCRLF Then $FileStr = StringTrimRight($FileStr, 2)

        Local $hFile = FileOpen($sFile, 2)
    FileWrite($hFile, $FileStr)
    FileClose($hFile)
    Return SetExtended($Extended/2, 1)
EndFunc

Maza Faka
Цитата Maza Faka:
Может FAQ есть какой подробный?
Есть тут что-то: http://shop.piter.com/lib/978531800056/regvir.phtml
И вот ещё ресурс посвящённый RegExp.

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

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

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

Это сообщение посчитали полезным следующие участники:

Отправлено: 08:14, 19-08-2007 | #323


Googler


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

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


Creat0R
Цитата:
видимо это оптимальный вариант
Ну ты прям почти все учел. Кстати, в RegExp-шаблоне последние скобки можно опустить (подстановка "\3" не используется, они у меня от отладки остались) - это должно немного ускорить обработку.

Maza Faka
Цитата:
Откуда такие познания в синтаксисе регулярных выражений?
почти все мои познания из книжки по первому линку Creat0R'а... правда у меня вторая редакция - там примеров побольше... к сожалению, только в бумажном варианте.

Отправлено: 10:45, 19-08-2007 | #324


Аватара для Maza Faka

Ветеран


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

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


amel27, Creat0R,
Цитата amel27:
почти все мои познания из книжки по первому линку Creat0R'а
Уже скачал, в DJVU-формате

amel27
Сохранил весь топик в версии для печати и изучаю. Наткнулся на твой скрипт(я его немного изменил, вернее упростил для себя):
Вот так работает:
Код: Выделить весь код
$Dir2 = LinesDelete("c:\dir2\xxx.sif", "text_1")

Func LinesDelete($path, $string)
    Local $StrArray
    _FileReadToArray($path, $StrArray)
    For $i = $StrArray[0] To 1 Step -1
        If StringInStr($StrArray[$i], $string) Then _ArrayDelete($StrArray, $i)
            _FileWriteFromArray($path, $StrArray, 1)
        Next
    EndFunc
А вот так выдаёт ошибку, хотя тоже отрабатывает:
Код: Выделить весь код
Func LinesDelete($path, $string)
    Local $StrArray
    _FileReadToArray($path, $StrArray)
    For $i = 1 To $StrArray[0] Step 1
        If StringInStr($StrArray[$i], $string) Then _ArrayDelete($StrArray, $i) ;Здесь выдаёт ошибку
            _FileWriteFromArray($path, $StrArray, 1)
        Next
    EndFunc
Можешь обьяснить почему?

Отправлено: 11:37, 19-08-2007 | #325


Новый участник


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

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


Всем здравствовать!!!
Вопрос такой,как с помощью АвтоИт сравнить дату создания двух файлов.С ехе файлами проше,их я сравниваю при помощи FileGetVersion (),но мне надо сравнивать не только ехе ,но и
другие типы файлов.Подскажите что-нибудь или ссылку дайте где можно почитать.Спасибо

-------
Scio me, nihil scire


Отправлено: 19:55, 19-08-2007 | #326


Пользователь


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

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


13ghost
В скриптовом языке AutoIt есть функция FileGetTime, с помощью которой можно получить информацию о дате и времени последней модификации указанного файла.
Поробнее можно посмотреть в справке.
Узнать именно дату создания файла вряд ли возможно. Так как она храниться не в файлах, а служебных таблицах ОС.

Отправлено: 21:57, 19-08-2007 | #327


Аватара для Creat0R

Must AutoIt


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

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


amel27,
Цитата:
в RegExp-шаблоне последние скобки можно опустить
Т.е так:

Код: Выделить весь код
'(?s)(?m)(^[^\n]+\n)(.*?)^\1'
?

Или вовсе убрать (^\1)? хотя так не работает - цикл не прерывается.

Цитата:
к сожалению, только в бумажном варианте.
Вот кажется второе изданеие тоже в формате djvu - http://www.softtime.ru/info/fridl.php

А тут вообще этого добра полно

Maza Faka,
Цитата:
А вот так выдаёт ошибку
В этом случае массив обрабатывается с начала к концу, поэтому при удалении элемента (_ArrayDelete()), массив уменьшается, хотя обработка задана по последнему его значению (до входа в цикл). Поэтому ошибка происходит когда в цикле досигается не существующий элемент массива (удалённый).
Для этого и потребовалось перербирать массив с конца к началу (For $i = $StrArray[0] To 1 Step -1), где будут проверяться меньшие элементы, в данном случае ошибки быть не может.

Алексей Н.,
Цитата:
Узнать именно дату создания файла вряд ли возможно
Ну почему, есть ведь флаг 1...

Цитата AutoIt3.chm:
[optional] Flag to indicate which timestamp
0 = Modified (default)
1 = Created
2 = Accessed
Код: Выделить весь код
$FileTimeArr = FileGetTime(@SystemDir & "\Notepad.exe", 1)

MsgBox(64, "Results", "Create Date/Time is:" & @LF & _
    $FileTimeArr[2] & "/" & $FileTimeArr[1] & "/" & $FileTimeArr[0] & ", " & _
    $FileTimeArr[3] & ":" & $FileTimeArr[4] & ":" & $FileTimeArr[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


Отправлено: 22:09, 19-08-2007 | #328


Пользователь


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

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


Доброго времени уважаемые...нет ли какой нибуть возможности сделать автоустановку приложения пользователем без прав, если ему надо устанавливает, нет удаляет... возможно ли как нибуть зашить в код строчку типа RunAs

Последний раз редактировалось mikola1983, 20-08-2007 в 07:45.


Отправлено: 06:51, 20-08-2007 | #329


Аватара для Maza Faka

Ветеран


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

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


Creat0R
Цитата Creat0R:
В этом случае массив обрабатывается с начала к концу, поэтому при удалении элемента (_ArrayDelete()), массив уменьшается, хотя обработка задана по последнему его значению (до входа в цикл). Поэтому ошибка происходит когда в цикле досигается не существующий элемент массива (удалённый).
Значит, как я понял, когда массив обрабатывается с начала к концу, то после удаления элемента (_ArrayDelete()), меняется размерность массива ($StrArray[0]), а в цикле идёт обращение к прежней размерности массива, поэтому возникает ошибка?

Цитата Creat0R:
Ну почему, есть ведь флаг 1...
Цитата AutoIt3.chm:[optional] Flag to indicate which timestamp
0 = Modified (default)
1 = Created
2 = Accessed
Вот млин, а в русской справке такого нет , когда нужно было, я мучился, прикручивал батник.

-------
Сообщение помогло? Не забудьте нажать на Полезное сообщение


Последний раз редактировалось Maza Faka, 20-08-2007 в 08:20.


Отправлено: 08:08, 20-08-2007 | #330



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

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

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
Открывая 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




 
Переход