Хочу фукцию testfilename(filename,mask)

Здесь обсуждается всё, что касается макросов.
Locked
User avatar
SUSim
Posts: 1637
Joined: Thu 18 Feb, 2010 17:32
Has thanked: 9 times
Been thanked: 26 times

Хочу фукцию testfilename(filename,mask)

Post by SUSim »

Очень бы помогла функция проверки имени файла на соответствии маске.
Можно же получить имя файла в редакторе Editor.Filename, а проверить тип (соответствие маске) приходится проводить вручную :( Выделение файлов по маске сделали :) и еще бы сопоставление строки с маской сделать бы :)

testfilename(filename,mask):
filename - строка содержащая имя файла
mask - строка = маска (по хорошему с регулярными выражениями как в пометке файлов) по стандартам FARа как в раскраске/группировке
возвращаемое значение:
1 - имя файла соответствует маске
0 - имя файла НЕ соответствует маске
можно конечно добавить еще -1 маска некорректная, но это, имхо, лишнее - нарушит идеологию...
SimSU ··· ·· -- ··· ··-
User avatar
SUSim
Posts: 1637
Joined: Thu 18 Feb, 2010 17:32
Has thanked: 9 times
Been thanked: 26 times

Re: Хочу фукцию testfilename(filename,mask)

Post by SUSim »

Это надо для универсальности...
есть маска %Mask="*.bat,*.cmd";

как сделано у меня сейчас

Code: Select all

$IF (substr(%Mask,len(%Mask)-1)!=",") %Mask=%Mask+","; $END
%Ext="*"+fsplit(Editor.FileName,0x8)+",";
$IF (index(%Mask,%Ext)>-1) соответствует маске $END
а стало бы

Code: Select all

$IF (testfilename(Editor.FileName,%Mask)) соответствует маске $END
стало бы возможным использование более продвинутых масок типа *.[ch]pp, *.rar, *.r[0-9][0-9], не говоря уже о регэкспах в маске...
в фаре это уже все есть не хватает оберточки для макроязыка...
SimSU ··· ·· -- ··· ··-
User avatar
John Doe
Бюрократ
Posts: 13867
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 74 times
Been thanked: 428 times
Contact:

Re: Хочу фукцию testfilename(filename,mask)

Post by John Doe »

А откуда вообще берётся %Mask?
И в каком макросе вы реально используете такую обработку?

В моей практике достаточно более простых действий:

Code: Select all

 %ext = lcase( fsplit( Editor.FileName, FSPLIT_EXT ) );
 $If ( %ext==".bat" || %ext==".cmd" ) ... $End
P.S.
Рекомендую пользоваться константами.
https://t.me/FarManager — Telegram чат
User avatar
SUSim
Posts: 1637
Joined: Thu 18 Feb, 2010 17:32
Has thanked: 9 times
Been thanked: 26 times

Re: Хочу фукцию testfilename(filename,mask)

Post by SUSim »

%Mask берется из интерактивного макроса, т.е. пользователь задает маски, который хранятся в Vars , а не я руками прописываю все проверки...
Самый простой пример - макрос заменяющий плагин(плагины) комментирования строк в редакторе, когда от типа(маски) файла зависит символ/ы комментирования.
Подробней рассказывать? макрос (точнее набор макросов и процедур) приводить, которые заменяют плагины TrueREM и ESC? это те макросы где маска очень важна...

P.S.
Кстати, а как пользоваться Константами ??? где почитать?
Примеров так и не нашел...
Ссылку или объяснение, плиз.
SimSU ··· ·· -- ··· ··-
User avatar
John Doe
Бюрократ
Posts: 13867
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 74 times
Been thanked: 428 times
Contact:

Хочу фукцию testfilename(filename,mask)

Post by John Doe »

SUSim wrote:%Mask берется из интерактивного макроса, т.е. пользователь задает маски, который хранятся в Vars , а не я руками прописываю все проверки...
Процедура проверки расширения довольна проста.
Для удобства можете сделать её подпрограммой.
Можно ещё больше упростить, если убрать звёзды.
SUSim wrote:Кстати, а как пользоваться Константами ???
Всё есть в Энциклопедии. Учитесь пользоваться поиском в *.chm

P.S.И чаще пользуйтесь тегом

Code: Select all

[/b]
User avatar
John Doe
Бюрократ
Posts: 13867
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 74 times
Been thanked: 428 times
Contact:

Re: Хочу фукцию testfilename(filename,mask)

Post by John Doe »

А вообще, если уж и добавлять такую возможность в макроязык, то не так ка предлагаете вы (testfilename(filename,mask)), а в общем виде, что-нибудь навроде функции RegEx().
User avatar
Centaur
Posts: 1083
Joined: Tue 05 Apr, 2005 20:09
Location: Novosibirsk, Russia
Been thanked: 2 times

Re: Хочу фукцию testfilename(filename,mask)

Post by Centaur »

В плагинном API уже есть функция, проверяющая соответствие строки маске. Всего-то надо выставить её в макроAPI.
User avatar
John Doe
Бюрократ
Posts: 13867
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 74 times
Been thanked: 428 times
Contact:

Re: Хочу фукцию testfilename(filename,mask)

Post by John Doe »

И что будет если на каждую API-функцию мы будем заводить соответствующую макро-функцию?
Думаете получится Мега-супер-пупер-макро-язык?

Часть обсуждения вынесено в тему "О целесообразности экстенсивного развития макроязыка"
Last edited by John Doe on Thu 01 Jan, 1970 01:00, edited 0 times in total.
Reason: Добавлена ссылка на отделившуюся тему
User avatar
SUSim
Posts: 1637
Joined: Thu 18 Feb, 2010 17:32
Has thanked: 9 times
Been thanked: 26 times

Re: Хочу фукцию testfilename(filename,mask)

Post by SUSim »

Centaur wrote:В плагинном API уже есть функция, проверяющая соответствие строки маске. Всего-то надо выставить её в макроAPI.
Вот об этом я и прошу :)
SimSU ··· ·· -- ··· ··-
User avatar
SUSim
Posts: 1637
Joined: Thu 18 Feb, 2010 17:32
Has thanked: 9 times
Been thanked: 26 times

Re: Хочу фукцию testfilename(filename,mask)

Post by SUSim »

А может тогда уж глобально подойти:
дать доступ к регэкспам из макроса? например FindRegexp(регэксп_строка,строка) возвращаемое значение строка которая подошла под регэксп первой, тогда сравнение по маске *.bat будет выглядить так:
if (FindRegexp(".*\.bat$",%MyFileName)=%MyFileName) файл_соответствует_маске $else файл_не_соответствует_маске.
ну или как-то по другому может быть... (если чел разобрался в программировании макроса то и с регэкспами разберется, и уж тип файла точно проверить сумеет).

Хотя это можно сделать и с помощью callplugin, но не юзабельно... :( лучше команду в макросах :)
SimSU ··· ·· -- ··· ··-
User avatar
HaRT
Moderator
Posts: 10869
Joined: Tue 30 Aug, 2005 17:21
Has thanked: 221 times
Been thanked: 358 times

Re: Хочу фукцию testfilename(filename,mask)

Post by HaRT »

Давно уже пора замутить плагин, который бы предоставлял макросам доступ к библиотекам разных функций, реализуемых под-плагинами.
Фар есть инструмент, а не нянька. © 2009 DrKnS
User avatar
SUSim
Posts: 1637
Joined: Thu 18 Feb, 2010 17:32
Has thanked: 9 times
Been thanked: 26 times

Re: Хочу фукцию testfilename(filename,mask)

Post by SUSim »

Это конечно можно, но тормоза... :(
я с этим начал баловаться - вопросы:
1) callplugin - ограничен по возврату результата, только число (причем, в писании не сказано как что-то вернуть отличное от 1 если плагин сработал... {подскажите, можно хоть в личку})
2) если плагин по callplugin возвращает строку, то это он может сделать через реестр, чтобы этот результат увидел макрос (как с переходом на БД? {этот вопрос я уже задавал и не только про макросы, а и про скрипты (скрипт,макрос,стороннюю_программу можно запустить из макроса, а вот результаты можно узнать только если то_что_запускали положит в реестр или в клипбоард)}, в реестр было боле удобнее (имхо), но и в клипборад можно- чуть сложение и неудобнее различать stdout от stder)[про переменные среды не обсуждается!!! - нет многострочности]
3)...

Я пока жду........................ и в новшества вдаваться буду только при наличии документации!!!
SimSU ··· ·· -- ··· ··-
User avatar
DAtaMan
Posts: 262
Joined: Wed 24 Jun, 2009 10:01
Location: не отсюда

Re: Хочу фукцию testfilename(filename,mask)

Post by DAtaMan »

SUSim wrote:Я пока жду........................ и в новшества вдаваться буду только при наличии документации!!!
Это про сабж ?
Тогда есть fmatch
2B OR NOT 2B = FF (Иногда code - это просто код. Почти Дйерф Омолш Днумзигис)
To ban or not to ban, that is the question. ©
Locked

Return to “Обсуждение макросов”