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

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

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

(*.*)


Сообщения: 36569
Благодарности: 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

 

Аватара для Creat0R

Must AutoIt


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

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


Альтернатива подобной функции:

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

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

        While 1
        $Line = FileReadLine($hFile, $i)
        If @error = -1 Then ExitLoop
        If $Line <> "" Then
            ReDim $RetArr[UBound($RetArr)+1]
            $RetArr[UBound($RetArr)-1] = $Line
        EndIf
        $i += 1
    WEnd
    $RetArr[0] = UBound($RetArr)-1

        FileClose($hFile)
    Return $RetArr
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

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

Отправлено: 02:41, 22-06-2007 | #81



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

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


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


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

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


Creat0R
Они туда попадают, потому что ты их с самого начала записываешь в текстовой файл.
Пожалуй возьму эту функцию на вооружение... Но всё таки, мне кажется что я сделал всё правильно...

Отправлено: 02:55, 22-06-2007 | #82


Аватара для Creat0R

Must AutoIt


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

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


Diamond
Цитата:
Я посмотрел содержимое файла в редакторе "Bred" и... оказалось что полученный массив полностью соответствует текстовому файлу... 6 строк, первая и последняя пустые.
Это я вижу и в Notepad(2 ), но мне кажется в массив не должны попадать пустые строки, и я считал что пустая строка, это и есть сочетание символов @LF и @CR, и что функция StringSplit() должна поделить на элементы которе не будут содержать тот символ на который делим (используя к примеру, в качестве третьего параметра, 1 - использовать все символы разделителя как метку деления, т.е не вносить сами символы в полученные элементы).

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

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

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


Отправлено: 02:56, 22-06-2007 | #83


Googler


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

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


Creat0R, Diamond
Цитата:
Теперь у меня началось - надеюсь это не заразно
нет, этого нельзя так оставлять ...для начала нужно ответить на вопросы:

- считать ли пустой строкой промежуток между началом файла и разделителем (@LF/@CR);
- считать ли пустой строкой промежуток между и спецсимволом и концом файла;
- как разбивать на пустые строки произвольную последовательность разделителей.

Обычно за разделитель считают именно @LF, а все вхождения @CR просто удаляют, соответственно последовательность @LF@LF будет означать "разделитель-пустая строка", при этом ответ на первые два вопроса чаще положительный... Можно договориться считать за разделители @CR и @LF, тогда последовательность @CRLF опять же вернет пустую строку (между ними). Мне представляется наиболее удобным следующий вариант:

- ДА
- НЕТ
- разделители: пары @CRLF/@LFCR и в последнюю очередь одиночные @CR и @LF

реализация через RegExp:
Код: Выделить весь код
$array = StringRegExp(FileRead ("Test.txt"),'(?s)(.*?)(?:\n\r|\r\n|[\n\r])', 3)
P.S. Ктати, в RegExp метасимволы '^' и '$' по умолчанию различают только позиции в начале и конце файла (т.е. всей строки), а с модификатором '(?m)' указывают на позиции после- и перед- @LF соответственно...

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


Отправлено: 06:50, 22-06-2007 | #84


Аватара для Creat0R

Must AutoIt


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

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


amel27
Цитата:
реализация через RegExp:
Хм... попробуй подобный пример:

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

$TestFileHandle = FileOpen("Test.txt", 2)

FileWrite($TestFileHandle, @CR & "Line1" & @LF & @CR & @LF & @CR & @LF & @CR & "Line2" & @CR & "Line3" & @LF & "Line4" & @CRLF)

FileClose($TestFileHandle)

Dim $Array
_FileReadToArray("Test.txt", $Array)

_ArrayDisplay($Array)

Func _FileReadToArray($sFilePath, ByRef $RetArr)
    Local $hFile = FileOpen($sFilePath, 0)
    If $hFile = -1 Then Return SetError(1)

        $RetArr = StringRegExp(FileRead($hFile), '(?s)(.*?)(?:\n\r|\r\n|[\n\r])', 3)
    $RetArr[0] = UBound($RetArr)-1

        FileClose($hFile)
    Return $RetArr
EndFunc
В массив попадают несколько пустных строк...

Кстати, я проверил скорость выполнения функции - С использованием RegExp, в 5-6 раз быстрее чем используя цикл, но зато при использовании цикла возвращаются только текстовые строки

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

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

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:05, 22-06-2007 | #85


Googler


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

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


Creat0R
Цитата:
В массив попадают несколько пустных строк
Все правильно, так и запрограммировано - (@LFCR & @LFCR & @LFCR) это разделитель из двух пустых строк... проблема не в том, что остаются пустые строки (почему бы им не быть?), а в том что этими строками считать... Проигнорировать пустые строки как раз проще:
Код: Выделить весь код
$RetArr = StringRegExp(FileRead($hFile),'(?s)(.*?)[\n\r]+', 3)
ADD: или так:
Код: Выделить весь код
$RetArr = StringRegExp(FileRead($hFile),'([^\n\r]+)', 3)
З.Ы. StringRegExp() возвращает массив без счетчика.. т.е. первый элемент занят!

Последний раз редактировалось amel27, 22-06-2007 в 13:38.

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

Отправлено: 12:54, 22-06-2007 | #86


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


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

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


amel27
Цитата:
Обычно за разделитель считают именно @LF, а все вхождения @CR просто удаляют
Т.е. получается... что функция _FileReadToArray() написана правильно?
Цитата:
- ДА
- НЕТ
- разделители: пары @CRLF/@LFCR и в последнюю очередь одиночные @CR и @LF
Я думал что символы @LFCR не могут сосуществовать вместе, т.е. должна получаться пустая строка...
...Если общего правила не существует - то этот вариант, как мне кажется, наиболее подходит.
-Да

Отправлено: 00:43, 23-06-2007 | #87


Аватара для Creat0R

Must AutoIt


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

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


amel27
Цитата:
или так:
Вот так лучше, таким образом даже первые пустые строки игнорируются.

Цитата:
StringRegExp() возвращает массив без счетчика.. т.е. первый элемент занят!
Хм... а вот это уже немного досадно... а самой функцией StringRegExp нельзя подвинуть все полученные элементы? пусть даже первый элемент будет содержать пустую строку, его то потом просто можно заменить ($RetArr[0] = Ubound($RetArr)-1).

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

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

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


Отправлено: 01:18, 23-06-2007 | #88


Googler


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

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


Diamond
Цитата:
Если общего правила не существует
в отличие от никсов текстовый файл, сформировнный в Windows не должен содержать одиночных @LF или @CR, только в паре @CRLF - для таких файлов _FileReadToArray() работает правильно

Creat0R
Цитата:
нельзя подвинуть все полученные элементы?
а оно того стоит?... зачем городить огород, для совместимости?.. не вижу смысла оформлять UDF ради одной строчки кода

Отправлено: 05:11, 23-06-2007 | #89


Аватара для Creat0R

Must AutoIt


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

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


amel27
Цитата:
а оно того стоит?.
Если нет необходимости перебирать массив, то да.

Цитата:
не вижу смысла оформлять UDF ради одной строчки кода
Иногда в скрипте нужно по несколько раз вызывать _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:42, 23-06-2007 | #90



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




 
Переход