C++Talk.NET Forum Index C++Talk.NET
C++ language newsgroups
 
Archives   FAQFAQ   SearchSearch   MemberlistMemberlist   UsergroupsUsergroups   RegisterRegister 
 ProfileProfile   Log in to check your private messagesLog in to check your private messages   Log inLog in 

Konfigurationsdatei lesen/schreiben

 
Post new topic   Reply to topic    C++Talk.NET Forum Index -> C++ (German)
View previous topic :: View next topic  
Author Message
Steffen Wendzel
Guest





PostPosted: Thu Oct 28, 2004 6:04 pm    Post subject: Konfigurationsdatei lesen/schreiben Reply with quote



Hallo.

Welche möglichkeit ist die beste für das Auslesen und Schreiben von
ASCII-Konfigurationsdateien?

Bisher hatte ich unter C mit Flex und Bison gearbeitet um
Konfigurationsdateien auszulesen, soweit ich weiß funktioniert dies
unter BSD allerdings nicht mit C++ (bzw. nur mit Software die
niemand in den Ports hat).

Ich stelle mir eine Konfigurationsdatei in etwa folgendermaßen vor:

Variable: Stringwert
VariableY: 391

Gibt es dafür eine bessere Möglichkeit als die Formatierte Ein-/Aus-
gabe über Formastring-Funktionen und anschl. Stringcompare um den
Typ der Variable heraus zu bekommen?

Oder gibt es evtl. auch eine ganz andere Möglichkeit zur Handhabung
von Konfigurationsdateien?

Steffen

--
de.comp.lang.iso-c++ - Moderation: mailto:voyager+mod (AT) bud (DOT) prima.de
FAQ: http://www.voyager.prima.de/cpp/ mailto:voyager+send-faq (AT) bud (DOT) prima.de
Back to top
Andreas Volz
Guest





PostPosted: Thu Oct 28, 2004 6:42 pm    Post subject: Re: Konfigurationsdatei lesen/schreiben Reply with quote



Am Thu, 28 Oct 2004 20:04:37 +0200 schrieb Steffen Wendzel:

Quote:
Welche möglichkeit ist die beste für das Auslesen und Schreiben von
ASCII-Konfigurationsdateien?

Die beste? Gibt es das? Naja, aber eine ganz gute kenne ich schon. Läuft
unter Windows und Linux.

http://cvs.berlios.de/cgi-bin/viewcvs.cgi/unimatrix-fulda/utl/

src/InitFileParser.cpp / include/InitFileParser.h

bzw. das ganze Paket:
https://developer.berlios.de/project/showfiles.php?group_id=788&release_id=3591

Ist aber schon recht mächtig und hat viele Optionen für Einheiten die
nicht immer benötigt werden. Für ganz einfachen Sachen mache ich es
immer mit scanf. Bitte haut mich nicht dafür, ich komm eher von C her.
Wie wäre der saubere Weg in C++?

Gruß
Andreas

--
de.comp.lang.iso-c++ - Moderation: mailto:voyager+mod (AT) bud (DOT) prima.de
FAQ: http://www.voyager.prima.de/cpp/ mailto:voyager+send-faq (AT) bud (DOT) prima.de

Back to top
Martin Winkler
Guest





PostPosted: Thu Oct 28, 2004 7:12 pm    Post subject: Re: Konfigurationsdatei lesen/schreiben Reply with quote



Steffen Wendzel wrote:

Quote:
Hallo.

Welche möglichkeit ist die beste für das Auslesen und Schreiben von
ASCII-Konfigurationsdateien?

Bisher hatte ich unter C mit Flex und Bison gearbeitet um
Konfigurationsdateien auszulesen, soweit ich weiß funktioniert dies
unter BSD allerdings nicht mit C++ (bzw. nur mit Software die
niemand in den Ports hat).

