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

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

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

Post by faruh » Tue 02 Apr, 2013 08:59

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

Какой из вариантов предпочтительней в плане быстродействия?

User avatar
HaRT
Moderator
Posts: 9139
Joined: Tue 30 Aug, 2005 17:21
Location: Санкт-Петербург
Has thanked: 90 times
Been thanked: 173 times

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

Post by HaRT » Tue 02 Apr, 2013 11:10

Я убеждён, что получение списка имён для отображения на панели занимает куда большее время, чем сопоставление их с масками раскрасок. Или у Вас тысячи групп раскраски? (На сотнях тормоза были устранены ещё во времена Атрибуции 1.) Или у Вас маски на много кибибайт?
Фар есть инструмент, а не нянька. © 2009 DrKnS

User avatar
John Doe
Бюрократ
Posts: 12519
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 33 times
Been thanked: 228 times

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

Post by John Doe » Tue 02 Apr, 2013 11:16

Я убеждён, что сложная раскраска способна заметно тормозить (не на сотнях, но на тысячах, десятках тысяч).
Однако да, вряд ли это зависит от того, каким из способов заданы маски.

Max Rusov
Posts: 3632
Joined: Wed 23 Nov, 2005 11:11
Location: Москва-Питер
Has thanked: 1 time
Been thanked: 10 times

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

Post by Max Rusov » Tue 02 Apr, 2013 11:27

Почему собственно? Поиск с regexp'ами на порядок тормознее чем без. Так что, я бы ими не злоупотреблял.
Но, конечно, практика - критерий истины, нужно сделать эксперимент.

User avatar
John Doe
Бюрократ
Posts: 12519
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 33 times
Been thanked: 228 times

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

Post by John Doe » Tue 02 Apr, 2013 13:02

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

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: 5908
Joined: Thu 23 Mar, 2006 21:36
Location: Israel
Has thanked: 23 times
Been thanked: 228 times

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

Post by Shmuel » Tue 02 Apr, 2013 13:37

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

User avatar
John Doe
Бюрократ
Posts: 12519
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 33 times
Been thanked: 228 times

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

Post by John Doe » Tue 02 Apr, 2013 13:42

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

Это и понятно:
Result = far.ProcessName (Op, Mask, Name, Flags, Size)
Mask: string

User avatar
faruh
Posts: 55
Joined: Sat 04 Apr, 2009 19:46

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

Post by faruh » Tue 02 Apr, 2013 16:06

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”