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

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

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

(*.*)


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


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

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


Изменения
Автор: Vadikan
Дата: 21-01-2009
Описание: архив
Внимание!


В связи с созданием отдельного форума по AutoIt, эта тема переводится в архивное состояние. Если у вас есть вопрос, создайте новую тему или поднимите существующую, если в ней обсуждается аналогичная проблема.

Пожалуйста, не создавайте тем с названием "Помогите!" или "Нужна помощь по AutoIt". Это и так понятно Заголовок темы должен быть осмысленным.



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


Справочник по командам rundll32 (команды запуска диалоговых окон и не только...)

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

Архивы старых тем по AutoIt или они же в 7z архиве (версии для печати) - 846 кб (настоятельно рекомендуется к прочтению/поиску)
(он же прикреплен в шапке)


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

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

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

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

 

Аватара для SyDr

Старожил


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

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


$sCompile_String = StringRegExpReplace($sCompile_String, '/(.*?) ".*?"', '/$1 %s')

Цитата:
Символы повтора (*, +, ?, {...} ) предписывают поиск наибольшего из подходящих фрагментов, если сразу вслед за этими символами не задан знак вопроса. В последнем случае будет предписывается поиск самого короткого по длине фрагмента, который совпадает с заданным шаблоном.
$sCompile_String = StringRegExpReplace($sCompile_String, '/(.*?) (\S)*', '/$1 %s ')

Последний раз редактировалось SyDr, 16-11-2008 в 11:46. Причина: Немного изменил...

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

Отправлено: 11:27, 16-11-2008 | #1161



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

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


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

Ветеран


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

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


Цитата Creat0R:
И ещё задача по RegExp »
Вроде работает:
Код: Выделить весь код
$sCompile_String = '/In "Yes" /Icon "No" /Bin "Ok" /Comp 1'

$sCompile_String = StringRegExpReplace($sCompile_String, '(/[\w-]*)\s("?[\w-]*"?)', '\1 %s')

ConsoleWrite($sCompile_String & @CRLF)

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

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

Отправлено: 11:33, 16-11-2008 | #1162


Аватара для Creat0R

Must AutoIt


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

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


Sylver Dragon, Maza Faka,
Спасибо, оба варианта работают на ура (первый конечно по проще ), а я столько мучался ...

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

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

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


Отправлено: 13:49, 16-11-2008 | #1163


Аватара для SyDr

Старожил


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

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


Ааааа... Мой вариант немного неправильный. Строку вида '/In "Yes, Right" /Icon "No" /Bin "Ok" /Comp 1' обработать правильно не сможет. С пробелами всмысле.

Можно так тогда переписать:
$sCompile_String = StringRegExpReplace($sCompile_String, '/(.*?) ([^/])*', '/$1 %s ')
Однако строку вида '/In array "Yes, Right" /Icon, or not icon "No" /Bin "Ok" /Comp 1' Он всё равно обработать не сможет. Хотя впринципе такую строку ничто не сможет обработать. Нужны будут какие-то спец. символы, чтобы выделять нужные куски.

-------

"Что мы думаем, знаем или во что верим в конце концов не так уж и важно.
Важно лишь то, что мы делаем."
Джон Раскин


Отправлено: 14:04, 16-11-2008 | #1164


Аватара для Creat0R

Must AutoIt


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

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


Sylver Dragon,
Цитата Sylver Dragon:
Строку вида '/In "Yes, Right" /Icon "No" /Bin "Ok" /Comp 1' обработать правильно не сможет »
Ну, оно по сути и не нужно, мне заранее известен формат строки, он именно таков как я и привёл в своём посте - Т.ч мне первый вариант очень даже подходит, спасибо.

P.S
Вот если бы ещё с первой проблемой разобраться ...

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

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

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


Отправлено: 14:14, 16-11-2008 | #1165


Аватара для SyDr

Старожил


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

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


StringRegExp($Clip, '(\a:\\)([^/\\<>:*?"|])*\.(txt|txt\.bk)(\n|$)')

