IniVirtual - (рекомендуется) создаёт виртуальный ini-файл в виде массив массивов. При частых запросах общее время доступа меньше, наилучший баланс скорости.
IniVirtualSPE - работает с ini-файлом, находящимся в памяти в виде текста. Скорость однократного доступа быстрее чем инициализация массива, но при частых запросах сумма времени затраченная на доступ превышает аналогичное время доступа варианта с массивом.
Назначение UDF в отличии от нативных функций
1. Снять ограничения 32767 при выполнении IniReadSection
2. Возможность загрузить ini-файл с интернета и работать с ним без сохранения на жёсткий диск.
3. Не переживать что при сохранении данных нужно будет заключать в кавычки строку с пробелом в конце, потому что за это переживать будет UDF.
Формат возвращаемых значений и ошибок максимально приближен к нативным функциям, кроме некоторых исключений:
1. Если значение имеет пробел в начале или в конце, то значение автоматически заключаются в кавычки при записи/сохранении. Это позволяет записывать и считывать подобные строки не заботясь о том, что пробел будет обрезан движком UDF.
2. Ошибки записи быть не может, так как данные записываются в памяти.
3. Параметр ' param' и 'param' (без пробела) в нативных является одним и тем же параметром и это либо баг так как текст параметров разный, либо правило, по которому пробел с краю не может являтся частью параметра, соответственно в UDF параметр с пробелом скраю никогда не будет найден, так как любые пробелы параметра игнорируются.
4. В нативных параметр '=param' не будет найден, в то время как в UDF допускается символ "=" первым (если второй, то это будет уже разделитель), пока не понятно насколько это является недопустимым. Если поставить запрет на это, то "=" можно использовать как комментарий.
Некоторые правила INI-файла:
1. Примеры имени секции.
Допускаются пробельные символы до и после обрамляющих скобок
Допускается отсутствие закрывающей скобки, при этом имя секции может содержать пробелы но последняя буква не может быть пробелом. Например:
[sec]
[sec]
[ sec ]
[ sec ]
[ sec
2. Параметры (ключи) секции. Параметры не могут начинаться с символов [ и ; так как они будут является именем секции или закомментированными данными, т.е. описание, которое игнорируется. Внутри имени могут содержаться символы [ и ; а также пробел, русские и любые другие, кроме символа "=". Первый и последний символ параметра не может быть пробельным. Например:
param
param
param
pa[ram
pa;ram
pa ram
3. Символ отделяющий параметр от значения это первый попавшийся в строке символ "=", символы правее него уже будут являтся содержащимися в значении.
4. Значением является текст после символа "=" и может содержать любые символы, но крайние символы любой непробельный, иначе любые пробелы по краям значения обрезаются. Чтобы пробелы разрешить с краёв допускается использовать одинатрные или двойные кавычки, которые не будут являтся частью значения, то есть обрезаются при чтении, причём кавычки могут быть одного типа, либо двойные либо одинарные, иначе если они разные, то они будут частью значения. Кавычки обрезаются в любом случае, даже если значение совсем не содержит пробела. Если требуется, чтобы прочитанное значение имело кавычки по краям, необходимо продублировать их. Например:
значение
"значение"
значение
""значение""
5. Пример полной строки:
param = значение
param = "значение"
param=значение
param = ""значение""
Цель проста: 1. Снять ограничения 32767 при выполнении IniReadSection 2. Возможность загрузить ini-файл с интернета и работать с ним без сохранения на жёсткий диск. 3. Не переживать что при сохранении данных нужно будет заключать в кавычки строку с пробелом в конце, потому что за это переживать будет UDF.