Кавычки (QuoteSpace)

Здесь можно сообщить о найденных багах в Far.
Smitis
Posts: 1593
Joined: Fri 18 Mar, 2005 12:51
Location: Питер
Has thanked: 18 times
Been thanked: 35 times

Кавычки (QuoteSpace)

Post by Smitis » Sun 15 Sep, 2019 21:28

Latest post of the previous page:

DrKnS wrote:
Sun 15 Sep, 2019 19:57
Ну как там, придумали, что с !\ делать - AI или новую закорючку?
Коротко напомню о проблеме:
- Пути могут содержать пробелы, поэтому их надо заключать в кавычки.
- Если путь в кавычках с \ на конце - некоторые программы воспринимают такой слеш как спецсимвол.
- Обратный слеш после кавычек воспринимается не правильно другими программами.
- Не ставить слеш совсем не получиться, так как корень диска всегда будет заканчиваться на \, а если добавлять \ в ручную к пути без слеша на конце, не все программы такой двойной слеш воспримут правильно.

Бардак, в общем, ещё со времён ДОСа.

Тут только поможет:
- Делать как я выше предложил - шаблон для путей. Тогда в критической ситуации всегда можно проверить через IF что там. (IF "!{P}"=="\")
- Делать AI, как Вы предложили.

Шаблоны универсальнее. AI, наверное, проще реализовать. Но как должен вести себя AI с корнем диска, не представляю.
Разум когда-нибудь победит.

Yegor
Posts: 1029
Joined: Mon 04 Apr, 2005 13:41
Location: San Ramon, CA / Kharkov, UA
Has thanked: 8 times
Been thanked: 19 times

Кавычки (QuoteSpace)

Post by Yegor » Sun 15 Sep, 2019 22:45

Smitis wrote:
Sun 15 Sep, 2019 21:28
Если путь в кавычках с \ на конце - некоторые программы воспринимают такой слеш как спецсимвол.
Можно пример?

Нашел здесь: https://devblogs.microsoft.com/oldnewth ... 0/?p=12833
Last edited by Yegor on Sun 15 Sep, 2019 22:53, edited 1 time in total.
Мы не можем ждать милостей от Фара, взять их у него — наша задача! (C) Мичурин

User avatar
DrKnS
Posts: 5397
Joined: Thu 04 Aug, 2005 06:44
Location: Kyiv
Has thanked: 6 times
Been thanked: 227 times

Кавычки (QuoteSpace)

Post by DrKnS » Sun 15 Sep, 2019 23:42

But what if you wanted a backslash at the end of the string? Then you protect the backslash with a backslash, leaving the quotation mark unprotected.
Т.е. правильно делать lalala\\", что, в принципе, логично.

makhaon
Posts: 10
Joined: Mon 09 Sep, 2019 11:31
Has thanked: 2 times

Кавычки (QuoteSpace)

Post by makhaon » Mon 16 Sep, 2019 00:23

buniak_a_h wrote:
Sun 15 Sep, 2019 18:09
Вам раньше бы не помешал: там конечного слэша вне кавычек никогда не было.
Мне мешала не столько текущая папка, а ctrl+[ ctrl+]. постоянно приходится их использовать. и конечный слэш был очень не удобен.
Smitis wrote:
Sun 15 Sep, 2019 21:28
Делать AI, как Вы предложили.
Я вообще не вижу проблемы для файловой оболочки исправлять автоматом пути/файлы. Мы пишем софт с путями связанный ну очень относительно и отдаленно. И то у меня для правок путей целая отдельная функция:
  1. function NormalizePath(const DirName: string): string;
  2. var
  3.  AddSlash: boolean;
  4. begin
  5.  Result := ReplaceChr(DirName, '', '"?*''');
  6.  case Result.Length of
  7.   0: ;
  8.   1: if CharInSet(UpCase(Result[1]), ['A'..'Z']) then
  9.     Result := Result + ':\'
  10.    else
  11.   else
  12.    if not Result.EndsWith('\') then
  13.     Result := Result + '\';
  14.  end;
  15.  Result := ReplaceChr(Result, '\', '/');
  16.  AddSlash := Result.StartsWith('\\');
  17.  Result := ReplaceText(Result, '\\', '\');
  18.  if AddSlash then
  19.   Result := '\' + Result;
  20. end;
Last edited by makhaon on Mon 16 Sep, 2019 00:26, edited 4 times in total.

Yegor
Posts: 1029
Joined: Mon 04 Apr, 2005 13:41
Location: San Ramon, CA / Kharkov, UA
Has thanked: 8 times
Been thanked: 19 times

Кавычки (QuoteSpace)

Post by Yegor » Mon 16 Sep, 2019 01:58

DrKnS wrote:
Sun 15 Sep, 2019 23:42
Т.е. правильно делать lalala\\", что, в принципе, логично.
Там статья больше про CommandLineToArgvW. И разные компиляторы/CRT/RTL/библиотеки действительно могут парсить по-разному, например delphi не поддерживает "escaping", и там:
"a\" -> a\
"a"\ -> a\
"a\\b" -> a\\b
a""b -> ab
"a""b" -> ab
Мы не можем ждать милостей от Фара, взять их у него — наша задача! (C) Мичурин

Smitis
Posts: 1593
Joined: Fri 18 Mar, 2005 12:51
Location: Питер
Has thanked: 18 times
Been thanked: 35 times

Кавычки (QuoteSpace)

Post by Smitis » Mon 16 Sep, 2019 08:14

Даже у самой MS парсинг строки идёт по разному. Например, в WSH (VBS, JS) обратный слеш - обычный символ

Code: Select all

For Each arg In WScript.Arguments : n=n+1 : WScript.Echo "Argument " & CStr(n-1) & ": <" & arg & ">" : Next
Last edited by Smitis on Mon 16 Sep, 2019 08:17, edited 1 time in total.
Разум когда-нибудь победит.

Post Reply

Return to “Глюки и баги”