Хочу фукцию testfilename(filename,mask)
Хочу фукцию testfilename(filename,mask)
Очень бы помогла функция проверки имени файла на соответствии маске.
Можно же получить имя файла в редакторе Editor.Filename, а проверить тип (соответствие маске) приходится проводить вручную Выделение файлов по маске сделали и еще бы сопоставление строки с маской сделать бы
testfilename(filename,mask):
filename - строка содержащая имя файла
mask - строка = маска (по хорошему с регулярными выражениями как в пометке файлов) по стандартам FARа как в раскраске/группировке
возвращаемое значение:
1 - имя файла соответствует маске
0 - имя файла НЕ соответствует маске
можно конечно добавить еще -1 маска некорректная, но это, имхо, лишнее - нарушит идеологию...
Можно же получить имя файла в редакторе Editor.Filename, а проверить тип (соответствие маске) приходится проводить вручную Выделение файлов по маске сделали и еще бы сопоставление строки с маской сделать бы
testfilename(filename,mask):
filename - строка содержащая имя файла
mask - строка = маска (по хорошему с регулярными выражениями как в пометке файлов) по стандартам FARа как в раскраске/группировке
возвращаемое значение:
1 - имя файла соответствует маске
0 - имя файла НЕ соответствует маске
можно конечно добавить еще -1 маска некорректная, но это, имхо, лишнее - нарушит идеологию...
SimSU ··· ·· -- ··· ··-
Re: Хочу фукцию testfilename(filename,mask)
Это надо для универсальности...
есть маска %Mask="*.bat,*.cmd";
как сделано у меня сейчас
а стало бы
стало бы возможным использование более продвинутых масок типа *.[ch]pp, *.rar, *.r[0-9][0-9], не говоря уже о регэкспах в маске...
в фаре это уже все есть не хватает оберточки для макроязыка...
есть маска %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
в фаре это уже все есть не хватает оберточки для макроязыка...
SimSU ··· ·· -- ··· ··-
- John Doe
- Бюрократ
- Posts: 13867
- Joined: Wed 27 Apr, 2005 20:42
- Has thanked: 74 times
- Been thanked: 428 times
- Contact:
Re: Хочу фукцию testfilename(filename,mask)
А откуда вообще берётся %Mask?
И в каком макросе вы реально используете такую обработку?
В моей практике достаточно более простых действий:
P.S.
Рекомендую пользоваться константами.
И в каком макросе вы реально используете такую обработку?
В моей практике достаточно более простых действий:
Code: Select all
%ext = lcase( fsplit( Editor.FileName, FSPLIT_EXT ) );
$If ( %ext==".bat" || %ext==".cmd" ) ... $End
Рекомендую пользоваться константами.
https://t.me/FarManager — Telegram чат
Re: Хочу фукцию testfilename(filename,mask)
%Mask берется из интерактивного макроса, т.е. пользователь задает маски, который хранятся в Vars , а не я руками прописываю все проверки...
Самый простой пример - макрос заменяющий плагин(плагины) комментирования строк в редакторе, когда от типа(маски) файла зависит символ/ы комментирования.
Подробней рассказывать? макрос (точнее набор макросов и процедур) приводить, которые заменяют плагины TrueREM и ESC? это те макросы где маска очень важна...
P.S.
Кстати, а как пользоваться Константами ??? где почитать?
Примеров так и не нашел...
Ссылку или объяснение, плиз.
Самый простой пример - макрос заменяющий плагин(плагины) комментирования строк в редакторе, когда от типа(маски) файла зависит символ/ы комментирования.
Подробней рассказывать? макрос (точнее набор макросов и процедур) приводить, которые заменяют плагины TrueREM и ESC? это те макросы где маска очень важна...
P.S.
Кстати, а как пользоваться Константами ??? где почитать?
Примеров так и не нашел...
Ссылку или объяснение, плиз.
SimSU ··· ·· -- ··· ··-
- John Doe
- Бюрократ
- Posts: 13867
- Joined: Wed 27 Apr, 2005 20:42
- Has thanked: 74 times
- Been thanked: 428 times
- Contact:
Хочу фукцию testfilename(filename,mask)
Процедура проверки расширения довольна проста.SUSim wrote:%Mask берется из интерактивного макроса, т.е. пользователь задает маски, который хранятся в Vars , а не я руками прописываю все проверки...
Для удобства можете сделать её подпрограммой.
Можно ещё больше упростить, если убрать звёзды.
Всё есть в Энциклопедии. Учитесь пользоваться поиском в *.chmSUSim wrote:Кстати, а как пользоваться Константами ???
P.S.И чаще пользуйтесь тегом
Code: Select all
[/b]
- John Doe
- Бюрократ
- Posts: 13867
- Joined: Wed 27 Apr, 2005 20:42
- Has thanked: 74 times
- Been thanked: 428 times
- Contact:
Re: Хочу фукцию testfilename(filename,mask)
А вообще, если уж и добавлять такую возможность в макроязык, то не так ка предлагаете вы (testfilename(filename,mask)), а в общем виде, что-нибудь навроде функции RegEx().
- John Doe
- Бюрократ
- Posts: 13867
- Joined: Wed 27 Apr, 2005 20:42
- Has thanked: 74 times
- Been thanked: 428 times
- Contact:
Re: Хочу фукцию testfilename(filename,mask)
И что будет если на каждую API-функцию мы будем заводить соответствующую макро-функцию?
Думаете получится Мега-супер-пупер-макро-язык?
Часть обсуждения вынесено в тему "О целесообразности экстенсивного развития макроязыка"
Думаете получится Мега-супер-пупер-макро-язык?
Часть обсуждения вынесено в тему "О целесообразности экстенсивного развития макроязыка"
Last edited by John Doe on Thu 01 Jan, 1970 01:00, edited 0 times in total.
Reason: Добавлена ссылка на отделившуюся тему
Reason: Добавлена ссылка на отделившуюся тему
Re: Хочу фукцию testfilename(filename,mask)
Вот об этом я и прошуCentaur wrote:В плагинном API уже есть функция, проверяющая соответствие строки маске. Всего-то надо выставить её в макроAPI.
SimSU ··· ·· -- ··· ··-
Re: Хочу фукцию testfilename(filename,mask)
А может тогда уж глобально подойти:
дать доступ к регэкспам из макроса? например FindRegexp(регэксп_строка,строка) возвращаемое значение строка которая подошла под регэксп первой, тогда сравнение по маске *.bat будет выглядить так:
if (FindRegexp(".*\.bat$",%MyFileName)=%MyFileName) файл_соответствует_маске $else файл_не_соответствует_маске.
ну или как-то по другому может быть... (если чел разобрался в программировании макроса то и с регэкспами разберется, и уж тип файла точно проверить сумеет).
Хотя это можно сделать и с помощью callplugin, но не юзабельно... лучше команду в макросах
дать доступ к регэкспам из макроса? например FindRegexp(регэксп_строка,строка) возвращаемое значение строка которая подошла под регэксп первой, тогда сравнение по маске *.bat будет выглядить так:
if (FindRegexp(".*\.bat$",%MyFileName)=%MyFileName) файл_соответствует_маске $else файл_не_соответствует_маске.
ну или как-то по другому может быть... (если чел разобрался в программировании макроса то и с регэкспами разберется, и уж тип файла точно проверить сумеет).
Хотя это можно сделать и с помощью callplugin, но не юзабельно... лучше команду в макросах
SimSU ··· ·· -- ··· ··-
- HaRT
- Moderator
- Posts: 10869
- Joined: Tue 30 Aug, 2005 17:21
- Has thanked: 221 times
- Been thanked: 358 times
Re: Хочу фукцию testfilename(filename,mask)
Давно уже пора замутить плагин, который бы предоставлял макросам доступ к библиотекам разных функций, реализуемых под-плагинами.
Фар есть инструмент, а не нянька. © 2009 DrKnS
Re: Хочу фукцию testfilename(filename,mask)
Это конечно можно, но тормоза...
я с этим начал баловаться - вопросы:
1) callplugin - ограничен по возврату результата, только число (причем, в писании не сказано как что-то вернуть отличное от 1 если плагин сработал... {подскажите, можно хоть в личку})
2) если плагин по callplugin возвращает строку, то это он может сделать через реестр, чтобы этот результат увидел макрос (как с переходом на БД? {этот вопрос я уже задавал и не только про макросы, а и про скрипты (скрипт,макрос,стороннюю_программу можно запустить из макроса, а вот результаты можно узнать только если то_что_запускали положит в реестр или в клипбоард)}, в реестр было боле удобнее (имхо), но и в клипборад можно- чуть сложение и неудобнее различать stdout от stder)[про переменные среды не обсуждается!!! - нет многострочности]
3)...
Я пока жду........................ и в новшества вдаваться буду только при наличии документации!!!
я с этим начал баловаться - вопросы:
1) callplugin - ограничен по возврату результата, только число (причем, в писании не сказано как что-то вернуть отличное от 1 если плагин сработал... {подскажите, можно хоть в личку})
2) если плагин по callplugin возвращает строку, то это он может сделать через реестр, чтобы этот результат увидел макрос (как с переходом на БД? {этот вопрос я уже задавал и не только про макросы, а и про скрипты (скрипт,макрос,стороннюю_программу можно запустить из макроса, а вот результаты можно узнать только если то_что_запускали положит в реестр или в клипбоард)}, в реестр было боле удобнее (имхо), но и в клипборад можно- чуть сложение и неудобнее различать stdout от stder)[про переменные среды не обсуждается!!! - нет многострочности]
3)...
Я пока жду........................ и в новшества вдаваться буду только при наличии документации!!!
SimSU ··· ·· -- ··· ··-
Re: Хочу фукцию testfilename(filename,mask)
Это про сабж ?SUSim wrote:Я пока жду........................ и в новшества вдаваться буду только при наличии документации!!!
Тогда есть fmatch
2B OR NOT 2B = FF (Иногда code - это просто код. Почти Дйерф Омолш Днумзигис)
To ban or not to ban, that is the question. ©
To ban or not to ban, that is the question. ©