Пока не проверял. Поясню немного:
([^\\/<>:*?"|])* - означает наличие любых символов, кроме тех, которые не могут присутствовать в имени файла. Надеюсь, что правильно записал выражение. Хотя если в буфере будет что-то типа: D:::\Bla\Text.txt - правильно обравботать не получиться.
Ну, я не думаю, что кто-то будет так маньячиться.
Щас немного потестирую.

Стоп. пути только полные, или могут быть относительные?

Пока не работает. Даже понял, почему Сменились значения спец. символов. Придёться с английской справкой работать((



Я немножко в ступоре))
StringRegExp($Clip, '\b:\\([^\\/<>:*?|])*')) - вот это проверит, может ли являеться ли $Clip путём к файлу. Однако расширение она учесть не сможет (точки могут быть в любом месте файла). Это уже надо сильно усложнять выражение, что приведёт к увеличению времени обработки. А это здесь явно не нужно.
Щас буду думать дальше.

И ещё, как вариант, проверять, путь ли в буфере, не во время вызова контекстного меню, а регулярно, во время работы программы. Т. е. если буфер изменился - проверить, путь ли в нём теперь.


Я дурак. Поставил в регулярное выражение символ \ и думаю, почему неправильно обрабатывает...


Всё. Вот моё окончательное слово:
Код: Выделить весь код
StringRegExp($Clip, '\b:\\([^/<>:*?|])*(\.txt|txt\.bk)(\n|$)')
P. S. Только для полных путей.

-------

"Что мы думаем, знаем или во что верим в конце концов не так уж и важно.
Важно лишь то, что мы делаем."
Джон Раскин


Последний раз редактировалось SyDr, 16-11-2008 в 16:30.

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

Отправлено: 14:42, 16-11-2008 | #1166


Аватара для Creat0R

Must AutoIt


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

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


Sylver Dragon,
Цитата Sylver Dragon:
пути только полные, или могут быть относительные? »
Полные, ClipGet() возвращает полные пути скопированных файлов (из проводника).

Цитата Sylver Dragon:
как вариант, проверять, путь ли в буфере, не во время вызова контекстного меню, а регулярно, во время работы программы »
Вариант был расмотрен ранее, он не подходит, это нагрузка на главный цикл, и занимает лишние мегабайты памяти

Цитата Sylver Dragon:
Вот моё окончательное слово »
Спасибо, но оно не работает как надо:

Код: Выделить весь код
$Clip = _
    "C:\Testing\SomeFile.txt" & @LF & _
    "Testing\OtherFile.txt"

;$Clip = ClipGet()

$sExt_Pattern = '\.txt|\.txt\.bk' ;Файлы ещё могут иметь расширение txt.bk (обязательно вместе)
$iEnable_Paste_Item = StringRegExp($Clip, '\b:\\([^\/<>:*?|])*(' & $sExt_Pattern & ')(\n|$)')

MsgBox(0, "", "$iEnable_Paste_Item = " & $iEnable_Paste_Item)
Возвращает 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


Отправлено: 03:19, 17-11-2008 | #1167


Googler


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

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


Creat0R
Цитата:
Pattern для проверки содержимого б. обмена на присутствие путей к файлам »
скорость и глубина проверки противоречат друг другу, четыре разных варианта:
Код: Выделить весь код
#Region : Построение регулярного выражения
$ExpandVarStrings = Opt("ExpandVarStrings", 1)

$extn = "(?:\.txt|\.txt\.bk)"
; диск ("C:")
$disk_1 = ".:"
$disk_2 = "[a-z]:"
; UNC путь (\\server-1.domain.local)
$host_1 = "\\\\[-\w.]+"
$host_2 = "\\\\[-\w]+(?:\.[-\w]+)*"
; корень пути (все возможные варианты)
$root_1 = "(?:$disk_1$|$host_1$)"
$root_2 = "(?:$disk_2$|$host_2$)"
; путь без корня, включая имя файла
$path_1 = ".*"
$path_2 = "(?:\\[^\n\\]+)+"
; путь без корня, без имени файла
$path_3 = "\\(?:[^\n\\]+\\)*"
; только имя файла без пути
$name_3 = ".+$extn$"
$name_4 = "[^\n\\]+$extn$"
; одна строки списка файлов
$line_1 = "$root_1$$path_1$$extn$"
$line_2 = "$root_2$$path_2$$extn$"
$line_3 = "($root_2$$path_3$)$name_3$"
$line_4 = "($root_2$$path_3$)$name_4$"
; варианты выражений с разной детализацией
$RegExp_1 = "(?i)^(?:$line_1$(?:\n|$$))+$$"
$RegExp_2 = "(?i)^(?:$line_2$(?:\n|$$))+$$"
$RegExp_3 = "(?i)^$line_3$(?:\n\1$name_3$)*$$" ; файлы с одного ресурса (один путь)
$RegExp_4 = "(?i)^$line_4$(?:\n\1$name_4$)*$$" ; файлы с одного ресурса (один путь)

Opt("ExpandVarStrings", $ExpandVarStrings)
#EndRegion

$sClip = ClipGet()
ConsoleWrite($sClip &@CRLF&@CRLF)

ConsoleWrite(StringRegExp($sClip,$RegExp_1) &': "'& $RegExp_1 &'"'&@CRLF)
ConsoleWrite(StringRegExp($sClip,$RegExp_2) &': "'& $RegExp_2 &'"'&@CRLF)
ConsoleWrite(StringRegExp($sClip,$RegExp_3) &': "'& $RegExp_3 &'"'&@CRLF)
ConsoleWrite(StringRegExp($sClip,$RegExp_4) &': "'& $RegExp_4 &'"'&@CRLF)
Цитата Creat0R:
И ещё задача по RegExp »
Код: Выделить весь код
$sCompile_String = '/In "Yes" /Icon "No" /Bin "Ok" /Comp 1'
$sCompile_String = StringRegExpReplace($sCompile_String,' +("[^"]*"|[^/ ]+)',' %s')

ConsoleWrite($sCompile_String & @CRLF)
P.S. Вроде таких еще не было

Последний раз редактировалось amel27, 17-11-2008 в 06:38.

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

Отправлено: 06:26, 17-11-2008 | #1168


Аватара для Creat0R

Must AutoIt


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

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


amel27,
Цитата amel27:
скорость и глубина проверки противоречат друг другу, четыре разных варианта »
Ухты, такие выражения я ещё не видел

По поводу скорости, мне главное чтобы если первая строка не совпадает с запросом, то проверка заканчивалась. Моя первая попытка сделать пдобную проверку, очень долго возвращала результат в случае если б.обмена содержал большой кусок текста (не пути к файлам).

P.S
Победители конкурса по Регулярным выражениям становятся... RegExp номер 3 и номер 4!

Цитата:
Вроде таких еще не было
Выражении, или задач?

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

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

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


Отправлено: 13:29, 17-11-2008 | #1169


Аватара для SyDr

Старожил


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

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


Цитата Creat0R:
Спасибо, но оно не работает как надо »
Просто я плохо проверял, прежде чем написать...

Цитата Creat0R:
Возвращает 1, хотя втрой путь совсем не путь к файлу. »
Это тоже путь к файлу. Просто относительный. Хотя в случае копирования из проводника такой ситуации быть не может.




А как насчёт того, чтобы проверять не во время вызова контекстного меню, а прямо перед вставкой? Т. е. если содержимое буфера не соответсвует шаблону - выдать сообщение об этом...




Цитата:
По поводу скорости, мне главное чтобы если первая строка не совпадает с запросом, то проверка заканчивалась. Моя первая попытка сделать пдобную проверку, очень долго возвращала результат в случае если б.обмена содержал большой кусок текста (не пути к файлам).
Ещё один вариант - разбить всю строку на массив (разделитель @LF). И проверять каждый элемент - являеться ли он путём к файлу. Ведь чем короче строка - тем быстрее она проверяеться на соотвествие шаблону (так ведь?).
Плюс ещё сделать предположение, что если первые несколько строк - пути к файлам, значит и всё остальное тоже.

Отправлено: 21:00, 17-11-2008 | #1170



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

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

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
[архив - Часть 2] AutoIt скрипты Vadikan AutoIt 985 21-01-2008 09:58
Вопрос - [Архив] Антивирусные программы - ОБЩИЕ ВОПРОСЫ FOX RED Защита компьютерных систем 67 21-11-2007 15:05
[Архив - Часть 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




 
Переход