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

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

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

(*.*)


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


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

Профиль | Сайт | Отправить 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

 

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


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

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


Creat0R
Цитата:
Ну почему, в массив то попадают все строки с нужным текстом, а зачем в массиве символы перевода строки и возврата каретки?
Ни один из символов перевода строки, в массив не попадают. (у меня)
Цитата:
И кстати, при чтении всего файла, совсем не обязательно использовать FileGetSize()
Енто вопрос не ко мне а, к автору функции: _FileReadToArray() - раз уж он так зделал, то и я вслед за ним не стал это исправлять.
Цитата:
А разве в этом примере символы перевода строки и возврата каретки не заменятся на символ новой строки? может при делении на массив нужно использовать @LF а не @CR?
А, какая разница?
На всякий случай поясню:
Допустим в одном файле могут встретится 3 различных типа завершения строки, с помощью StringRegExpReplace() я последовательно меняю все @CRLF на @CR, затем @LF на @CR, в конечном счёте в тексте остаётся только @CR который я использую в качестве разделителя.
Но можно использовать и @LF - не вижу разницы...
Код: Выделить весь код
$aArray = StringSplit(StringRegExpReplace(FileRead($hFile),"\r\n|\r",@LF),@LF)

Отправлено: 03:03, 21-06-2007 | #61



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

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


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


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

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


proxy
Цитата:
Diamond, спасибо. Необходимое с тектом реализовал уже по другому, а пример приму на заметку, чувствую дальше понадобиться.
Я бы посоветовал использовать UDF'ную функцию _FileReadToArray(), для считывания файла в массив но считаю, что в некоторых случаях она может сработать некорректно...
Хотя с другой стороны, кроме меня пока ещё никто не жаловался...
Код: Выделить весь код
#include <File.au3>
Dim $FileArray
_FileReadToArray("C:\1.txt",$FileArray)
$hFile = FileOpen("C:\1.txt",2)
$LineFeed = @CRLF
For $i=1 To $FileArray[0]
	If $i = $FileArray[0] Then $LineFeed = ''
	If $FileArray[$i] <> "Ненужная строка" Then
		FileWrite($hFile, $FileArray[$i] & $LineFeed)
	EndIf
Next
FileClose($hFile)

Отправлено: 04:42, 21-06-2007 | #62


Аватара для Creat0R

Must AutoIt


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

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


Diamond
Цитата:
в конечном счёте в тексте остаётся только @CR который я использую в качестве разделителя
А разве \n это @CR, мне казалось что \r это @CR, а \n это @LF, именно с этого и исходили мои вопросы.

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

Так вроде правильнее:

Код: Выделить весь код
$aArray = StringSplit(StringRegExpReplace(FileRead($hFile),"\n|\r",@LF),@LF)
По поводу функции для замены текста в файле...

Вот моя версия на подобную функцию:

Код: Выделить весь код
$Ret = ReplaceText("C:\test.txt", "Old Text", "New Text")
ConsoleWrite($Ret & @LF & @extended)

Func ReplaceText($FileName, $OldText, $NewText)
     If Not FileExists($FileName) Then Return SetError(1, 0, -1)
    If $OldText = "" Then Return SetError(2, 0, 0)
    $OldText = String($OldText)

        Local $hFile = FileOpen($FileName, 0)
    Local $VarToWrite = FileRead($hFile)
    FileClose($hFile)
    If Not StringInStr($VarToWrite, $OldText) Then Return SetError(3, 0, 0)

        Local $ReplStr = StringReplace($VarToWrite, $OldText, $NewText)
    Local $Extended = @extended

        Local $hFileW = FileOpen($FileName, 2)
    FileWrite($hFileW, $ReplStr)
    FileClose($hFileW)
    Return SetError(0, $Extended, 1)
EndFunc

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

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

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


Отправлено: 06:52, 21-06-2007 | #63


Аватара для Creat0R

Must AutoIt


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

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


Diamond
Дааа, оказывается ты прав.... возьмём этот пример:

Код: Выделить весь код
#include <Array.au3>
#include <File.au3>

Dim $Array

FileWrite("test.txt", "Line1" & @LF & "Line2" & @CR & "Line3" & @LF & "Line4")

_FileReadToArray("test.txt", $Array)

_ArrayDisplay($Array)
Получается такой массив:

Код: Выделить весь код
[1] = "Line1"
[2] = "Line2Line3"
[3] = "Line4"
Если применять этот же пример используя изменённую функцию _FileReadToArray(), то мы получаем “нормальный” массив (как и записи в файле) :

Код: Выделить весь код
[1] = "Line1"
[2] = "Line2"
[3] = "Line3"
[4] = "Line4"
Вот полная функция как она, имхо, должна быть построена:

