Маски файлов в API

Разработка Far.
Shmuel
Posts: 6217
Joined: Thu 23 Mar, 2006 21:36
Location: Israel
Has thanked: 31 times
Been thanked: 348 times

Re: Маски файлов

Post by Shmuel »

Latest post of the previous page:

Можно и так, и так (если сообщение опционально).
User avatar
NightRoman
Posts: 6034
Joined: Fri 18 Aug, 2006 13:52
Location: Cambridge, UK
Has thanked: 20 times
Been thanked: 49 times
Contact:

Re: Маски файлов

Post by NightRoman »

Но все-таки на один парсинг будет больше. Может, все же одним вызовом все и решать - и работу (match|not-match), и проверку на валидость?
Shmuel
Posts: 6217
Joined: Thu 23 Mar, 2006 21:36
Location: Israel
Has thanked: 31 times
Been thanked: 348 times

Re: Маски файлов

Post by Shmuel »

NightRoman wrote:Но все-таки на один парсинг будет больше. Может, все же одним вызовом все и решать - и работу (match|not-match), и проверку на валидость?
Фар делает парсинг маски при каждом вызове ProcessName. Какая разница, будет сделан парсинг 1000 раз или 1001 ? А случай, когда надо проверять один-единственный файл, в любом случае отработает быстро, так стоит ли экономить на спичках?
User avatar
NightRoman
Posts: 6034
Joined: Fri 18 Aug, 2006 13:52
Location: Cambridge, UK
Has thanked: 20 times
Been thanked: 49 times
Contact:

Re: Маски файлов

Post by NightRoman »

Ну в общем да, наверное, я к ненужному совершенству призывал.
User avatar
DrKnS
Posts: 5804
Joined: Thu 04 Aug, 2005 06:44
Location: Kyiv
Has thanked: 10 times
Been thanked: 343 times

Re: Маски файлов

Post by DrKnS »

Если вам хочется экономить, то лучше придумать, как не делать парсинг 1000 раз.
Shmuel
Posts: 6217
Joined: Thu 23 Mar, 2006 21:36
Location: Israel
Has thanked: 31 times
Been thanked: 348 times

Re: Маски файлов

Post by Shmuel »

Ну, эти вещи уже давно отработаны. Просто я не уверен, что стоит сейчас этим заниматься.

Например, в регекспах есть функция "компиляции", где стринг-регексп парсится, и заполняется определённая внутренняя структура, указатель на которую ф-ция компиляции возвращает. В дальнейшем, при вызовах функций поиска/сопоставления с текстом, уже надо передавать полученный указатель, таким образом парсинг делается только один раз.

Ещё один вариант - кеширование.
User avatar
DrKnS
Posts: 5804
Joined: Thu 04 Aug, 2005 06:44
Location: Kyiv
Has thanked: 10 times
Been thanked: 343 times

Re: Маски файлов

Post by DrKnS »

Добавил кеширование.
Shmuel
Posts: 6217
Joined: Thu 23 Mar, 2006 21:36
Location: Israel
Has thanked: 31 times
Been thanked: 348 times

Re: Маски файлов

Post by Shmuel »

DrKnS wrote:Добавил кеширование.
Приближаемся к совершенству, о котором говорил NightRoman. :)

Видимо в результате кеширования появилось некоторое изменение поведения: если для нескольких имён подряд вызывать (PN_CMPNAMELIST | PN_SHOWERRORMESSAGE) с одной и той же невалидной маской, то раньше был warning для каждого вызова, а теперь - только для первого. По идее, раньше было правильно.
User avatar
NightRoman
Posts: 6034
Joined: Fri 18 Aug, 2006 13:52
Location: Cambridge, UK
Has thanked: 20 times
Been thanked: 49 times
Contact:

Re: Маски файлов

Post by NightRoman »

Ожидал, что PN_CMPNAMELIST полностью совместим теперь с масками Фара, то есть включая и форму /regex/, а это не так, или я что не так делаю?
Если это так, то может уж допилить один шажок до полной совместимости? И документировать проще будет :)
Shmuel
Posts: 6217
Joined: Thu 23 Mar, 2006 21:36
Location: Israel
Has thanked: 31 times
Been thanked: 348 times

Re: Маски файлов

Post by Shmuel »

Вроде у меня работает. Можно пример в студию?
User avatar
NightRoman
Posts: 6034
Joined: Fri 18 Aug, 2006 13:52
Location: Cambridge, UK
Has thanked: 20 times
Been thanked: 49 times
Contact:

Re: Маски файлов

Post by NightRoman »

Shmuel wrote:Вроде у меня работает. Можно пример в студию?
Достаточно этого замечания, спасибо. В регистрозависимости регулярок дело было, которую я не учел.
User avatar
NightRoman
Posts: 6034
Joined: Fri 18 Aug, 2006 13:52
Location: Cambridge, UK
Has thanked: 20 times
Been thanked: 49 times
Contact:

Re: Маски файлов

Post by NightRoman »

Философский и вычурный вопрос по пустой маске. Всегда возвращается несовпадение. Но для пустой строки на сравнение, может, все же совпадение возвращать?

В PowerShell, например, это так

Code: Select all

0> 'bar' -like ''
False
0> '' -like ''
True
Shmuel
Posts: 6217
Joined: Thu 23 Mar, 2006 21:36
Location: Israel
Has thanked: 31 times
Been thanked: 348 times

Re: Маски файлов

Post by Shmuel »

Для ProcessName пустая маска - невалидная, именно поэтому возвращается несовпадение.
Как трактовать пустой паттерн - обычно определяет аппликация, единообразия здесь нет.
Неконсистентность некоторая есть в том, что маска |a, в которой пустая разрешающая часть - валидная (трактуется как *|a), а вот пустая маска не трактуется как *.
User avatar
NightRoman
Posts: 6034
Joined: Fri 18 Aug, 2006 13:52
Location: Cambridge, UK
Has thanked: 20 times
Been thanked: 49 times
Contact:

Re: Маски файлов

Post by NightRoman »

А, и попутно важно, что пустая маска считается невалидной (тогда логично, что всегда отлуп). Но логично ли пустую маску считать невалидной?
Это первичный вопрос.

UPD: а, опередили, да.
Shmuel
Posts: 6217
Joined: Thu 23 Mar, 2006 21:36
Location: Israel
Has thanked: 31 times
Been thanked: 348 times

Re: Маски файлов

Post by Shmuel »

Для меня невалидность пустой маски - удобна. В диалоге поиска, если пользователь нажимает Enter при пустой маске, это как правило означает, что он забыл ввести маску.
User avatar
NightRoman
Posts: 6034
Joined: Fri 18 Aug, 2006 13:52
Location: Cambridge, UK
Has thanked: 20 times
Been thanked: 49 times
Contact:

Re: Маски файлов

Post by NightRoman »

Shmuel wrote:Для меня невалидность пустой маски - удобна. В диалоге поиска, если пользователь нажимает Enter при пустой маске, это как правило означает, что он забыл ввести маску.
Какого диалога поиска? В Фаровском это будет трактоваться как *
Post Reply

Return to “Development”