Маска файлов: через запятую vs регэксп

Хотите говорить о Far и не знаете, куда обратиться?
Post Reply
User avatar
faruh
Posts: 65
Joined: Sat 04 Apr, 2009 19:46
Has thanked: 1 time

Маска файлов: через запятую vs регэксп

Post by faruh »

Для раскраски фалов маску можно задать как перечисление через запятую (*.avi,*.mov,*.mpg) или как регулярное выражение (/\.(avi|mov|mpg)$/i).

Какой из вариантов предпочтительней в плане быстродействия?
User avatar
HaRT
Moderator
Posts: 10866
Joined: Tue 30 Aug, 2005 17:21
Has thanked: 221 times
Been thanked: 358 times

Re: Маска файлов: через запятую vs регэксп

Post by HaRT »

Я убеждён, что получение списка имён для отображения на панели занимает куда большее время, чем сопоставление их с масками раскрасок. Или у Вас тысячи групп раскраски? (На сотнях тормоза были устранены ещё во времена Атрибуции 1.) Или у Вас маски на много кибибайт?
Фар есть инструмент, а не нянька. © 2009 DrKnS
User avatar
John Doe
Бюрократ
Posts: 13861
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 74 times
Been thanked: 428 times
Contact:

Re: Маска файлов: через запятую vs регэксп

Post by John Doe »

Я убеждён, что сложная раскраска способна заметно тормозить (не на сотнях, но на тысячах, десятках тысяч).
Однако да, вряд ли это зависит от того, каким из способов заданы маски.
Max Rusov
Posts: 3651
Joined: Wed 23 Nov, 2005 11:11
Location: Москва-Питер
Has thanked: 2 times
Been thanked: 19 times

Re: Маска файлов: через запятую vs регэксп

Post by Max Rusov »

Почему собственно? Поиск с regexp'ами на порядок тормознее чем без. Так что, я бы ими не злоупотреблял.
Но, конечно, практика - критерий истины, нужно сделать эксперимент.
User avatar
John Doe
Бюрократ
Posts: 13861
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 74 times
Been thanked: 428 times
Contact:

Re: Маска файлов: через запятую vs регэксп

Post by John Doe »

Небольшой эксперимент:

Code: Select all

1│ *.avi,*.mov,*.mpg   :0.527
2│ /\.(avi|mov|mpg)$/i :0.577
3│ *.rar,*.r[0-9][0-9] :0.865
4│ /\.(rar|r\d\d)$/i   :0.537
5│ *.rar,*.r[0-1][0-9] :0.902
6│ /\.(r[a01][r0-9])$/i:0.528
Всё конечно зависит от масок, но видно что регэкспы могут быть и быстрее.

P.S.
При желании легко добавить в скрипт свой набор масок.
Shmuel
Posts: 6840
Joined: Thu 23 Mar, 2006 21:36
Location: Israel
Has thanked: 41 times
Been thanked: 530 times

Re: Маска файлов: через запятую vs регэксп

Post by Shmuel »

При использовании фаровских регулярных выражений в цикле полезно сначала скомпилировать выражение, а в цикле использовать его уже в скомпилированной форме. Это может значительно увеличить быстродействие.
User avatar
John Doe
Бюрократ
Posts: 13861
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 74 times
Been thanked: 428 times
Contact:

Re: Маска файлов: через запятую vs регэксп

Post by John Doe »

Спасибо за дельный совет, но похоже здесь он неприменим.
bad argument #2 to 'f' (string expected, got userdata)

Это и понятно:
Result = far.ProcessName (Op, Mask, Name, Flags, Size)
Mask: string
User avatar
faruh
Posts: 65
Joined: Sat 04 Apr, 2009 19:46
Has thanked: 1 time

Re: Маска файлов: через запятую vs регэксп

Post by faruh »

John Doe wrote:Небольшой эксперимент:

Code: Select all

1│ *.avi,*.mov,*.mpg   :0.527
2│ /\.(avi|mov|mpg)$/i :0.577
3│ *.rar,*.r[0-9][0-9] :0.865
4│ /\.(rar|r\d\d)$/i   :0.537
5│ *.rar,*.r[0-1][0-9] :0.902
6│ /\.(r[a01][r0-9])$/i:0.528
Всё конечно зависит от масок, но видно что регэкспы могут быть и быстрее.
при более длинном списке масок регэксп рулит

Code: Select all

 1│ 1.768               :*.avi,*.mov,*.mpg,*.mpeg,*.wmv,*.mkv,*.asf,*.wav,...
 2│ 0.546               :/\.(avi|mov|mpg|mpeg|wmv|mkv|asf|wav|ogg|asf|...
Post Reply

Return to “Обсуждение Far Manager”