Числовой ключ в INI-файле
Select messages from
# through # FAQ
[/[Print]\]

Total Commander -> Программное обеспечение

#1: Числовой ключ в INI-файле Author: ВахмуркаLocation: Большая деревня Москва PostPosted: Wed Aug 16, 2017 14:24
    —
Все знают, что такое INI-файл (он же файл конфигурации, в просторечии ""инишник"). Также известно, что не существует общепринятого стандарта формата такого файла. Но многие программы, включая ТС, его активно используют. Кроме того, некоторые приложения позволяют пользователю создавать свои инишники и читают из них/пишут в них значения ключей. Поэтому, видимо, авторы подобных приложений стараются соблюдать если не стандарт, то хотя бы сложившиеся традиции.
Поиск в MSDN ничего не дал, или я плохо искал? Официально Microsoft этот формат уже давно не поддерживает (хотя неофициально - поддерживает, см. хотя бы boot.ini). Но, с другой стороны, на меломягких свет клином не сошелся.
Где есть наиболее адекватный список этих правил/норм/ограничений, или каждый создает свой собственный?
Например, как заранее, без экспериментов, понять:
- какую кодировку должен иметь инишник?
- допускается ли использование кириллицы в именах разделов и ключей?
- комментарий должен быть отдельной строкой или может отделяться от любой строки символом ";"?
- может ли к качестве символа комментария использоваться "#"?
- может ли быть пустой ключ? При его чтении возвращается пустая строка или такая запись трактуется как ошибка?
- каково ограничение на длину имени раздела/ключа/значения?
- может ли ключ иметь чисто числовое, без букв, имя?
Меня, признаться, больше всего интересует именно последний вопрос. Если нет, то хочется понять логику: чему противоречит строка
Code:
1=something
Буду признателен за информацию.

#2:  Author: MVVLocation: Ростов-Дон PostPosted: Wed Aug 16, 2017 14:44
    —
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(апап,апапа,`папа`)"

#3:  Author: ВахмуркаLocation: Большая деревня Москва PostPosted: Wed Aug 16, 2017 14:51
    —
Quote:
Ключи только из цифр, разумеется, допустимы
Alan Campbell, автор плагина ini для PowerPro придерживается, видимо, другой точки зрения, хотя в документации об этом не говорит. У меня чуть мозги не закипели, пока я искал ошибку в своем скрипте, читающим именно такие ключи.
Получается, это следует трактовать как баг или есть какие-то разумные ограничения на числовые ключи?
Впрочем, спрашиваю больше из любопытства. Кэмпбелл уже давно отошел от дел и последняя версия плагина датируется 2004 годом, так что придется выкручиваться...

#4:  Author: MVVLocation: Ростов-Дон PostPosted: Wed Aug 16, 2017 15:02
    —
Числовые ключи используются очень часто, когда в секции нужны только значения (для формирования списка), и отсутствие их поддержки - определённо баг.

Ещё важным правилом виндовозных INI-файлов является обрамление кавычками: если значение начинается или заканчивается пробелом, оно берётся в кавычки, при этом перед открывающей кавычкой (самой первой) могут быть пробелы, после закрывающей (самой последней) - пробелы и комментарий, и между этими кавычками могут быть другие кавычки.



Total Commander -> Программное обеспечение


output generated using printer-friendly topic mod. All times are GMT + 4 Hours

Page 1 of 1

Powered by phpBB © 2001, 2005 phpBB Group