Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
Форум программистов > 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 | ||
А какой? Я что-то подходящее не нашел, чтобы было небольшое и можно было вместе с программой таскать и запускать на другом компе без каких-либо дополнительных установок. |
Автор: Alca 25.3.2009, 12:04 | ||||
MDB + ADO ![]()
Под винду: GetPrivateProfileInt GetPrivateProfileSection GetPrivateProfileSectionNames GetPrivateProfileString GetPrivateProfileStruct GetProfileInt GetProfileSection GetProfileString WritePrivateProfileSection WritePrivateProfileString WritePrivateProfileStruct WriteProfileSection WriteProfileString .... |
Автор: Lazin 25.3.2009, 12:15 | ||
чаще всего - реестр windows, однажды использовал lua(удобно, когда конфиги должны редактироваться юзером), БД то-же неплохой вариант |
Автор: Rickert 25.3.2009, 12:17 |
andrew_121, +1 тож сам писал ![]() |
Автор: Helmet 25.3.2009, 12:18 |
QSettings ![]() |
Автор: mrbrooks 25.3.2009, 12:18 | ||
скажем так - в данном случае настроечная таблица и была к базе данных, поэтому отдельно бд конечно не использовалась. Сама БД была на MySQL. А так хоть тот же Access. Работать будет нормально и без офиса. Это конечно под винду. Так же думаю покатит и LiteSQL. Да и что СУБД мелких мало что ли, которые не требуют инсталяции. |
Автор: Andrey44 25.3.2009, 12:42 |
XML |
Автор: andrew_121 25.3.2009, 12:44 |
Да. Только если проект использует ее не только ради этого. А иначе, смысл = 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 | ||
Не совсем понял высказывание по поводу смысла. ![]() |
Автор: 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)) или реестр(который именно для этого и предназначен), или изобретать велосипед, пытаясь реализовать сохранение в файл атомарно. ![]() |
Автор: Andrey44 25.3.2009, 13:20 |
И еще базовый синтаксис языка XPath похож на адресацию в файловой системе. Очень легко читать и писать данные. Добавлено через 4 минуты и 6 секунд БД надо с собой таскать в смысле длл а xml есть всегда. По крайней мере в Windows |
Автор: andrew_121 25.3.2009, 13:25 |
Гм... Спасибо за комментирование... Речь идет о том, что если для разбора вы юзаете libxml2, или что-то на ее основе, и в других целях она не используется в вашем проекте, то зачем тащить за проектом такого динозавра. |
Автор: Anikmar 25.3.2009, 13:26 |
Anikmar, в дот.нет есть XML серилизация, очень удобно для хранения конфигурации. Можно сразу сохранить обьект класса в файл, со всеми его данными. А Framework он не потребует в нагрузку? |
Автор: azesmcar 25.3.2009, 13:28 | ||||
потребует конечно ![]()
я как пример преимущества для использования в качестве хранилища конфигурации. К тому же если нужно хранить иерархические данные - XML в самый раз. |
Автор: Andrey44 25.3.2009, 13:30 | ||
А если не пользуюсь ничем подобным. Есть просто интерфейсы IXMLDOM.............. и т.д. |
Автор: Rififi 25.3.2009, 13:30 |
Lazin, .. отключают электричество.. я вот кстати не в курсе, а что при этом будет в случае записи в реестр? Откат изменений? вроде бы, *Transacted функции только в Vista и Server 2008 появились... |
Автор: Alca 25.3.2009, 13:30 | ||
АДО есть в винде ![]() |
Автор: Anikmar 25.3.2009, 13:32 | ||
На вкус и на цвет... Подходы могут быть весьма различные. Но на этот случай у меня свой класс написан. Почему-то захотелось свое. Может, конечно, и велосипед, но не люблю xml и все тут. ![]() |
Автор: Rififi 25.3.2009, 13:38 |
Alca, АДО есть в винде только в случае mdb (jet engine) получаем гемор в 64-битной среде. а в наше время закрывать глаза на поддержку 64-битной платформы - это как прятать голову в песок :gigi: |
Автор: mrbrooks 25.3.2009, 13:39 | ||
это смотря для каких. Добавлено через 2 минуты и 5 секунд Rififi,
более того еще полно машин и с 2000 маздаем. там сплошь и рядом 3 версия Jet'a - это если без SP |
Автор: Rififi 25.3.2009, 13:43 | ||
Anikmar, чисто интереса для. как бы ты хранил в ini и доставал/записывал данные из вот такого конфига:
|
Автор: Anikmar 25.3.2009, 13:52 | ||
А что хранить то вообще надо (слаб я в разметке 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 |
Прошу прощения, кодю в основном для Linux. Там такого нет. Это что-то вроде очередной Мелкософтовской заморочки? ![]() |
Автор: 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: не, нафик такое сщастие ![]() |
Автор: 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. |