Код: Выделить весь код
Func _FileReadToArray($sFilePath, ByRef $aArray)
    ;==============================================
    ; Local Constant/Variable Declaration Section
    ;==============================================
    Local $hFile = FileOpen($sFilePath, 0)

    If $hFile = -1 Then Return SetError(1)

    $aArray = StringSplit(StringRegExpReplace(FileRead($hFile),"\r|\n", @LF), @LF)

    FileClose($hFile)
    Return 1
EndFunc   ;==>_FileReadToArray
Хм.. надо бы её автору маякнуть об этом.... а ещё лучше, сразу в баг репорт запостить на оф. форум, привести пример что эта функция может возвращать не корректные данные...

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

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

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


Отправлено: 07:13, 21-06-2007 | #64


Аватара для Creat0R

Must AutoIt


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

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


Но всё же остаётся одна проблема - если в файле содержатся промежуточные символы перевода строки (@LF), то гинерируется пустой элемент массива...

Получается это ошибка функции StringSplit() ?

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

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

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


Отправлено: 07:35, 21-06-2007 | #65


Googler


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

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


Diamond
Цитата:
чтобы произвести добавление, удаление или замену элементов, массивы используют UDF-функции
Хм... Добавление в конец массива можно сделать через ReDim(), вставку в середину массива без UDF не осуществить в обоих случаях.... Физическое удаление элементов массива проводить не обязательно - достаточно "пометить" их и не использовать при обработке.... по замене не понял - это же обычное присвоение.

Diamond, Creat0R ...по поводу _FileReadToArray():

- у StringSplit() есть флаг, позволяющий использовать более одного символа для разбиения:
Код: Выделить весь код
$a = StringSplit ($text, @CRLF, 1)
- уж коли зашла речь про StringRegExp(), то она вполне самодостаточна:
Код: Выделить весь код
$a = StringRegExp ($text, '(?m)^(.*)$', 3)
Creat0R
Цитата:
оно вообще реализуемо?
ИМХО в общем виде - нет, иначе можно было бы без проблем подчинить себе любое окно, скажем тот же IE... Видимая "подчиненность" отражает классовую сущность окон, поэтому они должны быть как минимум в одном процессе... В случае с MsgBox() код расшарен через DLL и запускается в текущем потоке, поэтому подчинение реализуемо.

Последний раз редактировалось amel27, 21-06-2007 в 08:44.


Отправлено: 08:36, 21-06-2007 | #66


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


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

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


Цитата:
eNcub
Цитата:Если это окно не появляется, то нажатие стрелки вверх и энтера всё равно производится


Попробуй так:

Код:

WinWaitActive('Мастер новых подключений', 'Выберите, надо ли автоматически подключаться к Интернету', 5)
If WinActive('Мастер новых подключений', 'Выберите, надо ли автоматически подключаться к Интернету') Then Send('{UP}{ENTER}')
... попробовал, ничего не изменилось...
еще мысли есть у кого-нибудь? плз..

Отправлено: 09:40, 21-06-2007 | #67


Аватара для XXXler

Ветеран


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

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


eNcub,
Код: Выделить весь код
$Wtitle="Мастер новых подключений"
$Wtext="Выберите, надо ли автоматически подключаться к Интернету"
$Timeout=30

WinWait($Wtitle,$Wtext,$Timeout)
If WinExists($Wtitle,$Wtext) Then
  If Not WinActive($Wtitle,$Wtext) Then WinActivate($Wtitle,$Wtext)
  If WinWaitActive($Wtitle,$Wtext,$Timeout) Then Send("{UP}{ENTER}")
EndIf
если я правильно понял цель написания скрипта, то проще использовать твик реестра

Отправлено: 10:59, 21-06-2007 | #68


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


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

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


XXXler

таак, а что с реестром? этот вариант тоже не прошел...

Отправлено: 12:10, 21-06-2007 | #69


Googler


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

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


schel4ok
Цитата:
А кто-нибудь знает как запускать inf файлы при помощи AutoIt?
вот функция, запускающая произвольную секцию INF-файла… К сожалению, прямой вызов функции InstallHinfSection из setupapi.dll не сработал…
Код: Выделить весь код
Func _RunInfSection ($filepath, $section = 'DefaultInstall', $mode = 128)
    If Not(FileExists($filepath)) Then Return -1
    Local $ret = RunWait ('rundll32 setupapi,InstallHinfSection '& $section &' '& $mode &' '& FileGetLongName($filepath,1), @SystemDir, @SW_HIDE)
    Return $ret
EndFunc
proxy
Цитата:
от таких добавлений мои функции разростаются как на .....сникерсах и чипсах
хм, а свою dll тут ни как не создать? что просто вызывать когда необходимо?
чем не устраивает UDF?.. чтобы текст скрипта не разрастался, выделите функции в AU3-файл(ы) и загружайте через #include в заголовке скрипта...
Это сообщение посчитали полезным следующие участники:

Отправлено: 12:17, 21-06-2007 | #70



Компьютерный форум 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




 
Переход