LINUX.ORG.RU

Без шума и пыли вышла очередная версия кроссплатформенной библиотеки libconfig 1.1.2


0

0

Почему-то на ЛОР мало упоминаний о данной библиотеке. Но я лично использовал ее в нескольких кроссплатформенных проектах и считаю, что она очень проста, удобна в использовании и достойна внимания сообщества ЛОРа :)

Libconfig - простая библиотека для обработки структурированных файлов конфигурации. Этот формат является более компактным и более удобным, чем XML (ознакомится с ним можно на сайте проекта).

Библиотека содержит заголовки для обоих C и C++ языков программирования. Ее можно использовать на POSIX-совместимых UNIX системах (GNU / Linux, Mac OS X, Solaris, FreeBSD) и Windows (2000, XP и выше).

Лицензия: LGPL

>>> Сайт проекта

Ответ на: комментарий от lester

> А по существу, мне 23 года, но программистом я себя считаю неплохим

"Будучи в вашем возрасте, я говорил о себе "Я". Двадцати пяти лет говорил: "Я и Моцарт". В сорок лет: "Моцарт и я". А теперь говорю тихонько: "Моцарт"…" (с)

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

>и как ни странно я бы посоветовал взять за основу .ini файлы

Ага. У них нет никакой проблемы с кодировками, разбинением, валидацией и т.д. Ты их в /etc много видел?

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

>Загляни в xorg.conf и скажи, что он - неструктурированный. А подобных конфигов - тьма.

И чем млять они отличаются от XML?

>И опять же, что лечге восстановить - испорченный XML или plain text?

Ты таки не понимаешь что такое plain text. Ты не путаешь "text" и "PLAIN text"? Или это ты лично решил что xorg.conf это plain text а xml нет? XML и формат xorg.conf форматы одного типа - с тегами, закрывающими тегами и параметрами значениями. Они оба _структурированы_. Оба разбираются _специализированным парсероем_. Оба херятся при нарушении структуры.

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

>
<?xml version="1.0" encoding="utf-8" standalone="no"?>
<!DOCTYPE trd01 SYSTEM "trd01.dtd">
<trd01 
  id="10234"
  trade_type="equity"
  trade_date="2005-02-21T18:57:39"
  instrument="IBM"
  value="10000"
  trade_ccy="usd">
  <settlement_info
    settle_date="2005-02-21T18:57:39"
    settle_ccy="usd"
  />
</trd01>

>уважаемый, а вы уверены что это xml? признаться, меня терзают 
смутные сомненья ....

И в чём же сомнения? Абсолютно правильный XML. Просветите убогого где я фраернулся?

dimag
()
Ответ на: комментарий от anonymous

>Тогда объясните мне, что имеют виду авторы прог типа xml2text, html2text, text2html..., ставя слово text рядом с таким же специфическим по значимости, но обозначающим одно и то же сокращении ?