Ich kenne mich zwar mit BSD nicht aus - aber es ist eine Eigenschaft von C++
(by Design), auch C-Bibliotheken verwenden zu können. Falls die dir dort
vorliegenden Headerdateien nicht für C++ vorbereitet sind, steht dir immer
noch die Möglichkeit offen, in deinem C++-Programm folgendes zu tun:

extern "C"
{
#include <irgendein_reiner_C_Header.h>
#include <noch_ein_reiner_C_Header.h>
}
int main()
{
// hier solltest du dann die Funktionen der verwendeten C-Bibliotheken
// munter verwenden können.
// Linken der Libs nicht vergessen - aber das mußt du unter C auch!
}

Quote:

Ich stelle mir eine Konfigurationsdatei in etwa folgendermaßen vor:

Variable: Stringwert
VariableY: 391

Gibt es dafür eine bessere Möglichkeit als die Formatierte Ein-/Aus-
gabe über Formastring-Funktionen und anschl. Stringcompare um den
Typ der Variable heraus zu bekommen?

Klar, selber programmieren geht immer.

Quote:

Oder gibt es evtl. auch eine ganz andere Möglichkeit zur Handhabung
von Konfigurationsdateien?

Tausende...

Gruß
Martin

--
de.comp.lang.iso-c++ - Moderation: mailto:voyager+mod (AT) bud (DOT) prima.de
FAQ: http://www.voyager.prima.de/cpp/ mailto:voyager+send-faq (AT) bud (DOT) prima.de

Back to top
Bjoern Bosselmann
Guest





PostPosted: Thu Oct 28, 2004 7:38 pm    Post subject: Re: Konfigurationsdatei lesen/schreiben Reply with quote

Steffen Wendzel schrieb:
Quote:
Hallo.

Hallo,

Quote:
Welche möglichkeit ist die beste für das Auslesen und Schreiben von
ASCII-Konfigurationsdateien?

Mit einem std::fstream? ;-)

Quote:
Ich stelle mir eine Konfigurationsdatei in etwa folgendermaßen vor:

Variable: Stringwert
VariableY: 391

Gibt es dafür eine bessere Möglichkeit als die Formatierte Ein-/Aus-
gabe über Formastring-Funktionen und anschl. Stringcompare um den
Typ der Variable heraus zu bekommen?

Oder gibt es evtl. auch eine ganz andere Möglichkeit zur Handhabung
von Konfigurationsdateien?

Eine Möglichkeit wäre, die Konfigurationsdatei mit einem Parser zu
behandeln. Mit Spirit (http://www.boost.org) zum Beispiel hast du eine
Möglichkeit, einen solchen in C++ zu bauen. Vielleicht kannst du damit
dein Ziel erreichen.

Björn

--
de.comp.lang.iso-c++ - Moderation: mailto:voyager+mod (AT) bud (DOT) prima.de
FAQ: http://www.voyager.prima.de/cpp/ mailto:voyager+send-faq (AT) bud (DOT) prima.de

Back to top
Nicolas Pavlidis
Guest





PostPosted: Thu Oct 28, 2004 7:59 pm    Post subject: Re: Konfigurationsdatei lesen/schreiben Reply with quote

Steffen Wendzel wrote:
Quote:
Hallo.

Welche möglichkeit ist die beste für das Auslesen und Schreiben von
ASCII-Konfigurationsdateien?

Bisher hatte ich unter C mit Flex und Bison gearbeitet um
Konfigurationsdateien auszulesen, soweit ich weiß funktioniert dies
unter BSD allerdings nicht mit C++ (bzw. nur mit Software die
niemand in den Ports hat).

Ich weisz nicht genau wie Bison und aehnliche Tools arbeiten, aber man
braucht sie doch nicht auf der Zielplattform oder? Du musst ja den
Parser nur einmal dir generieren lassen, wo mit du den generierten Code
ja auch im C++ Programm verweden kannst.

Quote:
Ich stelle mir eine Konfigurationsdatei in etwa folgendermaßen vor:

Variable: Stringwert
VariableY: 391

Du koenntest auch mit normalen Streams arbeiten, und das was du bekommst
dann parsen.

Quote:
Gibt es dafür eine bessere Möglichkeit als die Formatierte Ein-/Aus-
gabe über Formastring-Funktionen und anschl. Stringcompare um den
Typ der Variable heraus zu bekommen?

s.o.

Quote:
Oder gibt es evtl. auch eine ganz andere Möglichkeit zur Handhabung
von Konfigurationsdateien?

Naja, einlesen musst sie ja immer :-)

LG
Nicolas

--
de.comp.lang.iso-c++ - Moderation: mailto:voyager+mod (AT) bud (DOT) prima.de
FAQ: http://www.voyager.prima.de/cpp/ mailto:voyager+send-faq (AT) bud (DOT) prima.de

Back to top
Chris Theis
Guest





PostPosted: Fri Oct 29, 2004 7:44 am    Post subject: Re: Konfigurationsdatei lesen/schreiben Reply with quote


"Nicolas Pavlidis" <aon.912719634 (AT) aon (DOT) at> wrote

Quote:
Steffen Wendzel wrote:
Hallo.

Welche möglichkeit ist die beste für das Auslesen und Schreiben von
ASCII-Konfigurationsdateien?

Bisher hatte ich unter C mit Flex und Bison gearbeitet um
Konfigurationsdateien auszulesen, soweit ich weiß funktioniert dies
unter BSD allerdings nicht mit C++ (bzw. nur mit Software die
niemand in den Ports hat).

Ich weisz nicht genau wie Bison und aehnliche Tools arbeiten, aber man
braucht sie doch nicht auf der Zielplattform oder? Du musst ja den
Parser nur einmal dir generieren lassen, wo mit du den generierten Code
ja auch im C++ Programm verweden kannst.


Das ist prinzipiell richtig, jedoch ist es natuerlich komfortabler die Tools
auf der Entwicklungsplattform zu haben. Das Funktionsprinzip ist so, dass
man dem Generator eine BNF Grammatik vorlegt und der baut einen
tabellenorintierten Parser, welcher nach Aufruf des "lexical analyzers"
jeweils ein Token bekommt. Dieses wird eins nach dem anderen der Grammatik
entsprechend verarbeitet. Der lexical analyzer welche die Zerlegung des
Inputs vornimmt kann man sich entweder von Lex basteln lassen, oder selbst
implementieren.

Der Bison-Parser ist jedoch in C-geschrieben und sollte somit von jedem C++
Compiler uebersetzbar sein. Ausserdem gibt es GNU Versionen von bison &
yacc.

Quote:
Ich stelle mir eine Konfigurationsdatei in etwa folgendermaßen vor:

Variable: Stringwert
VariableY: 391

Du koenntest auch mit normalen Streams arbeiten, und das was du bekommst
dann parsen.

Gibt es dafür eine bessere Möglichkeit als die Formatierte Ein-/Aus-
gabe über Formastring-Funktionen und anschl. Stringcompare um den
Typ der Variable heraus zu bekommen?

s.o.

Oder gibt es evtl. auch eine ganz andere Möglichkeit zur Handhabung
von Konfigurationsdateien?

Naja, einlesen musst sie ja immer :-)

[SNIP]


Fuer mich stellt sich eher die Frage, ob das parsen eines
Konfigurationsfiles mit einem bison-Parser nicht ein Schuss ueber das Ziel
hinaus ist, denn die Grammatik aufzusetzen ist nicht so trivial und das
Debuggen eine Qual! Fuer Config-Files ist man wahrscheinlich mit
Stringstreams und einem kleinen einfachen String-Tokenizer besser beraten.
Ansonsten wuerde ich dem OP empfehlen sich mal Coco/R anzuschauen, welcher C
oder C++ Code erzeugen kann und vor allem nicht table-based ist.

mfG
Chris

--
de.comp.lang.iso-c++ - Moderation: mailto:voyager+mod (AT) bud (DOT) prima.de
FAQ: http://www.voyager.prima.de/cpp/ mailto:voyager+send-faq (AT) bud (DOT) prima.de

Back to top
Hendrik Belitz
Guest





PostPosted: Fri Oct 29, 2004 8:27 am    Post subject: Re: Konfigurationsdatei lesen/schreiben Reply with quote

Chris Theis wrote:

Quote:
Fuer mich stellt sich eher die Frage, ob das parsen eines
Konfigurationsfiles mit einem bison-Parser nicht ein Schuss ueber das Ziel
hinaus ist...

Definitiv! Das ist so, als ob man aus einem 3-Zeiler-Shellskript einer
Java-Anwendung machen möchte ;)

Ich würde die Sachen einfach über einen Stream einlesen und mit
boost::tokenizer dann zerlegen. Was heißt, ich würde? Ich mach es so!

--
To get my real email adress, remove the two onkas
--
Hendrik Belitz
- Abort, Retry, Fthagn? -

--
de.comp.lang.iso-c++ - Moderation: mailto:voyager+mod (AT) bud (DOT) prima.de
FAQ: http://www.voyager.prima.de/cpp/ mailto:voyager+send-faq (AT) bud (DOT) prima.de

Back to top
kanze@gabi-soft.fr
Guest





PostPosted: Fri Oct 29, 2004 11:49 am    Post subject: Re: Konfigurationsdatei lesen/schreiben Reply with quote

Steffen Wendzel <SWendzel (AT) t-online (DOT) de> wrote


Quote:
Welche möglichkeit ist die beste für das Auslesen und Schreiben von
ASCII-Konfigurationsdateien?

Bisher hatte ich unter C mit Flex und Bison gearbeitet um
Konfigurationsdateien auszulesen, soweit ich weiß funktioniert dies
unter BSD allerdings nicht mit C++ (bzw. nur mit Software die niemand
in den Ports hat).

Das weiß ich nicht. Ich benutze ziemlich regelmäßig Flex mit C++, und
zwar auf unterschiedenen Platformen -- z.Z. habe ich auch eine
Anwendung, wo ich beide lex und yacc (nicht Flex und Bison) mit C++
benutzen, ohne große Probleme.

Kleinere Probleme gibt es häufig, aber bissher nichts, dass ich nicht
mit eine Passe von sed/awk über dem generierten Code korrigieren konnte.

Dagegen sind lex/Flex und yacc/Bison oft überschwer für etwas so einfach
wie eine Konfigurierungsdatei.

Quote:
Ich stelle mir eine Konfigurationsdatei in etwa folgendermaßen vor:

Variable: Stringwert
VariableY: 391

Gibt es dafür eine bessere Möglichkeit als die Formatierte Ein-/Aus-
gabe über Formastring-Funktionen und anschl. Stringcompare um den Typ
der Variable heraus zu bekommen?

Bei der Eingabe verwende ich meistens meine eigene FieldArray Klassen
(siehe http://www.gabi-soft.fr/codebase-en.html, dann im Komponent
Util/Basic/FieldArray). Lesen mit getline, dann die gelesene Kette den
FieldArray zuweisen.

Mit moderneren regulären Ausdrucken geht es auch. (Meine Implementierung
ist nicht so flexible.) Z.B. mit Boost:

boost::regex zeilenMuster(
"[[:space:]]*([[:alnum:]]+)[[:space:]]*:[[:space:]]*(.*)") ;
std::string zeile ;
int zeilennummer = 0 ;
while ( std::getline( eingabe, zeile ) ) {
++ zeilennummer ;
boost::smatch ergebnis ;
if ( ! boost::regex_match( zeile, ergebnis, zeilenMuster ) ) {
// Syntaxfehler, Zeile zeilennummer
} else {
map.insert( Map::value_type( ergebnis[ 0 ], ergebnis[ 1 ] ) ) ;
}
}

Dazu würde ich einen filtrierenden streambuf benutzen, um Kommentar
leicht zu erlauben.

Quote:
Oder gibt es evtl. auch eine ganz andere Möglichkeit zur Handhabung
von Konfigurationsdateien?

Es gibt so viel du willst.

--
James Kanze GABI Software http://www.gabi-soft.fr
Conseils en informatique orientée objet/
Beratung in objektorientierter Datenverarbeitung
9 place Sémard, 78210 St.-Cyr-l'École, France, +33 (0)1 30 23 00 34

--
de.comp.lang.iso-c++ - Moderation: mailto:voyager+mod (AT) bud (DOT) prima.de
FAQ: http://www.voyager.prima.de/cpp/ mailto:voyager+send-faq (AT) bud (DOT) prima.de

Back to top
King Leo - Martin Oberzal
Guest





PostPosted: Sat Oct 30, 2004 1:23 pm    Post subject: Re: Konfigurationsdatei lesen/schreiben Reply with quote

Steffen Wendzel wrote:

Quote:
Ich stelle mir eine Konfigurationsdatei in etwa folgendermaßen vor:

Variable: Stringwert
VariableY: 391

Gibt es dafür eine bessere Möglichkeit als die Formatierte Ein-/Aus-
gabe über Formastring-Funktionen und anschl. Stringcompare um den
Typ der Variable heraus zu bekommen?

Oder gibt es evtl. auch eine ganz andere Möglichkeit zur Handhabung
von Konfigurationsdateien?

Wie wärs mit einer fertigen lib?
http://kingleo.pages.at/index.php?language=DE&show=/development/cpp/#leoini

Gruß, Martin!

--
Das ist keine fehlerhafte Rechtschreibung, sondern .. aehm.. modifizierte
Huffmann Codierung. Nur weil du das nicht lesen kannst ist es nicht
falsch! Smile
Szomraky Stefan in at.linux

--
de.comp.lang.iso-c++ - Moderation: mailto:voyager+mod (AT) bud (DOT) prima.de
FAQ: http://www.voyager.prima.de/cpp/ mailto:voyager+send-faq (AT) bud (DOT) prima.de

Back to top
Christian Rössel
Guest





PostPosted: Tue Nov 02, 2004 8:10 pm    Post subject: Re: Konfigurationsdatei lesen/schreiben Reply with quote

Steffen Wendzel <SWendzel (AT) t-online (DOT) de> schrieb:

Quote:
Ich stelle mir eine Konfigurationsdatei in etwa folgendermaßen vor:

Variable: Stringwert
VariableY: 391

Oder gibt es evtl. auch eine ganz andere Möglichkeit zur Handhabung
von Konfigurationsdateien?

Hallo Steffen,

unter http://getpot.sourceforge.net/ findest Du eine C++-Bibliothek
zum Parsen der Kommandozeile und von Konfigurationsfiles im
'ini'-Format. Sie besteht aus nur einem Headerfile. Vielleicht kannst
Du damit ja was anfangen.

Christian
--
Christian Rössel <christian.roessel (AT) gmx (DOT) de>

--
de.comp.lang.iso-c++ - Moderation: mailto:voyager+mod (AT) bud (DOT) prima.de
FAQ: http://www.voyager.prima.de/cpp/ mailto:voyager+send-faq (AT) bud (DOT) prima.de

Back to top
Display posts from previous:   
Post new topic   Reply to topic    C++Talk.NET Forum Index -> C++ (German) All times are GMT
Page 1 of 1

 
Jump to:  
You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum
You cannot vote in polls in this forum


Powered by phpBB © 2001, 2006 phpBB Group
SEO toolkit © 2004-2006 webmedic.