Страницы

Поиск по вопросам

воскресенье, 29 декабря 2019 г.

INI файлы в C++

#cpp


Как лучше и проще реализовать работу с ini файлами ? Именно интересует реализация
структуры: 

;comment
[section]
name=value


Можно ведь написать парсер использую функция для работы с файлами ? 
P.S. Не предлагайте готовые решения, кроме встроенных функций, т.к. хочется самому. 
    


Ответы

Ответ 1



Вот ещё, pure C: iniparser. Умеет понимать довольно сложные случаи (документация). dictionary * ini = iniparser_load( "config.ini" ); char * one = dictionary_get( ini, "first_section:one", "default" ); char * two = dictionary_get( ini, "second_section:two", NULL ); iniparser_freedict(ini); Максимальная длина строки фиксирована, но её можно переопределить при сборке: #define ASCIILINESZ (1024) P.S. Что-то мне его допилить уже захотелось...

Ответ 2



Точно не знаю, насколько глубоко вам хочется самому, и насколько низко (в смысле насколько низкоуровневых операций) вы готовы опуститься. Если вы пишете для Windows и можете использовать WinAPI, тогда вы можете воспользоваться функциями GetPrivateProfileString и GetPrivateProfileInt. Подробнее: https://msdn.microsoft.com/en-us/library/ms724353.aspx (англ.) https://msdn.microsoft.com/en-us/library/ms724345.aspx (англ.) Если вы пишете кроссплатформенно и готовы использовать Boost, то просто возьмите Program_options. http://www.boost.org/doc/libs/1_36_0/doc/html/program_options.html (англ.) Если вы хотите полностью реализовать парсер самостоятельно, посмотрите для вдохоновения проект inih. Лучше чем там написано, всё равно никто не напишет. https://github.com/benhoyt/inih (англ.) Ну и в завершение, для того чтобы ещё более расширить плюрализм мнений и многообразие выбора, схожий вопрос на SO, в котором вы найдёте множество других не менее интересных альтернатив: https://stackoverflow.com/questions/12633/what-is-the-easiest-way-to-parse-an-ini-file-in-c (англ.)

Ответ 3



Мне кажется, что действительно хорошая функция чтения конфигурации должна быть тесно связана с разбором аргументов командной строки и текущими переменными окружения (environment). Т.е. нужна возможность модификации конфигурационного файла переменными окружения и аргументами, с которыми вызывается программа. Также привлекательна возможность после прочтения конфигурации сразу получать уже инициализированные из нее (с учетом модификации аргументами командной строки и environment) переменные программы. Если интересно, попробуйте спроектировать такую штуку.

Ответ 4



Именно интересует реализация структуры map < string, map > ini; Первый ключ - имя секции, второй - имя ключа, значение - значение параметра. Это для случая, когда важно осмысленное содержимое, а не всё, что вообще есть в файле. При желании сюда упихать комментарии, можно использовать пустую строку или ; в качестве ключа (а при особом желании, строки, начинающиеся с точки с запятой). Но порядок записей всё равно будет меняться при перезаписи. Если есть желание сохранить и порядок, можно просто сохранить нумерацию в отдельном векторе.

Комментариев нет:

Отправить комментарий