условный макрос с goto

Столкнулись с проблемой в использовании макросов? Здесь можно получить помощь.
DeeZ
Posts: 100
Joined: Sat 20 Mar, 2010 18:48

условный макрос с goto

Post by DeeZ »

Прошу помощи, подскажите как правильно написать макрос, который переходит в ту папку, которая существует.
примерно надо такое, но у меня не получается. где ошибка?

Code: Select all

far:macro post $If (fexist(v:\)) goto:v:\usr\soft\ $Else goto:d:\downoads\soft\ $End
в идеале вообще такое хочется:

Code: Select all

$If ( !fexist(v:\) || panel.fexist(1,v:\usr\soft) ) 
      goto:d:\downoads\soft\ 
$Else 
      goto:v:\usr\soft\ 
$End
при нажатии кнопки, если вставлена флешка - перейти в папку на флешке, но если на пассивной панели эта папка уже открыта, то перейти в папку на компе.
если флешка не вставлена - сразу перейти в папку на компе.
User avatar
DrKnS
Posts: 6114
Joined: Thu 04 Aug, 2005 06:44
Location: Kyiv
Has thanked: 12 times
Been thanked: 426 times

Re: условный макрос с goto

Post by DrKnS »

DeeZ
Posts: 100
Joined: Sat 20 Mar, 2010 18:48

Re: условный макрос с goto

Post by DeeZ »

DrKnS wrote:panel.setpath
выдает ошибку, ругаясь на двоеточие.

Code: Select all

╔══════════════════════ Ошибка при разборе макроса ═══════════════════════╗
║ Строка 1, позиция 15:                                                   ║
║ Ожидается ')'                                                           ║
╟─────────────────────────────────────────────────────────────────────────╢
║ " $If (fexist(v:\)) panel.setpath(0,v:\usr\soft\)  $Else panel.setpath( ║
║                ↑                                                        ║
╟─────────────────────────────────────────────────────────────────────────╢
║                               Продолжить                                ║
╚═════════════════════════════════════════════════════════════════════════╝
User avatar
DrKnS
Posts: 6114
Joined: Thu 04 Aug, 2005 06:44
Location: Kyiv
Has thanked: 12 times
Been thanked: 426 times

Re: условный макрос с goto

Post by DrKnS »

Пути надо в кавычки, слеши удваивать.
DeeZ
Posts: 100
Joined: Sat 20 Mar, 2010 18:48

Re: условный макрос с goto

Post by DeeZ »

отлично! спасибо работает.

теперь у меня проблема с логикой (в голове) помогите:

Code: Select all

$If ( ( !fexist("v:\\") || panel.fexist(1,"v:\\usr\\soft") ) ) 
   panel.setpath(0,"d:\\downloads\\soft\\") 
$Else 
   panel.setpath(0,"v:\\usr\\soft\\") 
$End 
хочется: при нажатии кнопки, если вставлена флешка - перейти в папку на флешке, но если на пассивной панели эта папка уже открыта, то перейти в папку на компе.
если флешка не вставлена - сразу перейти в папку на компе.

получается:
флешка есть - переходит на флешку. v:\
флешки нет - переходит в папку на компе.d:\
флешка вставлена, но на пасивной уже открыта папка с флешки v:\ : Все равно в активной панели переходит на флешку V:\ (а должен на d:\)

условие panel.fexist(1,"v:\\usr\\soft") не срабатывает.

что я делаю не так?

UPD понял в чем косяк... пошел читать хелпы, как проверить полный путь открытый на пассивной панели.
User avatar
DrKnS
Posts: 6114
Joined: Thu 04 Aug, 2005 06:44
Location: Kyiv
Has thanked: 12 times
Been thanked: 426 times

Re: условный макрос с goto

Post by DrKnS »

DeeZ wrote:но если на пассивной панели эта папка уже открыта

условие panel.fexist(1,"v:\\usr\\soft") не срабатывает.

