[ Обновленные темы · Новые сообщения · Участники · Правила форума · Поиск · RSS ]
  • Страница 1 из 6
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • »
Модератор форума: Andrey_A, ХарВик, chip642  
Скриптинг на AUTOIT
asmadeusДата: Понедельник, 16.12.2013, 16:44 | Сообщение № 1
Генералиссимус

На сайте с: 14.12.2012
Город: Кривой Рог
Сообщений: 1375
Награды: 29
Репутация: 32
Скриптинг на AUTOIT




Тема для вопросов и ответов по написанию скриптов на autoit'e - стремительно набирающем популярность языке автоматизации выполнения рутинных дел при работе на компьютере.


Сообщение отредактировал asmadeus - Суббота, 01.02.2014, 23:01
 
asmadeusДата: Суббота, 01.02.2014, 23:09 | Сообщение № 2
Генералиссимус

На сайте с: 14.12.2012
Город: Кривой Рог
Сообщений: 1375
Награды: 29
Репутация: 32
Всем здравствуйте! Приходится спрашивать, раз не знаю...
Итак, имеется скрипт на autoit. Довольно немаленький как на мой взгляд - около 5000 строчек. Хочется сделать как то так - функции и элементы управления раскинуть по модулям тематическим (всего три). Как начать такую операцию)? Я думаю, надо три файла с функциями и контролами(если возможно) и один типа главный - где все это будет вызываться. Или я не прав? Натолкните на правильную мысль!


Сообщение отредактировал asmadeus - Суббота, 01.02.2014, 23:14
 
Andrey_AДата: Суббота, 01.02.2014, 23:42 | Сообщение № 3
Генералиссимус

На сайте с: 26.01.2012
Город: Сочи, Хоста
Сообщений: 7187
Награды: 143
Репутация: 125
Аверин Андрей
Цитата asmadeus ()
Хочется сделать как то так - функции и элементы управления раскинуть по модулям тематическим


Раскидать можно по разному. К примеру, в скрипте TCIMG.au3 18.000 чистых строк после обфускации, а в рабочем виде 30.000 (включая комментарии и тестовые функции)

Естественно когда-то встал вопрос о распределении всего этого по полочкам.

Для меня стала удобной разбивка на 6 файлов:

TCIMG.au3 - основа, функции всех команд

TCIMGP.au3 - файл всех функций параметров утилиты

TCIMGL.au3 - куда входят все функции, связанные со строками, парсингом, чтением из файлов

TCIMGPlus.au3 - функции DLL

TCIMGT.au3 - функции, связанные с Total Commander и с окнами

TCIMGE.au3 - тестовые куски кода

Цитата asmadeus ()
где все это будет вызываться.


в TCIMG.au3 прописано

Код
#include "TCIMGL.au3"
#include "TCIMGT.au3"
#include "TCIMGP.au3"
#include "TCIMGPlus.au3"
#include "TCIMGE.au3"


Скрипты должны быть в той же папке

[ps]Не забывайте делать комментарии в скрипте[/ps]


 
asmadeusДата: Суббота, 01.02.2014, 23:50 | Сообщение № 4
Генералиссимус

На сайте с: 14.12.2012
Город: Кривой Рог
Сообщений: 1375
Награды: 29
Репутация: 32
Andrey_A, о, попался знающий человек.
В моем случае - я сказал три файла -модуля и четвертый основа.
В связи с этим еще вопрос - если отказаться от стандартных include (насколько я знаю, ты работаешь по такому принципу), то мне надо забирать функции из них мне нужные и вставлять в каждый модуль, где нужен их вызов? То есть будет повтор?Создание контролов будет только в основе ведь? В дополнительных файлах только функции? Если до всего дойду, то начну раскидывать
 
Andrey_AДата: Воскресенье, 02.02.2014, 00:46 | Сообщение № 5
Генералиссимус

На сайте с: 26.01.2012
Город: Сочи, Хоста
Сообщений: 7187
Награды: 143
Репутация: 125
Аверин Андрей
Цитата asmadeus ()
если отказаться от стандартных include

Новичку не рекомендую от этого отказываться...

Я не использую include (в стандартном виде как во всех примерах) по ряду причин:

1. Не правильно работает обфускатор и компилятор при разной кодировке (у меня скрипты в UTF-8 без BOM а в include в ANSI 1251)

2. При include обфускатор вставляет в код кучу "мусора" (ненужных констант...)

3. Повторяющиеся блоки в различных функциях

4. В самих include-функциях тоже хватает "мусора":
- излишние многоразовые проверки, когда можно проверить один раз и передать в функцию
- старые записи в виде:

Код
If $a=1 Then
        $b=2
EndIf


когда можно записать:
Код
If $a=1 Then $b=2


или:

Код
Func _xxx()
        If $a=1 Then
          Return 0
        Else
          Return 1
        EndIf
EndFunc


когда можно:

Код
Func _xxx()
        If $a=1 Then Return 0
        Return 1
EndFunc


или вобще в одну строку в более новых версиях
Код
Func _xxx()
  Return $a=1 ? 0 : 1
EndFunc


и подобных примеров много (swich, а не select)...

5. Малофункциональные функции (масло масленое)

6. Часть пользовательских функций настолько медленные, что просто ужас.
...
(конечно это относится не ко всему - есть просто уникально быстрые и интересные)
------------------------------------------
Поэтому почти сразу от include напрямую отказался. И просто так ко мне в скрипт функция не попадёт, а проходит тестовый файл.
Недавно делал новую команду... на просторах инета нашёлся приблизительный код, который включал include, а в чистом виде выходил 1200 строк - но при внимательном подходе и созданием своих многофункциональных функций вышло всего 438 строк...

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

