LINUX.ORG.RU
решено ФорумTalks

Чем парсить конфигурационные файлы?

 


2

1

Есть программа, которой нужен конфиг. Иногда надо записать что-нибудь туда же. Чем лучше развернуть такое? Подойдёт любой xml, json или е.ч.
P.s. не в development так как не сильно то и специфичный вопрос. От пользователей спрошу какую библиотеку для парсинга чаще всего встречаете?
P.p.s. пишу на C.



Последнее исправление: coyotl (всего исправлений: 1)

Бери JSON и не заморачивайся.
Только обрати внимание, чтобы парсер поддерживал комментарии. Некоторые либо вообще их не поддерживают, либо нужно включить специальную опцию.

h31 ★★★★
()

Я могу только на gambas дать свой простой парсер.

rezedent12 ☆☆☆
()
Ответ на: комментарий от coyotl

Хм, попробуй, я не пользовался, но судя по libhunt-compare он живет и развивается, что не может не радовать.

znenyegvkby
()
Ответ на: комментарий от h31

Да XML больше всего понравился PugiXML. Но во-первых, это плюсы, а во-вторых, конфиги в XML - это садизм.

h31 ★★★★
()

Если конфиги человекоредактируемые - «любой xml, json» ни в коем случае не брать. Если не хватает ini-формата, посмотри на yaml лучше или lua.

E ★★★
()

Хочешь наказать своих пользователей - бери хмл.

Хочешь быть в их глазах няшей - используй JSON.

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

takino ★★★★★
()
Ответ на: комментарий от takino

Редактировать будут вручную, значит json? Какую библиотеку посоветуешь? Чтобы освоиться быстро и была искаропки в репах слаки.

coyotl
() автор топика

если для ручного редактирования в режиме обычного текста то строковый типа ini или quake config (в геймдеве вроде сейчас популярен lua script), ни в коем случае не xml или json.
xml создан для графического отображения, а json для внутрипрограмного использования, использование обоих для текстовых конфигураций есть неправильно.

uin ★★★
()
Последнее исправление: uin (всего исправлений: 1)
Ответ на: комментарий от E

Поддерживаю. ini самый удобный и читаемый формат. А в случае, когда сложно, Lua для конфигов может выглядеть очень опрятно и читаемо.

lexazloy
()
Ответ на: комментарий от uin

xml создан для графического отображения

Именно. А популярность набрал потому что роботам нравится и потому что стримовый.

Человеку читать его ещё можно, но писать это боль.

lexazloy
()
Ответ на: комментарий от coyotl

А ну ок если нашел.
В АSS просто синтаксис более приятный

[Script Info]
; Script generated by Aegisub 3.2.2
; http://www.aegisub.org/
Title: Default Aegisub file
ScriptType: v4.00+
WrapStyle: 0
ScaledBorderAndShadow: yes
YCbCr Matrix: TV.601
PlayResX: 1920
PlayResY: 1080

uin ★★★
()
Ответ на: комментарий от alex4321

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

uin ★★★
()
Ответ на: комментарий от takino

как другой ведроидокодер говорю, что при должном умении и старании можно устроить вполне хороший ад:)

der_looser ★★
()
Ответ на: комментарий от takino

Хочешь их наказать ещё больше — используй JSON.

FFGJ — в json нет комметнариев, а это для конфига очень и очень важно.

beastie ★★★★★
()

Не советую json. Xml тоже только если нет других вариантов. Луче стандартный ini или config файл, как в линуксе в /etc/. Пользователи будут путаться с json, делать ошибки. xml не так страшен, но тоже будут путаться. Проще всего key=value, и все. И лучше два config-файла, а не один. Один тот, в который пишут пользователи, другой тот, в который пишет программа.

shimshimshim
()
Ответ на: комментарий от beastie

При генерации дефолта конфига можно добавить к каждому элементу свойство comment, например. Но да, этот момент я как то не обдумал.

takino ★★★★★
()

Если в конфиге будет много иерархических структур, то XML, иначе JSON. Просто ИМХО JSON выглядит не очень хорошо на больших однотипных структурах.

KivApple ★★★★★
()
Ответ на: комментарий от KivApple

Решается «инклудами», заодно сложный конфиг раскидывается на файлы.

unC0Rr ★★★★★
()

tinyxml, rapidxml - обе либы просты в использовании, очень быстрые и относительно небольшие.
jsoncpp - небольшая, вполне юзабельная либа. Но конфиг в json - это просто лютый ад.

andreyu ★★★★★
()
Ответ на: комментарий от coyotl

Чем парсить ini?

Для плюсов я писал свой парсер. Там полторы с половиной строки кода. Работы на пол часа.

andreyu ★★★★★
()
Ответ на: комментарий от coyotl

а без ненужнокутей.

Даже если ты не используешь Qt, тебе никто не мешает попробовать как работают файлы конфигураций в нём. Главный момент на который стоит обратить внимание, это то что конфигурационные данные могут храниться в разных файлах с переназначением параметров (например, /etc/myprogram & $HOME/.config/myprogram)

AlexVR ★★★★★
()

Собрался с силами и почистил старый говнокод для чтения / записи ini-файлов:
https://bitbucket.org/andreyu/ini-file

Из особенностей:
- Сохраняет структуру исходного ini-файла при его изменении и последующей записи.
- Понимает пустые строки и комментарии ";".
- Для чтения / записи принимает на вход «абстракцию» cFile.
- Умеет удалять ключи.

andreyu ★★★★★
()
Ответ на: комментарий от coyotl

Жаль что c++

Заменить std::vector на свой список несложно.

andreyu ★★★★★
()

Bison / peg. Не мучай пользователей позязя.

kirk_johnson ★☆
()
Ответ на: комментарий от shimshimshim

Не кажется ли тебе что второй конфиг это просто сброс состояния на диск, а не второй конфиг?

deep-purple ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.