Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C/C++: Общие вопросы > Чем вы пользуетесь для разбора конфиг файлов


Автор: chaos 25.3.2009, 10:54
День добрый!
Хотелось бы узнать у обитателей данного форума: какими либами вы пользуетесь для разбора конфигов к своим приложениям
название, +- на ваш взгляд, может кто пользовался несколькими - сравните

Заранее благодарен!

Автор: andrew_121 25.3.2009, 10:57
chaos, Я использую свой вариант. Сам написал с нуля. Так как, когда мне такое понадобилось, начал искать, и нечего удовлетворяющего моим запросам не нашел.

Автор: Anikmar 25.3.2009, 10:58
Лично я так, как в основном пишу на билдере использую TIniFile.

В случаях, когда конфиг слишком сложный и неудобный для представления в текстовом виде - пишу сам, в виде набора структур.

Автор: GoldFinch 25.3.2009, 11:33
GetPrivateProfile*()

Автор: mrbrooks 25.3.2009, 11:37
как и Anikmar, пользуясь Борманом, использую TIniFiles.
Однако не гнушаюсь и БД - слишком много было данных - поэтому использовать настроечную таблицу был очень кашерный выход.

Автор: Anikmar 25.3.2009, 11:47
Цитата

mrbrooks
Однако не гнушаюсь и БД - слишком много было данных - поэтому использовать настроечную таблицу был очень кашерный выход. 


А какой? Я что-то подходящее не нашел, чтобы было небольшое и можно было вместе с программой таскать и запускать на другом компе без каких-либо дополнительных установок.

Автор: Alca 25.3.2009, 12:04
Цитата

А какой?

MDB + ADO smile

Цитата

какими либами вы пользуетесь для разбора конфигов

Под винду:
GetPrivateProfileInt
GetPrivateProfileSection
GetPrivateProfileSectionNames
GetPrivateProfileString
GetPrivateProfileStruct
GetProfileInt
GetProfileSection
GetProfileString
WritePrivateProfileSection
WritePrivateProfileString
WritePrivateProfileStruct
WriteProfileSection
WriteProfileString
....

Автор: andrew_121 25.3.2009, 12:13
Цитата(Alca @  25.3.2009,  12:04 Найти цитируемый пост)
Под винду:
GetPrivateProfileInt
GetPrivateProfileSection
GetPrivateProfileSectionNames
GetPrivateProfileString
GetPrivateProfileStruct
GetProfileInt
GetProfileSection
GetProfileString
WritePrivateProfileSection
WritePrivateProfileString
WritePrivateProfileStruct
WriteProfileSection
WriteProfileString

Крайне не удобные функции. Хоть бы обертку в виде класса написать... )))

Автор: Lazin 25.3.2009, 12:15
Цитата(chaos @  25.3.2009,  10:54 Найти цитируемый пост)
Хотелось бы узнать у обитателей данного форума: какими либами вы пользуетесь для разбора конфигов к своим приложениям
название, +- на ваш взгляд, может кто пользовался несколькими - сравните

чаще всего - реестр windows, однажды использовал lua(удобно, когда конфиги должны редактироваться юзером), БД то-же неплохой вариант

Автор: Rickert 25.3.2009, 12:17
andrew_121, +1 тож сам писал smile

Автор: Helmet 25.3.2009, 12:18
QSettings  smile 

Автор: mrbrooks 25.3.2009, 12:18
Цитата(Anikmar @  25.3.2009,  11:47 Найти цитируемый пост)
А какой? Я что-то подходящее не нашел, чтобы было небольшое и можно было вместе с программой таскать и запускать на другом компе без каких-либо дополнительных установок. 

скажем так - в данном случае настроечная таблица и была к базе данных, поэтому отдельно бд конечно не использовалась. Сама БД была на MySQL. А так хоть тот же Access. Работать будет нормально и без офиса. Это конечно под винду. Так же думаю покатит и LiteSQL. Да и что СУБД мелких мало что ли, которые не требуют инсталяции.

