Page 4 of 4

Кавычки (QuoteSpace)

Posted: Sun 15 Sep, 2019 18:09
by buniak_a_h

Latest post of the previous page:

makhaon wrote: Sun 15 Sep, 2019 17:06
buniak_a_h wrote: Sun 15 Sep, 2019 01:09 Но в этих диалогах и просто кавычки тоже не принимаются
Это не так :) Вот сейчас попробовал в браузере Crlt+O - "C:\Program Files (x86)\Far Manager" зашло без вопросов.
Возможно, зависит от версии виндов.
Поясню. Раньше очень мешали и кавычки, и пробел в конце (по Ctrl+F вставляется). Ругался, но приходилось вычищать... Видимо, с тех пор что-то изменилось: и LibreOffice, и старая Delphi-7, во всяком случае, съедают.
makhaon wrote: Sun 15 Sep, 2019 17:06 Ctrl+F в помощь Вставляет сразу путь + файл
Вы таки мне это рассказываете? :sarcastic_hand
Ситуация, когда папку надо взять с одной панели, а файл - с другой. А Ctrl+F и Вам раньше бы не помешал: там конечного слэша вне кавычек никогда не было.

Кавычки (QuoteSpace)

Posted: Sun 15 Sep, 2019 19:27
by Smitis
Как ни крути, вставлять слеш плохо, не вставлять плохо...

Кавычки (QuoteSpace)

Posted: Sun 15 Sep, 2019 19:57
by DrKnS
Ну как там, придумали, что с !\ делать - AI или новую закорючку?

Кавычки (QuoteSpace)

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

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

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

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

Кавычки (QuoteSpace)

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

Нашел здесь: https://devblogs.microsoft.com/oldnewth ... 0/?p=12833

Кавычки (QuoteSpace)

Posted: Sun 15 Sep, 2019 23:42
by DrKnS
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\\", что, в принципе, логично.

Кавычки (QuoteSpace)

Posted: Mon 16 Sep, 2019 00:23
by makhaon
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;

Кавычки (QuoteSpace)

Posted: Mon 16 Sep, 2019 01:58
by Yegor
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

Кавычки (QuoteSpace)

Posted: Mon 16 Sep, 2019 08:14
by Smitis
Даже у самой MS парсинг строки идёт по разному. Например, в WSH (VBS, JS) обратный слеш - обычный символ

Code: Select all

For Each arg In WScript.Arguments : n=n+1 : WScript.Echo "Argument " & CStr(n-1) & ": <" & arg & ">" : Next