LINUX.ORG.RU

TinyXML есть ли альтернатива?


0

1

ЯЗЫК C++

Нужна простая библа облегчающая создания конфигурационных файлов для проги, например такой файл конфига:

[config]

number scene = 2

man live = 30

move speed = 5'

[end]

С помощью которой можно будет легко считать данные с такого конфига и записать в него их. TinyXML не хочется из-за каши тегов в хмл файлах, нужно чтоб файл почище был, попроще для зрительного восприятия, можно txt (формат в принципе не важен). Есть ли что подобное?



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

все «посоны» давно используют yaml для конфигов, это быстро просто и невербозно

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

Нет, libconfig не подходит так как она не кроссплатформенная я так понимаю? QSettings то же, потому что кьютешная.

Есть, но с нюансами ))

Это ява, нужно что то сиплюсное.

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

> libconfig не подходит так как она не кроссплатформенная я так понимаю?

«It works on POSIX-compliant UNIX systems (GNU/Linux, Mac OS X, Solaris, FreeBSD) and Windows (2000, XP and later)»

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

Ага, почитал :) Тогда да, подходит.

все «посоны» давно используют yaml для конфигов

Тоже вроде штука интересная, посмотрим.

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

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

json же

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

>/0

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

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

>ЯЗЫК C++
>XML
>кроссплатформенная

попробуй pugixml!

beka
()
Ответ на: комментарий от gaga
        typedef std::map < std::string, std::string > section_t;
        typedef std::map < std::string, section_t > data_t;

        data_t data;

#define BUF_SZ 4096
        char buf[BUF_SZ];
        char section[BUF_SZ];
        const char * sep = " =\t";
        char * comment;

        section_t * cur = 0;

        while (fgets (buf, BUF_SZ, f) )
        {
                if (sscanf (buf, "[%4000s]", section) == 1)
                {
                        section[strlen (section) - 1] = 0;
                        //fprintf(stderr, "section -> %s\n", section);
                        cur = &data[section];
                }
                else if (*buf == '#' || *buf == ';')
                {
                        continue;
                }
                else if (cur)
                {
                        char * k = 0, * v = 0;
                        if (buf[strlen(buf) - 1] == '\n') buf[strlen(buf) - 1] = 0;
                        if (buf[strlen(buf) - 1] == '\r') buf[strlen(buf) - 1] = 0;
                        comment = strstr(buf, ";");
                        if (comment) {
                                *comment = 0;
                        }

                        k = strtok (buf, sep);
                        v = strtok (0, sep);

                        //fprintf(stderr, "%s:%s\n", k, v);
                        if (k && v)
                        {
                                (*cur) [k] = v;
                        }
                }
        }
Reset ★★★★★
()
Ответ на: комментарий от note173

У меня 285. Но там еще навернута возможность задавать структуру конфига, соответственно валидация структуры, rewrite всех опций из командной строки и прочие полезные вещи. А сам разбор в map < string, map <string, string> > тривиален.

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

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

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

Собственно, для этого и изобрели библиотеки.

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

Вот с записью и проверкой у тебя уже почти 300 строк, добавь еще 300 на разные типы данных и прочее

Нет, 285 строк у меня со всем. И с проверкой и с разными типами данных.

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

Он не глючный, а 100% рабочий и оттестированный. И, что самое главное, работает так как мне нужно, а не так как решил чужой дядя. И работает везде и не тянет лишних зависимостей.

Собственно, для этого и изобрели библиотеки.

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

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

и оттестированный

Любопытно глянуть на юниттесты.

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