View previous topic :: View next topic |
Author |
Message |
Вахмурка
Joined: 27 Dec 2004 Posts: 2584 Location: Большая деревня Москва
|
(Separately) Posted: Wed Aug 16, 2017 14:24 Post subject: Числовой ключ в INI-файле |
|
|
Все знают, что такое INI-файл (он же файл конфигурации, в просторечии ""инишник"). Также известно, что не существует общепринятого стандарта формата такого файла. Но многие программы, включая ТС, его активно используют. Кроме того, некоторые приложения позволяют пользователю создавать свои инишники и читают из них/пишут в них значения ключей. Поэтому, видимо, авторы подобных приложений стараются соблюдать если не стандарт, то хотя бы сложившиеся традиции.
Поиск в MSDN ничего не дал, или я плохо искал? Официально Microsoft этот формат уже давно не поддерживает (хотя неофициально - поддерживает, см. хотя бы boot.ini). Но, с другой стороны, на меломягких свет клином не сошелся.
Где есть наиболее адекватный список этих правил/норм/ограничений, или каждый создает свой собственный?
Например, как заранее, без экспериментов, понять:
- какую кодировку должен иметь инишник?
- допускается ли использование кириллицы в именах разделов и ключей?
- комментарий должен быть отдельной строкой или может отделяться от любой строки символом ";"?
- может ли к качестве символа комментария использоваться "#"?
- может ли быть пустой ключ? При его чтении возвращается пустая строка или такая запись трактуется как ошибка?
- каково ограничение на длину имени раздела/ключа/значения?
- может ли ключ иметь чисто числовое, без букв, имя?
Меня, признаться, больше всего интересует именно последний вопрос. Если нет, то хочется понять логику: чему противоречит строкаБуду признателен за информацию. _________________ Сайт PowerPro+Total Commander
Скрипты PowerPro для Total Commander
* * *
«Не усматривайте злого умысла в том, что вполне объяснимо глупостью» (Р. Хэнлон) |
|
Back to top |
|
|
MVV
Joined: 15 Oct 2009 Posts: 4811 Location: Ростов-Дон
|
(Separately) Posted: Wed Aug 16, 2017 14:44 Post subject: |
|
|
Quote: | Также известно, что не существует общепринятого стандарта формата такого файла. |
Насколько мне известно, этот формат - творение Microsoft, поэтому истинно правильным синтаксисом я считаю синтаксис INI-файлов, которые читаются и пишутся системными функциями Windows (GetPrivateProfileString, WritePrivateProfileString и др.).
Quote: | Официально Microsoft этот формат уже давно не поддерживает |
Однако функции чтения/записи INI-файлов никуда не делись и продолжают работать.
Quote: | (хотя неофициально - поддерживает, см. хотя бы boot.ini) |
Который после WinXP не используется?
Quote: | Например, как заранее, без экспериментов, понять: |
В виндовозных инишниках поддерживаются только ANSI и UTF-16 (без BOM). Кириллица допускается везде. Комментарии начинаются после точки с запятой и могут быть в конце строк. Ключи без значения скорее всего недопустимы. Самое известное ограничение - на размер файла, 64 КБ. Ключи только из цифр, разумеется, допустимы (в тоталовских инишниках такое сплошь и рядом).
Тоталовские INI- и BAR-файлы читаются и пишется через системные функции, поэтому является примером "нормального" INI-файла. INI-файл моей TCFS2 тоже читается системными функциями и является примером INI-файла с комментариями в конце строк, кроме того, в TCFS2 есть команды для чтения/записи INI-значений через системные функции, например:
Code: | TCFS2 /ef "set_tcini(апап,апапа,`папа`)" |
_________________ TCFS2 + TCFS2Tools: Полноэкранный режим и многое другое (обсуждение)
WINCMD.RU: AskParam, CopyTree, NTLinks, Sudo, VirtualPanel… |
|
Back to top |
|
|
Вахмурка
Joined: 27 Dec 2004 Posts: 2584 Location: Большая деревня Москва
|
(Separately) Posted: Wed Aug 16, 2017 14:51 Post subject: |
|
|
Quote: | Ключи только из цифр, разумеется, допустимы | Alan Campbell, автор плагина ini для PowerPro придерживается, видимо, другой точки зрения, хотя в документации об этом не говорит. У меня чуть мозги не закипели, пока я искал ошибку в своем скрипте, читающим именно такие ключи.
Получается, это следует трактовать как баг или есть какие-то разумные ограничения на числовые ключи?
Впрочем, спрашиваю больше из любопытства. Кэмпбелл уже давно отошел от дел и последняя версия плагина датируется 2004 годом, так что придется выкручиваться... _________________ Сайт PowerPro+Total Commander
Скрипты PowerPro для Total Commander
* * *
«Не усматривайте злого умысла в том, что вполне объяснимо глупостью» (Р. Хэнлон) |
|
Back to top |
|
|
MVV
Joined: 15 Oct 2009 Posts: 4811 Location: Ростов-Дон
|
(Separately) Posted: Wed Aug 16, 2017 15:02 Post subject: |
|
|
Числовые ключи используются очень часто, когда в секции нужны только значения (для формирования списка), и отсутствие их поддержки - определённо баг.
Ещё важным правилом виндовозных INI-файлов является обрамление кавычками: если значение начинается или заканчивается пробелом, оно берётся в кавычки, при этом перед открывающей кавычкой (самой первой) могут быть пробелы, после закрывающей (самой последней) - пробелы и комментарий, и между этими кавычками могут быть другие кавычки. _________________ TCFS2 + TCFS2Tools: Полноэкранный режим и многое другое (обсуждение)
WINCMD.RU: AskParam, CopyTree, NTLinks, Sudo, VirtualPanel… |
|
Back to top |
|
|
|
|
You cannot post new topics in this forum You cannot reply to topics in this forum You cannot edit your posts in this forum You cannot delete your posts in this forum You cannot vote in polls in this forum
|
Powered by phpBB © 2001, 2005 phpBB Group
|