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

Ответить
 • Просмотры: 16
Аватара пользователя
Maza Faka

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

Сообщение Maza Faka »

semiono

Можно так-же добавить проверку ключей реестра Изображение
Аватара пользователя
Maza Faka

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

Сообщение Maza Faka »

Цитата Creat0R:



И ещё задача по RegExp
[Архив - Часть 3] AutoIt скрипты .:[общие вопросы]:.




Вроде работает:



Код:

Код: Выделить всё

$sCompile_String = '/In "Yes" /Icon "No" /Bin "Ok" /Comp 1'
$sCompile_String = StringRegExpReplace($sCompile_String, '(/[\w-]*)\s("?[\w-]*"?)', '\1 %s')
ConsoleWrite($sCompile_String & @CRLF)
Аватара пользователя
semiono

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

Сообщение semiono »

Sylver Dragon, Maza Faka,

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

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

Сообщение Maza Faka »

Ааааа... Мой вариант немного неправильный. Строку вида '/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' Он всё равно обработать не сможет. Хотя впринципе такую строку ничто не сможет обработать. Нужны будут какие-то спец. символы, чтобы выделять нужные куски.
Аватара пользователя
amel27

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

Сообщение amel27 »

Sylver Dragon,
Цитата Sylver Dragon:



Строку вида '/In "Yes, Right" /Icon "No" /Bin "Ok" /Comp 1' обработать правильно не сможет
[Архив - Часть 3] AutoIt скрипты .:[общие вопросы]:.




Ну, оно по сути и не нужно, мне заранее известен формат строки, он именно таков как я и привёл в своём посте Изображение - Т.ч мне первый вариант очень даже подходит, спасибо.



P.S

Вот если бы ещё с
[Архив - Часть 3] AutoIt скрипты .:[общие вопросы]:.
разобраться Изображение ...
Аватара пользователя
Creat0R

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

Сообщение Creat0R »

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



Пока не проверял. Поясню немного:

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

Ну, я не думаю, что кто-то будет так маньячиться.

Щас немного потестирую.



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



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





Я немножко в ступоре))

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

Щас буду думать дальше.



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



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



Всё. Вот моё окончательное слово:



Код:

Код: Выделить всё

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

P. S. Только для полных путей.
Аватара пользователя
litus

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

Сообщение litus »

Sylver Dragon,
Цитата Sylver Dragon:



пути только полные, или могут быть относительные?
[Архив - Часть 3] AutoIt скрипты .:[общие вопросы]:.




Полные, ClipGet() возвращает полные пути скопированных файлов (из проводника).




Цитата Sylver Dragon:



как вариант, проверять, путь ли в буфере, не во время вызова контекстного меню, а регулярно, во время работы программы
[Архив - Часть 3] AutoIt скрипты .:[общие вопросы]:.




Вариант был расмотрен ранее, он не подходит, это нагрузка на главный цикл, и занимает лишние мегабайты памяти Изображение




Цитата Sylver Dragon:



Вот моё окончательное слово
[Архив - Часть 3] AutoIt скрипты .:[общие вопросы]:.




Спасибо, но оно не работает как надо:





Код:

Код: Выделить всё

$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, хотя втрой путь совсем не путь к файлу.
Аватара пользователя
Creat0R

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

Сообщение Creat0R »

Creat0R


Цитата:



Pattern для проверки содержимого б. обмена на присутствие путей к файлам
[Архив - Часть 3] AutoIt скрипты .:[общие вопросы]:.




скорость и глубина проверки противоречат друг другу, четыре разных варианта:



Код:

Код: Выделить всё

#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
[Архив - Часть 3] AutoIt скрипты .:[общие вопросы]:.






Код:

Код: Выделить всё

$sCompile_String = '/In "Yes" /Icon "No" /Bin "Ok" /Comp 1'
$sCompile_String = StringRegExpReplace($sCompile_String,' +("[^"]*"|[^/ ]+)',' %s')
ConsoleWrite($sCompile_String & @CRLF)

P.S. Вроде таких еще не было Изображение
Аватара пользователя
TERMINAL

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

Сообщение TERMINAL »

amel27,


Цитата amel27:



скорость и глубина проверки противоречат друг другу, четыре разных варианта
[Архив - Часть 3] AutoIt скрипты .:[общие вопросы]:.




Ухты, такие выражения я ещё не видел Изображение Изображение



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



P.S

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




Цитата:



Вроде таких еще не было



Выражении, или задач? Изображение
Аватара пользователя
Creat0R

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

Сообщение Creat0R »

Цитата Creat0R:



Спасибо, но оно не работает как надо
[Архив - Часть 3] AutoIt скрипты .:[общие вопросы]:.




Просто я плохо проверял, прежде чем написать... Изображение




Цитата Creat0R:



Возвращает 1, хотя втрой путь совсем не путь к файлу.
[Архив - Часть 3] AutoIt скрипты .:[общие вопросы]:.




Это тоже путь к файлу. Просто относительный. Хотя в случае копирования из проводника такой ситуации быть не может.







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








Цитата:



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



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

Плюс ещё сделать предположение, что если первые несколько строк - пути к файлам, значит и всё остальное тоже.
Ответить

Вернуться в «AutoIt»