Цитата asmadeus ()
надо забирать функции из них мне нужные и вставлять в каждый модуль, где нужен их вызов? То есть будет повтор?


Если цель просто избавится от записей типа #include <Array.au3> ... и вытащить все функции в скрипт, то овчинка выделки не стоит, более того в будущем при добавлении новых общих функций будет каких-то не хватать и их надо в ручную (или автоматически) вставлять в код

------------------------------------------
Если же цель уменьшения кода за счёт объединения блоков, массивов, переменных... то вытащить всю подноготную просто:
Обфускатор по минимуму + Todo + тщательная работа над каждым блоком/функциями


 
asmadeusДата: Воскресенье, 02.02.2014, 00:52 | Сообщение № 6
Генералиссимус

На сайте с: 14.12.2012
Город: Кривой Рог
Сообщений: 1375
Награды: 29
Репутация: 32
то есть ты не советуешь такое? я понял правильно?
 
Andrey_AДата: Воскресенье, 02.02.2014, 00:59 | Сообщение № 7
Генералиссимус

На сайте с: 26.01.2012
Город: Сочи, Хоста
Сообщений: 7187
Награды: 143
Репутация: 125
Аверин Андрей
Цитата asmadeus ()
правильно?

Правильно... не рекомендую.


 
asmadeusДата: Воскресенье, 02.02.2014, 01:02 | Сообщение № 8
Генералиссимус

На сайте с: 14.12.2012
Город: Кривой Рог
Сообщений: 1375
Награды: 29
Репутация: 32
Цитата Andrey_A ()

[КОД:] Выделить весь код
Func _xxx()        
If $a=1 Then          
Return 0        
Else          
Return 1        
EndIf
EndFunc
когда можно:
[КОД:]
Выделить весь код
Func _xxx()        
If $a=1 Then Return 0        
Return 1
EndFunc


а этого я не знал.... стыдно... на сколько же строк теперь можно код уменьшить))
 
Andrey_AДата: Воскресенье, 02.02.2014, 01:08 | Сообщение № 9
Генералиссимус

На сайте с: 26.01.2012
Город: Сочи, Хоста
Сообщений: 7187
Награды: 143
Репутация: 125
Аверин Андрей
Цитата asmadeus ()
не знал

В справке к Autoit есть раздел "Обучение"
"Аккуратность скрипа"
"Как правильно создать условие If ... Then"


 
asmadeusДата: Воскресенье, 22.06.2014, 10:39 | Сообщение № 10
Генералиссимус

На сайте с: 14.12.2012
Город: Кривой Рог
Сообщений: 1375
Награды: 29
Репутация: 32
андрей, привет! Стал нужен вот такой Калькулятор систем, только в оффлайновом режиме. Сайт то я сохранил для оффлайна, но он порядка 150 метров весит. Натолкни на правильную мысль написания шедевра...Чтобы я с самого начала не стал косячить
 
inscriptorДата: Воскресенье, 22.06.2014, 17:20 | Сообщение № 11
Рядовой

На сайте с: 22.06.2014
Сообщений: 5
Награды: 0
Репутация: 0
asmadeus,

Цитата asmadeus
Сайт то я сохранил для оффлайна, но он порядка 150 метров весит

чем и как сохраняли?

Цитата asmadeus
только в оффлайновом режиме

а чем вас не устраивает моя онлайновая версия? =)
 
asmadeusДата: Понедельник, 23.06.2014, 17:57 | Сообщение № 12
Генералиссимус

На сайте с: 14.12.2012
Город: Кривой Рог
Сообщений: 1375
Награды: 29
Репутация: 32
Цитата inscriptor ()
чем и как сохраняли?


Сохранял Offline explorer, простите, точные настройки не припомню

Цитата inscriptor ()
а чем вас не устраивает моя онлайновая версия? =)


Почему сразу не устраивает? Просто не всегда интернет при себе, а есть подозрение, что вес оффлайна заметно можно уменьшить
 
Andrey_AДата: Вторник, 24.06.2014, 07:56 | Сообщение № 13
Генералиссимус

На сайте с: 26.01.2012
Город: Сочи, Хоста
Сообщений: 7187
Награды: 143
Репутация: 125
Аверин Андрей
Цитата asmadeus ()
Натолкни на правильную мысль написания шедевра..

Что касается GUI окна там должно быть просто - при выборе системы обновляется окно с необходимыми данными, которые созданы в виде шаблонов

Остаётся рассчитать/выяснить условия подсчёта той или иной системы.


 
asmadeusДата: Вторник, 24.06.2014, 13:30 | Сообщение № 14
Генералиссимус

На сайте с: 14.12.2012
Город: Кривой Рог
Сообщений: 1375
Награды: 29
Репутация: 32
Цитата Andrey_A ()
которые созданы в виде шаблонов

с этого места подробнее....что за шаблоны?
 
Andrey_AДата: Вторник, 24.06.2014, 17:43 | Сообщение № 15
Генералиссимус

На сайте с: 26.01.2012
Город: Сочи, Хоста
Сообщений: 7187
Награды: 143
Репутация: 125
Аверин Андрей
Цитата asmadeus ()
что за шаблоны?

Шаблоны всех систем...
К примеру
$aSys1_Img=... - массив изображений системы №1
$aSys1_Txt=... - массив всех надписей системы №1
...
и т.д

А в Gui написана общая обработка
с переменными
$aSys_Img
$aSys_Txt
...при выборе той или иной системы
общим переменным присваиваются переменные шаблонов
$aSys_Img=$aSys1_Img
$aSys_Txt=$aSys1_Txt
и идёт их обработка...
как-то так...


 
  • Страница 1 из 6
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • »
Поиск:

Интеллектуальные права и отказ от ответственности