Покури mime-type и посмотри text/*. и plain и xml оба text.

А по поводу афтаров указанных тобой прог - покури сначала что они делают. Уж не говоря о том что xml2text - это вообще тавоя фантазия.

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

> Хотите я сделаю видеоролик, в котором вы сношаетесь с рогатым скотом?

вы снимите сцену с собой в главной роли, а потом попытаетесь прилепить лицо из аватара?

> Исходники выкладывайте - посмотрим.

я пока использую наш сервер БД для хранения данных, потому вам не получится запустить программу, позже я переведу ее на sqlite

вот видеоролик, тут приведена малая чать, того что уже есть: http://www.meetfile.com/files/31594/untitled.avi.html

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

>предлагаешь так всем поступать? я, например, не хочу тратить время на столь бесполезное занятие, я проще буду пользоваться тем же libconfig,

Ты гонишь. Ты что совсем из-за своей красноглазости не видишь что libconfig такой же жесткий формат как и XML? fstab у тебя загрузится только потому что обрабатывается _построчно_ и все что не парситсья можно скипнуть. Ты рискнешь так-же сделать конфиг файрвола на тему скипанья того что не понял парсер?

Если ты епо твоему же примеру "очепятаешься" в xorg.conf или в этой libconfig - у тебя херподнимется программа. Потому что конфиг там имеет четкую структуру и синтаксис.

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

>Формально, возможно, и попадает, но фактически - нет.

Да тебе памятник надо поставить с таким аналитическим мышлением. Динозавра ты встречаешь тоже по принципу "формально можно фактически нет" по утрам?

>Т.е. plain (чистый, прозрачный) текст означает, что он может быть понят любым человеком, умеющим читать.

Тогда учись читать, если тебе непонятен xml.

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

>Определение и оставшийся текст противоречат друг другу. КГАМ.

Именно. ТАм дальше есть ссылки на formatted текст и т.д. В определении значится что plain text - это текст не содержащий формальной разметки и структуры. Любой конфиг имеет формальную структуру и содержит разметку.

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

я гоню потому что не хочу делать так: "создам собственый диалект XML для конкретного конфига и XSLT конвертор в нативный конфиг, напишу XSD схему для выявления очипяток. И буду коррективы вносить в XML редакторе с проверкой на валидность"???

работа с конфигом не должна вообще занимать много времени, при работе с xml больше времени потратишь на написание конфига к программе чем на саму программу.

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

>[рецепт] ингридиент1=айца Skull ингридиент2=пустая черепная коробка ингридиент3=соли по вкусу

Вот тебе пример от лора: Давай парень - пиши парсер - я посмобрю как ты этот формат разберешь.

Что форматирование потерялось да? Структура нарушилась? Обламайся - то же самой с XML не приведет к порче конфига.

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

>То есть XML не plain text. А в конфигах именно он.

Пример логики - на пять балов. Если вася сказал - начит не xml.

Бери xorg.conf и перечисляй списки признаков чем он будет отличаться от аналогичного конфига на XML.

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

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

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

таких средств как eclipse полным полно, просто им пользуются фанаты явы и xml, только потому что она их использует, xCode, VC 2005, Kdevelop, CodeWarrior и подобные намного лучше

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

>И чем млять они отличаются от XML?

Попробуй спросить у своей жены. Или у друзей-некомпьютерщиков. Здешних ты не понимаешь.

>Оба херятся при нарушении структуры.

В Xorg.conf минимум, хм, "тегов". Основная информация - имя_переменной значение_переменной. Такого структурированного XML в современных конфигах ты не найдёшь. Ибо XML можно извратить, а plain text... ну хорошо, tabbed formating text - нет.

anonymous
()
Ответ на: комментарий от lester

>я гоню потому что не хочу делать так:

Ты гонишь потому что видишь принципиальную разницу между:

application:
{
window:
{
width = 20;
height = 20;
}
}

и

<application>
<window width="20" height="40"/>
</application>

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

перелопать все сообщения по этой теме и ты не найдешь там того что я поддерживаю первый вариант, я бы написал так:

[Application/Window] Width = 20 Height = 40

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

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

По твоему XML пасят ручками? Там уже либ и тулзеней столько что этой либе как до неба.

>то если я в xml вместо < поставлю (

Поставь в libconfig вместо "{" -> "(" и я на тебя посмотрю. Или возми в xorg.conf похерь закрывающий таг. Или забудь написать славное слово Option и т.д.

Просто фантастика.

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

> По твоему XML пасят ручками?

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

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

А написать

Application

 window 

   width=       20 
   height=      40

EndApplication


и красивее и проще. Не говоря уж о том, что для <> нужно Shift жать.

Аналоги на XML будут?

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

>Такого структурированного XML в современных конфигах ты не найдёшь. Ибо XML можно извратить, а plain text... ну хорошо, tabbed formating text - нет.

Да да... Таблица неизвратима... Запихни ка ты в таблицу дерево (не просто дерево, а большое и ветвистое) и посмотри что получится...

Как говорится, флаг в руки и древко в другое место...

SV0L0CH
()
Ответ на: комментарий от lester

>[Application/Window] Width = 20 Height = 40

Даже и не сомневаюсть. Тебе как писателю гуя должно быть интересно - усложняем MDI интерфейс окна создаются пользователем, их расположение и размер сохраняется - вперед, нарисуй файл для 3х окон A,B,C и опиши как ты восстановишь их положение из INI файла.

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

пилять было... теперь значит песец... читай выше - xCode, CodeWarrior и KDevelop - то на чем я сейчас пишу под мак и линукс соответсвенно, вы же так долго смеялись над этими назаниями, а теперь забыли?

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

>В Xorg.conf минимум, хм, "тегов".

Ого. Сколько это миниму?

Section "InputDevice" 
   Driver "kbd" 
   Identifier "Keyboard[0]" 
   Option "Protocol" "Standard" 
   Option "XkbLayout" "us,ru" 
   Option "XkbModel" "pc105" 
   Option "XkbOptions" "grp:alt_shift_toggle,grp_led:scroll" 
   Option "XkbRules" "xfree86" 
   Option "XkbVariant" ",winkeys" 
EndSection

оно же:

<Section name="InputDevice" Driver="kbd" Identifier="Keyboard[0]">
    <Option name="Protocol">Standard</Option> 
    <Option name="XkbLayout">us,ru</Option> 
    <Option name="XkbModel">pc105</Option> 
    <Option name="XkbOptions">grp:alt_shift_toggle,grp_led:scroll</Option>
; </Section>

Это так в лоб. Реально туда можно было бы засунать еще более четский и структурированный XML например:

<kbd:keyboard xmlns:kbd="http://freedesktop.org/ns/kbd";; 
   id="Keyboard[0]" 
   protocol="Standard" 
   model="pc105" 
   rules="Xfree86"> 
   <kbd:layouts group="alt_shift_toggle" led="scroll"> 
     <kbd:layout name="ru"/> 
     <kbd:layout name="en"/> 
   </kbd:layouts> 
</kbd:keyboard>

Что бы это дало - возможность четкого подключения конкретных устройств
 в отдельном неймспейсе, валидация по этому неймспейсу, комплишен в 
любом XML редакторе параметров, которыми параметризуется данное 
устройство, проверку валидности _значений параметров_ устройства (а не
 запихиваем "Buttons" в kb из мыши и радуемся) и тд. Нихрена этого в 
xorg.conf нет и невозможно. 

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

>> По твоему XML пасят ручками?

>пилять... устал повторять... чтоб записать( прочитать ) значение в xml ты должен написать прослойку для парсера xml, это большой кусок кода, который выглядит почти как сам xml - такой же нечитаемый и большой, и изменять его это лишний геморой, тем более при увеличении вложенности и количества значений код становится все более ужасным

Ну тут в очередной раз стало понятно почему ты не любиш XML... Банально не умееш его готовить... ;)

Кури expat и libxml, при грамотном подходе код парсинга может уложится в пару десятков строк. (хотя, я смотрю, грамотного подхода придётся ждать долго)

SV0L0CH
()
Ответ на: комментарий от lester

>вы же так долго смеялись над этими назаниями, а теперь забыли?

Тада вопросов нет. По сравнению с этим ужасом - конечно.

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

Это у тебя дистр такой, что формат у Xorg лажовый? 



Section "InputDevice" 
          Driver                         "kbd" 
          Identifier                     "Keyboard[0]" 
          Option         "Protocol"      "Standard" 
          Option         "XkbLayout"     "us,ru" 
          Option         "XkbModel"      "pc105" 
          Option         "XkbOptions"    "grp:alt_shift_toggle" 
          Option         "XkbRules"      "xfree86" 
          Option         "XkbVariant"    ",winkeys" 
EndSection


Вот так. В таком виде приятно читать.

Аналог на XML?

anonymous
()
Ответ на: комментарий от r

.ini файл

[Window1]

Width = 20 Height = 40

[Window2]

Width = 20 Height = 40

[Window3]

Width = 20 Height = 40

код на с++

wxFileConfig config( _("MyApp") );

config.SetPath( _("/Window1") ); Window1.SetSize( config.ReadInt( _("Width") ), config.ReadInt( _("Height") );

config.SetPath( _("/Window2") ); Window2.SetSize( config.ReadInt( _("Width") ), config.ReadInt( _("Height") );

config.SetPath( _("/Window3") ); Window3.SetSize( config.ReadInt( _("Width") ), config.ReadInt( _("Height") );

пример того же на xml?

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

примеры в студию, именно секс с expat заставил меня отказаться от xml, если есть более простые варианты хотельсь бы на них посмотреть

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

>пример того же на xml?

Ты условия задачи внимательно читал? Окна создает _пользователь_ (MDI). Это значит что их имена - динамические и появляются в процессе работы программы.

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

>Примеры программ, где нужны деревья, и их место среди оставшихся в студию!

Для конфигурирования сетевых приложений, в том числе того же Apache деревья подходят как нельзя лутше. Про гибкую настройку приложений с GUI можно даже не говорить, оно и так очевидно. Различного рода фильтры тоже удобно конфигурировать на основе вложеных правил, а значит деревъев.

SV0L0CH
()
Ответ на: комментарий от r

какая нафик разница? это к формату конфига и то как его читать отношения не имеет, ну если ты хочешь:

wxFileConfig config( _("MyApp") );

config.SetPath( Window1->GetName() ); Window1->SetSize( config.ReadInt( _("Width") ), config.ReadInt( _("Height") );

config.SetPath( Window2->GetName() ); Window2->SetSize( config.ReadInt( _("Width") ), config.ReadInt( _("Height") );

config.SetPath( Window3->GetName() ); Window3->SetSize( config.ReadInt( _("Width") ), config.ReadInt( _("Height") );

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

Место данных приложений среди всего их разнообразия? Особенно на десктопе продвинутого пользователя?

anonymous
()
Ответ на: комментарий от lester

>примеры в студию, 

Пишется за пол часа обертка (обобщенная конфигурационная либа) с апи типа:

config.getInt("/any/xpath/here")

config.set("/any/xpath/here", "value");

фсе.

Твоя задача с окрами решается так:

windows = config.getList("/application/window");

foreach(win in windows) 
   app.getWindow(config.getString(win,"@name"))
   .setBounds(
      config.getInt(win,"@width"), 
      config.getInt(win,"@height"));

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

>Динозавра ты встречаешь тоже по принципу "формально можно фактически нет" по утрам?

Именно.

>Тогда учись читать, если тебе непонятен xml.

Передергивать в туалете будешь.

anonymous
()
Ответ на: комментарий от lester

>а на с++? мы же спорим по поводу libconfig

Да так же само. Тут фишка в чем: в DOM - в который разобран конфиг, и в XPath - который охренительный инструмент для поиска и адресации данных в дереве. Берешь libxml2 и пишешь такую обертку.

libconfig имеет совершенно аналогичное API только более бедное - его path понимает только значения через ".". То есть это просто аналог JSON (как я написал в самых первых постах) только чуть чуть отличается. А JSON не отличается от XML по идеологии - есть общие сериализаторы/десериализаторы у которых формат JSON/XML опционально.

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

>Разницу между лором и конфигом чуешь?

Я чувствую что лор тебе своим конфигом не победить:)

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