Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

парсер конфига

49K
28 августа 2009 года
metallic
9 / / 10.08.2009
Есть готовая библиотека?
Мне надо простой конфиг пропарсить, буквально логин-пас для базы и еще пару опций.
Аргументы коммандной строки не подойдут, именно конфигурационный файл нужен.
48K
28 августа 2009 года
ZeroDivision
18 / / 14.08.2009
Недавно писал свою реализацию.
Структура проста - в конфиге есть секции, в секциях есть файлы. В общем-то все как в ini файле в винде.
Комментарии - символ решетка в начале строки.
Пример
 
Код:
# Это коментарий
[general]
param1 = test
param2 = 10

Значения параметров можно получить как в виде строки, так и в виде числа.

Исходники реализации во вложении к сообщению, если будет необходим пример - напишу позже.
49K
28 августа 2009 года
metallic
9 / / 10.08.2009
Спасибо! Попробую разобраться
49K
28 августа 2009 года
metallic
9 / / 10.08.2009
а можно примерчик как этим пользоваться?
49K
28 августа 2009 года
metallic
9 / / 10.08.2009
и еще такой момент:

config.c:7:17: error: log.h: No such file or directory

_____

Это решил, заменил log на printf
48K
28 августа 2009 года
ZeroDivision
18 / / 14.08.2009
На примере конфига из предыдущего поста примерно так:

Код:
config_context_t* cfg_cnx;
char* param1;
int param2;

cfg_cnx = config_open("myconfig.cfg");
if(!cfg_cnx)
{
    fprintf(stderr, "Failed to load config.\n");
    return 1;
}

param1 = config_get_string(cfg_cnx, "general", "param1");
param2 = config_get_int(cfg_cnx, "general", "param2");

printf("param1: %s, param2: %d\n", param1, param2);

config_close(cfg_cnx);


Следует быть внимательным в случае строковых параметров: значения параметров сохраняются в динамической памяти, а функция config_get_string возвращает этот адрес. Т.е. после вызова config_close() все строковые параметры будут недействительны.

Также там в коде используется функция log() - в том проекте у меня была своя система логгирования. В самом простом случае можно написать так:
 
Код:
#define log printf
2
28 августа 2009 года
squirL
5.6K / / 13.08.2003
Цитата: metallic
Есть готовая библиотека?
Мне надо простой конфиг пропарсить, буквально логин-пас для базы и еще пару опций.
Аргументы коммандной строки не подойдут, именно конфигурационный файл нужен.


libcfg
http://platon.sk/projects/proj_doc_page.php?project_id=3

49K
28 августа 2009 года
metallic
9 / / 10.08.2009
Спасибо, получилось.

В принципе из исходников понял, что мне нужно всего несколько ф-ий, типа
config_get_string, config_get_int ну и открытия файла? остальные можно удалить?

И еще, не понял про config_close, т.е. пока программа работает и ей нужен конфиг делать config_close не надо, а то значения прочитанные из конфига уничтожаться?
48K
28 августа 2009 года
ZeroDivision
18 / / 14.08.2009
Цитата: metallic

В принципе из исходников понял, что мне нужно всего несколько ф-ий, типа
config_get_string, config_get_int ну и открытия файла? остальные можно удалить?


Да. Этого вам будет будет достаточно и больше там ничего и нет.
А какие там остальные функции? Они же друг друга вызывают. Думаю ничего удалить оттуда не получится. Кроме разве что config_get_double.

Цитата: metallic

И еще, не понял про config_close, т.е. пока программа работает и ей нужен конфиг делать config_close не надо, а то значения прочитанные из конфига уничтожаться?


Ну можно скопировать все строки в отдельные буфера, а потом закрыть конфиг. Тогда и числа и строки остануться (числа копировать не надо). Т.е. примерно так:

 
Код:
#define BUF_SIZE 32
/* ... */
char param1[BUF_SIZE], *ptr;
/* ... */
cfg_cnx = config_open("myconfig.cfg");
ptr = config_get_string(cfg_cnx, "general", "param1");
strncpy(param1, ptr, BUF_SIZE);
config_close(cfg_cnx);

/* значение, хранящееся в param1, здесь можно использовать */
49K
29 августа 2009 года
metallic
9 / / 10.08.2009
Ясно. Спасибо, все что нужно, ничего лишнего и все просто.
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог