PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Suche Linux Klasse für Konfigurationen ein ....



undefined
14-05-2005, 15:55
Ich suche für Linux eine Klasse die mir dabei behilflich ist Konfiguration Dateien einzulesen. Für gewöhnlich ist in Linux der Syntax einer Config wie im Code dargestellt. Ich weiß jetzt nicht ob es dafür unter Linux vorgefertigte Methoden oder Klassen gibt. Für einen Tip währe ich dankbar. ;)


# Kommentar
vari=wert


Mein Anwendung basiert C++ mit Kde/Qt

peschmae
14-05-2005, 20:35
In Qt gibts genau dafür die Klasse QSettings.

MfG Peschmä

panzi
14-05-2005, 21:53
Hab da auch mal was geschrieben. In C (nicht C++) und auch nur weil mir langweilig war. Denn wie gesagt, es gibt schon genug APIs dafür (z.B. in Qt).
Aber wenns't eine Lösung haben wills't, die nur von ANSI-C abhängig ist, dann ist meine Lösung vieleicht was für dich. ;)
Also was ich schrieb, setzt sich aus 3 Sachen zusammen: Einen String-Puffer, einen AVL-Baum und einen Config-Parser, der die beiden anderen Sachen verwendet.
In conf/example.c siehs't wie man's verwendet. Es kann natürlich nur Strings als Typ der gespeicherten Werte. Eine Config-Datei kann so ausschaun:

# Kommentar
[gruppe1]
option1 = "foo bar"
option2 = foo

[gruppe2]
bla = bla
bleh = "bleh"

# etc.


Hmm, da fällt mir auf, Optionen, die in keiner Gruppe sind, werden von mir nicht unterstüzt. Vieleicht mach ich das noch.

panzi
14-05-2005, 22:26
Ok, hab's jetzt um den Support für globale Optionen erweitert. :)

undefined
14-05-2005, 23:00
@peschmae
Genau das habe ich gesucht, manchmal ist man blind, ich habe ständig unter config gesucht.

@panzi
Wenn du mit Gruppen arbeitest sie dir mal unter KDE die KConfigSkeleton an. ;)

panzi
14-05-2005, 23:16
@panzi
Wenn du mit Gruppen arbeitest sie dir mal unter KDE die KConfigSkeleton an. ;)
Ich brauch sowas eigentlich garnicht. Mir war einfach wieder nur mal faad. ;)

anda_skoa
15-05-2005, 10:53
Ich weiß jetzt nicht ob es dafür unter Linux vorgefertigte Methoden oder Klassen gibt. Für einen Tip währe ich dankbar. ;)

Mein Anwendung basiert C++ mit Kde/Qt

KConfig bzw KSimpleConfig

Ciao,
_

Joghurt
15-05-2005, 14:07
http://www.boost.org/doc/html/program_options.html

undefined
17-05-2005, 11:23
Also irgendwie bekomme ich es nicht gebacken. Ich habe Sicherlich einen Denkfehler. Weder KSimpleConfig noch QSettings geben mir einen Wert zurück.


void Konfiguration::startRead( QString& i )
{
QMap<QString, QString> item = entryMap( QString::null );
kdDebug() << "KSimpleConfig: " << i << " => " << item[i] << endl;

QSettings settings;
settings.resetGroup();
QString Eintrag = settings.readEntry( "/etc/mplayer.conf", i );
kdDebug() << "QSettings: " << Eintrag << endl;
}


[EDIT]
PS: Wenn ich in die mplayer.conf ein Gruppentag einfüge Funktioniert es.

mfg undefined

anda_skoa
17-05-2005, 16:37
QSettings kannst dir schenken, das geht nur auf Dateien in .qt/

KSimpleConfig sollte glaub ich schon gehen, die Defaultgroup sollte für mplayer.conf passen

Ciao,
_

undefined
18-05-2005, 07:14
Leider nein, ich habe jetzt auch in der Online Doku gefunden das KConfig expliziet eine Gruppen Angabe benötigt. Habe es jetzt anders gemacht in dem ich eine Temporäre config erstelle in diese ein Gruppen Tag einfüge, damit geht es jetzt. Schade - werde mich mal bei Gelegenheit hinsetzen und mir eine Klasse für so etwas schreiben.

panzi
18-05-2005, 16:27
Leider nein, ich habe jetzt auch in der Online Doku gefunden das KConfig expliziet eine Gruppen Angabe benötigt. Habe es jetzt anders gemacht in dem ich eine Temporäre config erstelle in diese ein Gruppen Tag einfüge, damit geht es jetzt. Schade - werde mich mal bei Gelegenheit hinsetzen und mir eine Klasse für so etwas schreiben.
Oder verwende meine. ;)
Bzw. portier Sie nach C++.
Da musst eingentlich nur mehr einen Parser schreiben, speichern kannst es in einer std::map< std::string, std::map< std::string, std::string> >. Hmm, die Globalen sachen speichere dann halt unter der Gruppe "" oder so. Oder mach ne Klasse:

class Config {
public:
std::map< std::string, std::map< std::string, std::string> > groups;
std::map< std::string, std::string > globals;
};