Автор: Andrey44 25.3.2009, 12:42
XML

Автор: andrew_121 25.3.2009, 12:44
Цитата(Andrey44 @  25.3.2009,  12:42 Найти цитируемый пост)
XML 

Да. Только если проект использует ее не только ради этого. А иначе, смысл = 0 )

Автор: Rififi 25.3.2009, 12:52
конфиги храню в xml, разбираю своим классом на базе msxml

Автор: Alca 25.3.2009, 12:54
Цитата

Крайне не удобные функции. Хоть бы обертку в виде класса написать... )))

Крайне не удобные, пока не напишешь врапер. 

Автор: azesmcar 25.3.2009, 12:55
chaos, использую то что есть в стандарте, то чего нету - пишу сам (если речь конечно идет о чистом С++). А так у каждой библиотеки свои классы (о них тут уже написано немало).

Автор: Andrey44 25.3.2009, 12:56
написал два сообщения

Автор: Alca 25.3.2009, 12:57
Чем XML лучше INI? 

Автор: Andrey44 25.3.2009, 12:57
Цитата(andrew_121 @  25.3.2009,  12:44 Найти цитируемый пост)
Да. Только если проект использует ее не только ради этого. А иначе, смысл = 0 ) 

Не совсем понял высказывание по поводу смысла. smile 

Автор: Andrey44 25.3.2009, 13:00
иксмл может иметь более вложенную структуру.

Автор: Anikmar 25.3.2009, 13:07
Лично у меня душа к XML не лежит. Не вижу никаких преимуществ для использования в качестве хранилища конфигурации.
Реестр по большей части не подходит - так как проект запускается с флешки и должен все у себя хранить.

Автор: azesmcar 25.3.2009, 13:10
Anikmar, в дот.нет есть XML серилизация, очень удобно для хранения конфигурации. Можно сразу сохранить обьект класса в файл, со всеми его данными.

Автор: Rififi 25.3.2009, 13:16
Alca
Чем XML лучше INI?  
структурированностью, возможностью жесткой валидации по схеме

Автор: Lazin 25.3.2009, 13:19
в случае использования xml, встает вопрос о сохранности данных, например в ситуации, когда во время сохранения данных в конфиг. файл отключают электричество, нажимают на reset, кончается место на диске, или происходит ошибка в программе.
В этом случае, ваш конфигурационный файл может остаться в невалидном состоянии, что может привести к невозможности запуска программы и необходимости ее переустановки.
Именно поэтому, лучше использовать БД(с поддержкой транзакций(например  sqlite)) или реестр(который именно для этого и предназначен), или изобретать велосипед, пытаясь реализовать сохранение в файл атомарно. smile 

Автор: Andrey44 25.3.2009, 13:20
Цитата(Rififi @  25.3.2009,  13:16 Найти цитируемый пост)
структурированностью, возможностью жесткой валидации по схеме 

И еще базовый синтаксис языка XPath похож на адресацию в файловой системе.
Очень легко читать и писать данные.

Добавлено через 4 минуты и 6 секунд
БД надо с собой таскать в смысле длл а xml есть всегда. По крайней мере в Windows

Автор: andrew_121 25.3.2009, 13:25
Цитата(Alca @  25.3.2009,  12:54 Найти цитируемый пост)
Крайне не удобные, пока не напишешь врапер.  

Гм... Спасибо за комментирование...
Цитата(Andrey44 @  25.3.2009,  12:57 Найти цитируемый пост)
Не совсем понял высказывание по поводу смысла. smile 

Речь идет о том, что если для разбора вы юзаете libxml2, или что-то на ее основе, и в других целях она не используется в вашем проекте, то зачем тащить за проектом такого динозавра.

Автор: Anikmar 25.3.2009, 13:26
Anikmar, в дот.нет есть XML серилизация, очень удобно для хранения конфигурации. Можно сразу сохранить обьект класса в файл, со всеми его данными.

А Framework он не потребует в нагрузку?

Автор: azesmcar 25.3.2009, 13:28
Цитата