что я делаю не так?
Интересоваться "а уж не v:\usr\soft ли открыта на пассивной панели?" надо не через panel.fexist, а через $if (ppanel.path=="путь")
DeeZ
Posts: 100
Joined: Sat 20 Mar, 2010 18:48

Re: условный макрос с goto

Post by DeeZ »

Сделал через флаг, пока.


эта схема не срабатывает:
User avatar
SUSim
Posts: 1636
Joined: Thu 18 Feb, 2010 17:32
Has thanked: 9 times
Been thanked: 26 times

Re: условный макрос с goto

Post by SUSim »

вторая схема сработает если регистр букв в проверке поправишь :) на "V:\\usr\\soft" сравнение строк регистрозависимо!
или (ppanel.path=="v:\\usr\\soft") исправь на (lcase(ppanel.path)=="v:\\usr\\soft")
SimSU ··· ·· -- ··· ··-
DeeZ
Posts: 100
Joined: Sat 20 Mar, 2010 18:48

Re: условный макрос с goto

Post by DeeZ »

SUSim wrote: сравнение строк регистрозависимо! исправь на (lcase(ppanel.path)=="v:\\usr\\soft")
Спасибо огромное! не перестает радовать Far=)

на всякий случай результат, вдруг кому пригодится
User avatar
Skirda
Posts: 3475
Joined: Wed 16 Mar, 2005 11:01
Been thanked: 8 times

Re: условный макрос с goto

Post by Skirda »

SUSim wrote:сравнение строк регистрозависимо!
Хмм... и с какого перепуга?
Надо бы изменить, ибо макросам должно быть пофигу...
We are the Borg. You will be assimilated.
So Say We All!
User avatar
SUSim
Posts: 1636
Joined: Thu 18 Feb, 2010 17:32
Has thanked: 9 times
Been thanked: 26 times

Re: условный макрос с goto

Post by SUSim »

может спешить не надо? привести к одному регистру всегда можно, а вот восстановить регистр уже ни как...
Кому то может быть полезно...
SimSU ··· ·· -- ··· ··-
User avatar
Centaur
Posts: 1083
Joined: Tue 05 Apr, 2005 20:09
Location: Novosibirsk, Russia
Been thanked: 2 times

Re: условный макрос с goto

Post by Centaur »

В Юникоде регистронезависимое сравнение строк не эквивалентно сравнению строк, приведённых к одному регистру — хоть верхнему, хоть нижнему.

Контрпример для нижнего регистра: "ς" =case= "σ", но "ς" != "σ".
User avatar
SUSim
Posts: 1636
Joined: Thu 18 Feb, 2010 17:32
Has thanked: 9 times
Been thanked: 26 times

Re: условный макрос с goto

Post by SUSim »

Нда... ну да ладно пусть будет регистронезависимое сравнение в макросах, но и регистрозависимое тоже не помешало бы :)

Странно как то, тогда в твоем примере при регистронезависимом сравнении и "Σ"=="ς" и "Σ"=="σ" ?
SimSU ··· ·· -- ··· ··-
User avatar
Centaur
Posts: 1083
Joined: Tue 05 Apr, 2005 20:09
Location: Novosibirsk, Russia
Been thanked: 2 times

Re: условный макрос с goto

Post by Centaur »

Я тоже за отдельные функции или операторы для регистрозависимого и -независимого сравнения.

Да, сигма-заглавная =case= сигма-строчная =case= сигма-строчная-финальная.
User avatar
SUSim
Posts: 1636
Joined: Thu 18 Feb, 2010 17:32
Has thanked: 9 times
Been thanked: 26 times

Re: условный макрос с goto

Post by SUSim »

Вот хрень... не могу проверить, я с этим не сталкиваюсь :,( или наоборот :)
Так вот ты на вопрос не ответил: при регистронезависимом сравнении Σ"=="ς" и "Σ"=="σ" то и то истина ???
SimSU ··· ·· -- ··· ··-
Post Reply

Return to “Нужна помощь”