Отсутствие заключительного '\' в APanel.Path

Здесь обсуждается всё, что касается макросов.
User avatar
Skirda
Posts: 3475
Joined: Wed 16 Mar, 2005 11:01
Been thanked: 8 times

Re: Отсутствие заключительного '\' в APanel.Path

Post by Skirda »

Latest post of the previous page:

вот ХЗ где это, но у меня отложилось что было :oops:
(не обязательно в этом форуме, может на мантисе, может в листах рассылки...)
We are the Borg. You will be assimilated.
So Say We All!
User avatar
Raistlin
Posts: 750
Joined: Wed 16 Mar, 2005 16:01
Has thanked: 3 times
Been thanked: 1 time

Re: Отсутствие заключительного '\' в APanel.Path

Post by Raistlin »

... и снова в морге. Так чего решим?
Чтобы добавить неразберихи: APanel.Path0 для корневого каталога возвращает путь со слешем :? .
Magically yours
Raistlin
valiva28
Posts: 49
Joined: Tue 07 Sep, 2010 10:20

Re: Отсутствие заключительного '\' в APanel.Path

Post by valiva28 »

+1 за то, что-бы слеш в конце был всегда, иначе его нужно все время проверять (корень диска или нет). В тех редких случаях, когда он не нужен (напр. создать архив по имени папки) - его не сложно без дополнительной проверки удалить.
User avatar
SUSim
Posts: 1637
Joined: Thu 18 Feb, 2010 17:32
Has thanked: 9 times
Been thanked: 26 times

Re: Отсутствие заключительного '\' в APanel.Path

Post by SUSim »

valiva28 wrote:+1 за то, что-бы слеш в конце был всегда, иначе его нужно все время проверять (корень диска или нет). В тех редких случаях, когда он не нужен (напр. создать архив по имени папки) - его не сложно без дополнительной проверки удалить.
проще проверить корень ли это!

Я, в прицепе, не против, но добавить символ к строке намного легче чем убрать. Программы ждущие имя директории(папки) не всегда понимают путь со слешем в конце, а вот "c:\" воспринимают все...
Если важно: мне проще добавить слеш там где надо, чем удалять там где не надо...
Тем более устоялось!
-0,5 :)
SimSU ··· ·· -- ··· ··-
User avatar
John Doe
Бюрократ
Posts: 13867
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 74 times
Been thanked: 428 times
Contact:

Re: Отсутствие заключительного '\' в APanel.Path

Post by John Doe »

+0,5
Не смог придумать где слеш помешает.
User avatar
Raistlin
Posts: 750
Joined: Wed 16 Mar, 2005 16:01
Has thanked: 3 times
Been thanked: 1 time

Re: Отсутствие заключительного '\' в APanel.Path

Post by Raistlin »

SUSim wrote:добавить символ к строке намного легче чем убрать
IMHO это проблема синтаксиса substr(), а именно:
Если параметр N2 не указан или равен -1, то вернётся подстрока от позиции N1 до конца строки.
По-хорошему, возвращать подстроку от N1 до конца надо, только если N2 не указан. А если он -1, то надо возвращать от N1 до предпоследнего символа включительно. Так работает cmd'шный set и tcmd'шный @instr.
Magically yours
Raistlin
User avatar
SUSim
Posts: 1637
Joined: Thu 18 Feb, 2010 17:32
Has thanked: 9 times
Been thanked: 26 times

Re: Отсутствие заключительного '\' в APanel.Path

Post by SUSim »

С этим согласен, я очень за "-" в substr(), но сразу же возникает желание получить подстроку с позиции до позиции, а не по количеству... Но что есть то есть... Развитие макроязыка приостановилось в приятных мелочах. Надеюсь как решится глобальная проблема с callplugin, так и на мелочи внимание обратят!
SimSU ··· ·· -- ··· ··-
User avatar
Raistlin
Posts: 750
Joined: Wed 16 Mar, 2005 16:01
Has thanked: 3 times
Been thanked: 1 time

Re: Отсутствие заключительного '\' в APanel.Path

Post by Raistlin »

Ну что же, складываем плюсы и минусы и ждем, что скажет Big Bee :) .
А wish по поводу substr() на мантис закину.

http://bugs.farmanager.com/view.php?id=1480
Magically yours
Raistlin
User avatar
Skirda
Posts: 3475
Joined: Wed 16 Mar, 2005 11:01
Been thanked: 8 times

Re: Отсутствие заключительного '\' в APanel.Path