А Framework он не потребует в нагрузку? 


потребует конечно smile
Цитата

Лично у меня душа к XML не лежит. Не вижу никаких преимуществ для использования в качестве хранилища конфигурации.

я как пример преимущества для использования в качестве хранилища конфигурации. К тому же если нужно хранить иерархические данные - XML в самый раз.

Автор: Andrey44 25.3.2009, 13:30
Цитата(andrew_121 @  25.3.2009,  13:25 Найти цитируемый пост)
Речь идет о том, что если для разбора вы юзаете libxml2, или что-то на ее основе

А если не пользуюсь ничем подобным.
Есть просто интерфейсы IXMLDOM.............. и т.д.

Автор: Rififi 25.3.2009, 13:30
Lazin
.. отключают электричество..
я вот кстати не в курсе, а что при этом будет в случае записи в реестр? Откат изменений?
вроде бы, *Transacted функции только в Vista и Server 2008 появились...

Автор: Alca 25.3.2009, 13:30
Цитата

БД надо с собой таскать в смысле длл а xml есть всегда. По крайней мере в Windows

АДО есть в винде  smile 

Автор: Anikmar 25.3.2009, 13:32
Цитата

azesmcar
я как пример преимущества для использования в качестве хранилища конфигурации. К тому же если нужно хранить иерархические данные - XML в самый раз. 


На вкус и на цвет... Подходы могут быть весьма различные. Но на этот случай у меня свой класс написан. Почему-то захотелось свое. Может, конечно, и велосипед, но не люблю xml и все тут.  smile 

Автор: Rififi 25.3.2009, 13:38
Alca
АДО есть в винде
только в случае mdb (jet engine) получаем гемор в 64-битной среде. а в наше время закрывать глаза на поддержку 64-битной платформы - это как прятать голову в песок :gigi:

Автор: mrbrooks 25.3.2009, 13:39
Цитата(Andrey44 @  25.3.2009,  13:20 Найти цитируемый пост)
БД надо с собой таскать в смысле длл а xml есть всегда

это смотря для каких.

Добавлено через 2 минуты и 5 секунд
Rififi
Цитата(Rififi @  25.3.2009,  13:38 Найти цитируемый пост)
Alca, 
только в случае mdb (jet engine) получаем гемор в 64-битной среде. а в наше время закрывать глаза на поддержку 64-битной платформы - это как прятать голову в песок :gigi: 

более того еще полно машин и с 2000 маздаем. там сплошь и рядом 3 версия Jet'a - это если без SP

Автор: Rififi 25.3.2009, 13:43
Anikmar
чисто интереса для.
как бы ты хранил в ini и доставал/записывал данные из вот такого конфига:
Код
<server>
   <mbean code="org.jboss.mq.server.jmx.Queue" name="jboss.mq.destination:service=Queue,name=tutorial">
      <attribute name="JNDIName">queue/tutorial/example</attribute>
      <depends optional-attribute-name="DestinationManager">jboss.mq:service=DestinationManager</depends>
   </mbean>
</server>

Автор: Anikmar 25.3.2009, 13:52
Цитата

Rififi
Anikmar, 
чисто интереса для.
как бы ты хранил в ini и доставал/записывал данные из вот такого конфига:


А что хранить то вообще надо (слаб я в разметке xml - каюсь)

Автор: Rififi 25.3.2009, 14:18
Anikmar
А что хранить то вообще надо
всё, что выделено синим и обычным шрифтом, то есть аттрибуты (org.jboss.mq.server.jmx.Queue, ...) и тела (queue/tutorial/example, ...) нодов (server, mbean, ...) а также их взаимное расположение друг относительно друга в иерархии

Автор: Anikmar 25.3.2009, 14:28
Т.е что-то типа того должно получиться?
[Server]
code="org.jboss.mq.server.jmx.Queue"
name="jboss.mq.destination:service=Queue,name=tutorial"
JNDIName=queue/tutorial/example
DestinationManager=jboss.mq:service=DestinationManager

