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

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

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

Старожил


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

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


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





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


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

Помогите пожалуйста. Нужен маленький скриптик для решения некоторых рутинных задачь.
Вот что нужно сделать последовательно:

1) в папке DIR1 находим и удаляем файлы в названии которых присутствует text_1
2) в папке DIR2 находим xxx.sif и удаляем строки, в которых присутствует text_1
3) в папке DIR3 находим xxx.inf и добавляем в его секцию [XXX] несколько строчкек (text_2, text_3, ..., text_n)
4) в папке DIR4 находим yyy.inf ищем в его секции [YYY] text_4 и заменяем его на text_5
5) сохраняем все изменения и выводим отчёт о проделанной работе :-)

Заранее благодарен.

Отправлено: 05:05, 03-12-2006

 

Googler


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

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


biork
п.п.1-4, точно в соответствии с формулировкой (см. примечания):
Код: Выделить весь код
#include <File.au3>
#include <Array.au3>

$DIR1 = 'C:\DIR1'
_FilesDelete ($DIR1, '*text_1*')
$DIR2 = 'C:\DIR2'
_FileLinesDelete ($DIR2 & '\' & 'xxx.sif', 'text_1')
$DIR3 = 'C:\DIR3'
Dim $Lines3 [3] = ['text_2', 'text_3', 'text_n']
_InfSectionAddLines ($DIR3 & '\' & 'xxx.inf', 'XXX', $Lines3)
$DIR4 = 'C:\DIR4'
_InfSectionReplaceText ($DIR4 & '\' & 'yyy.inf', 'YYY', 'text_4', 'text_5')

; Удаление файлов в заданном каталоге по маске.
; Возвращает количество удаленных файлов.
Func _FilesDelete ($sPath, $sFilter)
    Local $aFiles, $i
    $aFiles = _FileListToArray ($sPath, $sFilter, 1)
    If IsArray ($aFiles) Then
        For $i=1 To $aFiles [0]
            FileDelete ($sPath & '\' & $aFiles [$i])
        Next
        Return $i-1
    Else
        Return 0
    EndIf
EndFunc

; Удаление строк файла по условию вхождения заданного текста
; Возвращает: 1 - успех, 0 - ошибка. Коды ошибок:
;   1 - ошибка чтения файла;
;   2 - ошибка сохранения файла.
Func _FileLinesDelete ($sFilePath, $sEntry)
    Local $aFileLines, $i
    If _FileReadToArray ($sFilePath, $aFileLines) Then
        For $i = $aFileLines [0] To 1 Step -1
            If StringInStr ($aFileLines [$i], $sEntry) Then _ArrayDelete ($aFileLines, $i)
        Next
        If _FileWriteFromArray ($sFilePath, $aFileLines, 1) Then
            Return 1
        Else
            SetError (2)
            Return 0
        EndIf
    Else
        SetError (1)
        Return 0
    EndIf
EndFunc

; Добавление заданного массива строк в секцию INF-файла
; Возвращает: 1 - успех, 0 - ошибка. Коды ошибок:
;   1 - переданный параметр не является массивом;
;   2 - выход за границы индекса;
;   3 - ошибка чтения файла;
;   4 - не найдена секция;
;   5 - ошибка сохранения файла.
Func _InfSectionAddLines ($sFilePath, $sSectionName, ByRef $aNewLines, $iStartIndex=0)
    Local $aFileLines, $i
    If Not IsArray ($aNewLines) Then
        SetError (1)
        Return 0
    EndIf
    If $iStartIndex >= UBound($aNewLines) Then
        SetError (2)
        Return 0
    EndIf
    If _FileReadToArray ($sFilePath, $aFileLines) Then
        Local $iStart = _ArraySearch ($aFileLines, '[' & $sSectionName & ']', 1)
        If $iStart = -1 Then
            SetError (4)
            Return 0
        EndIf
        For $i = UBound ($aNewLines)-1 To $iStartIndex Step -1
            _ArrayInsert ($aFileLines, $iStart+1, $aNewLines [$i])
        Next
        If _FileWriteFromArray ($sFilePath, $aFileLines, 1) Then
            Return 1
        Else
            SetError (5)
            Return 0
        EndIf
    Else
        SetError (3)
        Return 0
    EndIf
EndFunc

; Замена текста в пределах заданной секции INF-файла
; Возвращает: 1 - успех, 0 - ошибка. Коды ошибок:
;   1 - ошибка чтения файла;
;   2 - не найдена секция;
;   3 - ошибка сохранения файла.
Func _InfSectionReplaceText ($sFilePath, $sSectionName, $sTextFrom, $sTextTo)
    Local $aFileLines, $i
    If _FileReadToArray ($sFilePath, $aFileLines) Then
        Local $iStart = _ArraySearch ($aFileLines, '[' & $sSectionName & ']', 1)
        If $iStart = -1 Then
            SetError (2)
            Return 0
        EndIf
        Local $iFinal = _ArraySearch ($aFileLines, '[', $iStart +1)
        If $iFinal = -1 Then $iFinal = $aFileLines [0]
        If $iFinal > $iStart Then
            For $i = $iStart+1 To $iFinal
                $aFileLines [$i] = StringReplace ($aFileLines [$i], $sTextFrom, $sTextTo)
            Next
            If _FileWriteFromArray ($sFilePath, $aFileLines, 1) Then
                Return 1
            Else
                SetError (3)
                Return 0
            EndIf
        EndIf
    Else
        SetError (1)
        Return 0
    EndIf
EndFunc
З.Ы. несколько замечаний по формулировке задачи:

- INF-файл не просто текст, поэтому корректней говорить о переопределении параметров секции, а не "замене текста";
- соответственно, по п.4 возможно имелась ввиду замена строк целиком, а не вхождений текста;
- секции могут не отличаться от INI-файлов, в этом случае можно задействовать встроенные ф-ции AutoIT INI*.

Последний раз редактировалось amel27, 04-12-2006 в 05:54.

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

Отправлено: 08:21, 03-12-2006 | #2



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

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


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


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

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


2Creat0R
Не совсем так,точнее совсем не так
Дать ссылку на картинку(системную,т.е на ту которая находится в системе по умолчанию,например в папке system32) это легко.
Мне надо чтобы картинка интегрировалась внутрь скрипта,с расположением которое ей указано и всегда была там,независимо от того есть такая картинка в системе или нет.

Отправлено: 08:30, 04-12-2006 | #3


Старожил


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

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


Изображения
Тип файла: jpg error.jpg
(16.6 Kb, 28 просмотров)

amel27

Большое спасибо.

Ошибочка выпадает (см. файл)

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

Отправлено: 10:24, 04-12-2006 | #4


Googler


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

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


biork
Цитата:
и что такое?
Подключение дополнительных (пользовательских) функций, файлы расширений находятся в папке \Include установочного каталога. Так как файлы не загружены, то и функция (соответственно) неопознана.
Это сообщение посчитали полезным следующие участники:

Отправлено: 12:47, 04-12-2006 | #5


Старожил


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

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


amel27

С пользовательскими функциями разобрался. Пришлось, всего-лишь, переустановить AutoIt...
Что касаеися самого скрипта:

1) Удаление файлов в заданном каталоге по маске - работает!
1.2) Возвращает количество удаленных файлов - где и как посмотреть?

2) Удаление строк файла по условию вхождения заданного текста - работает!
2.1) Возвращает: 1 - успех, 0 - ошибка. Коды ошибок - так же не знаю где их увидеть.

3) Добавление заданного массива строк в секцию INF-файла - не работает...
3.1) Возвращает: 1 - успех, 0 - ошибка. Коды ошибок - очень хотелось бы их посмотреть...

4) Замена текста в пределах заданной секции INF-файла - не работает...
4.1) В чём ошибка - так же не видно...

Я понимаю, что всё от криворукости... но всё же? :-)

Ещё вопрос: строки text_2, text_3, text_n, а так же text_4 и text_5 содержат всякие знаки припинания (запятаи, кавычки, скобки и пр.). Может, нужно принимать какие то дополнительные меры, что бы всё это правильно было интерпритировано?

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

Отправлено: 08:50, 05-12-2006 | #6


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


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

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


А нет ли для AutoIt какой-нибудь рисовалки форм?
А то очень долго координаты с "дизайн-макета" списывать..

Отправлено: 09:41, 05-12-2006 | #7


Googler


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

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


biork
Цитата:
Возвращает: 1 - успех, 0 - ошибка. Коды ошибок - очень хотелось бы их посмотреть
Пример с выводом результата на экран:
Код: Выделить весь код
; ...
$DIR3 = 'C:\DIR3'
Dim $Lines3 [3] = ['text_2', 'text_3', 'text_n']
$ret = _InfSectionAddLines ($DIR3 & '\' & 'xxx.inf', 'XXX', $Lines3)
If $ret Then
    MsgBox (64, 'Собщение', 'Операция завершена без ошибок.')
Else
    MsgBox (16, 'Ошибка', "Код ошибки: " & @error)
EndIf
; ...
Yozhegg
Цитата:
А нет ли для AutoIt какой-нибудь рисовалки форм?
А то очень долго координаты с "дизайн-макета" списывать..
Думаю если бы был, то за него пришлось бы платить...

Последний раз редактировалось amel27, 05-12-2006 в 13:09.

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

Отправлено: 11:22, 05-12-2006 | #8


Старожил


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

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


amel27

Код: Выделить весь код
1 - переданный параметр не является массивом;
2 - выход за границы индекса;
3 - ошибка чтения файла;
4 - не найдена секция;
5 - ошибка сохранения файла.
Код ошибки - 0! :-)


Отправлено: 12:38, 05-12-2006 | #9


Googler


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

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


biork
Извиняюсь, очепятку исправил...

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



Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » AutoIt » [Архив - Часть 1.3] 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.2] AutoIt скрипты Dirk Diggler AutoIt 505 02-12-2006 11:00
[Архив - Часть 1.1] AutoIt скрипты EgOrus AutoIt 335 04-02-2006 16:58




 
Переход