Post by Skirda »

Есть альтернативная идея:

1. я вам даю "S=addslash(S)" и "S=delslash(S)" - добавляет/удаляет заключительный слеш (эти функции в ФАРе есть; функция addslash работает с обоими видами слешей, также происходит изменение уже существующего конечного слеша на такой, который встречается чаще)
2. вы не трогаете сабж.

это устроит всех?
We are the Borg. You will be assimilated.
So Say We All!
User avatar
Raistlin
Posts: 750
Joined: Wed 16 Mar, 2005 16:01
Has thanked: 3 times
Been thanked: 1 time

Re: Отсутствие заключительного '\' в APanel.Path

Post by Raistlin »

А зачем так? Это классический костыль :( . Или нынешнее поведение APanel.Path дорого как память?
Вдвойне непонятное решение, если предложения по substr() будут приняты...
Magically yours
Raistlin
User avatar
HaRT
Moderator
Posts: 10869
Joined: Tue 30 Aug, 2005 17:21
Has thanked: 221 times
Been thanked: 358 times

Re: Отсутствие заключительного '\' в APanel.Path

Post by HaRT »

Skirda wrote:"S=addslash(S)" и "S=delslash(S)"
Как-то не очень здорово в название функции закладывать конкретный разделитель. Не лучше ли addPathSep и, например, cutPathSep?
Фар есть инструмент, а не нянька. © 2009 DrKnS
Max Rusov
Posts: 3651
Joined: Wed 23 Nov, 2005 11:11
Location: Москва-Питер
Has thanked: 2 times
Been thanked: 19 times

Re: Отсутствие заключительного '\' в APanel.Path

Post by Max Rusov »

Raistlin wrote:Или нынешнее поведение APanel.Path дорого как память?
А совместимость с уже существующими макросами вас не волнует?
User avatar
Raistlin
Posts: 750
Joined: Wed 16 Mar, 2005 16:01
Has thanked: 3 times
Been thanked: 1 time

Re: Отсутствие заключительного '\' в APanel.Path

Post by Raistlin »

Max Rusov wrote:А совместимость с уже существующими макросами вас не волнует?
Лучше один раз отмучаться и забыть как страшный сон, чем усложнять язык на пустом месте. Как показывает практика, это не первое и не самое революционное изменение, вносимое в язык.
К тому же отнюдь не каждый макрос, где используется APanel.Path, есть необходимость править. Ведь двойные слеши в пути, в общем-то, проглатываются системой на ура, так ведь?
Magically yours
Raistlin
User avatar
John Doe
Бюрократ
Posts: 13867
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 74 times
Been thanked: 428 times
Contact:

Re: Отсутствие заключительного '\' в APanel.Path

Post by John Doe »

Skirda wrote:1. я вам даю "S=addslash(S)" и "S=delslash(S)"
Не надо.
Либо поменять, либо оставить как есть.
Если что, то существующие макросы поправить недолго, намного проще чем ахтунги в 1621.
User avatar
Wave
Posts: 1887
Joined: Thu 04 Aug, 2005 18:47
Has thanked: 15 times
Been thanked: 26 times

SetPath и корень диска

Post by Wave »

Я не уверен, ошибка ли это, но столкнулся с таким вот поведением.

Станем в корень диска D:\ например.
  1. p = APanel.Path;
  2.  
  3. f = APanel.Current;
  4.  
  5. Panel.SetPath(0, "D:\\subfolder", "anyfile.txt");
  6.  
  7. -- чего-то поделали
  8.  
  9. Panel.SetPath(0, p, f);
Ожидание: окажусь в корне D:\ где и был до макроса.
Реальность: D:\subfolder\..

Если мы не в корне, макрос работает, как и задумывалось. А в корне — p == "D:" — и потому не работает. Приходится дополнительную проверку добавлять,
  1. if #p == 2 then p = p .. "\\" end; -- если длина строки == 2 то это корень диска и ему нужно добавить \
Мне не влом лишнюю строчку добавить, но это как бы идеологически неправильно; она ухудшает читаемость; о ней нужно вовремя вспомнить; если о ней не знать или не помнить, будут сюрпризы.
Пользуюсь ФАРом больше 20 лет © собирательный.
User avatar
DrKnS
Posts: 6114
Joined: Thu 04 Aug, 2005 06:44
Location: Kyiv
Has thanked: 12 times
Been thanked: 426 times

Re: SetPath и корень диска

Post by DrKnS »

Post Reply

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