Если серверов несколько можно и так:
[GENERAL]
ServerCount=4

[Server1]
... Необходимые настройки
[Server2]
... Необходимые настройки

Я не говорю, что INI это панацея. Я просто говорю, что мне не нравится xml и не было случая в моей практике, когда я бы спокойно не мог без него обойтись. Может такой случай и наступит. 
Мои конфиги как правило - прстой набор имен параметров и их значений.


Автор: andrew_121 25.3.2009, 14:42
Цитата(Andrey44 @  25.3.2009,  13:30 Найти цитируемый пост)
Есть просто интерфейсы IXMLDOM.............. и т.д. 

Прошу прощения, кодю в основном для Linux. Там такого нет.
Это что-то вроде очередной  Мелкософтовской заморочки? smile 

Автор: Rififi 25.3.2009, 15:24
andrew_121,
Это реализация парсера от ms, основанная на компонентной модели.

Добавлено через 8 минут и 28 секунд
Anikmar

Если серверов несколько
несколько может быть не только серверов, но и нодов mbean, attribute внутре нода server
тогда "плоская" модель ini-фала начинает превращаться в тихий ужас

иногда можно встретить такой workaround

server.mbean.code=...
server.mbean.name=...
...

ну, может кому-то такие телеги и нравятся... :gigi:

а потом, проверок никаких, пиши что хочешь.
например нужно число, а вписали строку.
параметр обязательный, а его пропустили.
должен быть один, а их два.

всё это самому проверять? а может просто валиться из-за неправильного парсинга? :fear:
не, нафик такое сщастие smile

Автор: inside_pointer 29.3.2009, 00:18
xml удобно для программы а не для пользователя, простые конфиги легко запоминаются, а здесь ещё надо xml знать (то есть напрямую конфиг не подредактируешь, а то что-нибудь сломается и обратно не восстановишь)

Автор: sparn 29.3.2009, 03:02
Конфиги предпочитаю хранить в виде XML, использую минималистичный парсер TinyXML. Объёмные данные  предпочитаю хранить в БД и для клиентских приложений в этих целях использую sqlite.

Автор: MAKCim 29.3.2009, 09:42
libconfig

Автор: Master01 29.3.2009, 11:57
поддерживаю вариант XML

Автор: jonie 29.3.2009, 17:09
мы используем связку XML+INI. В XML у нас сама структура конфига, и из него есть ссылки на ini - вроде макросов: "%INI:path/section/value"

почему так? потому что некоторые администраторы (да и не только они) в упор не понят все спецсимволы которые нужно экранировать в XML, да и в общем-то сложно редактировать XML.

ессно на всё это написана ООП надстройка, которая для программиста скрывает все "предести" )

Автор: semibug 31.3.2009, 22:05
XML via tinyXML

Автор: korbian 1.4.2009, 09:18
использую xml конфиг файлы. для формирования\чтения\редактирования применяю XML Archives из boost::serialization.

Автор: Alexk553 27.11.2009, 13:29
Ну, если нужна вложенность, что мешает использовать SQLite + значения типа 

уровеньвложения1/уровеньвложения2/уровеньвложения3/имяпараметра

Если приложение сложное, то дополнительные расходы на поддержку SQLite не так и заметны, а если небольшое приложение, то вложенность не нужна и можно спокойно прикрутить что-то своё с атомарной струкурой и возможностью отката, вмонтировав LZ компрессию для истории изменений типа открытого 7z. 

Автор: Abyx 27.11.2009, 18:27
планирую использовать boost.PropertyTree

Автор: djamshud 27.11.2009, 20:03
Простые храню в виде

#define key value

сложные - xml. Для обоих случаев написал простенькие парсеры.

Добавлено через 2 минуты и 50 секунд
Раньше еще пользовался чем-то похожим на .ini-файлы, с поддержкой древовидных конфигов и всяких плюшек вроде макросов и инклудов. Но там парсер получился сложный, однажды решил что-то изменить и сам запутался в собственном коде. Этот вариант конфигов вытеснил нынешний xml.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)