configfile.h

00001 /*
00002         ConfigFile - Klasse
00003         Diese Klasse dient zum Verwalten von Konfigurationsfiles ähnlich den ".ini" Files unter Windows.
00004         Die Files sind im Grunde folgendermaßen aufgebaut:
00005 
00006         ;*******************************************************************************
00007         ; Dies ist ein Kommentar (beim Erzeugen des ConfigFile-Objektes kann
00008         ; das Kommentarzeichen angegeben werden. Standardmäßig ist dieses das Semikolon.
00009 
00010         [Abschnitt_1]
00011           Bezeichner1 = Wert
00012                 Bezeichner2 = Wert
00013         ...
00014 
00015         [Abschnitt_2]
00016           Bezeichner1=Wert
00017           Bezeichner2=Wert
00018 
00019         ...
00020 
00021         ;*******************************************************************************
00022 
00023         Lehrzeichen und Tabulatoren können eigentlich überall auftauchen, nur nicht in den
00024         Bezeichnern und den Werten. Sie können aber auch zwischen den Bezeichnern dem "="
00025         und den Werten fehlen.
00026         In den Abschnittsnamen, Bezeichnern und Werten sind alle Zeichen bis auf das Kommentarzeichen
00027         sowie die Zeichen "[" und "]" erlaubt. Fehlt ein Wert, so wird er als Null (bei Numerischen Werten)
00028         bzw. als "" (für Strings) angenommen.
00029 
00030         Hinweis: Zwei Abschnitte mit dem selben Namen macht keinen Sinn.
00031                  Bezeichner mit gleichen Namen in unterschiedlichen Abschnitten sind kein Problem.
00032 */
00033 
00034 
00035 #ifndef CONFIGFILE_H
00036 #define CONFIGFILE_H
00037 
00038 #include <fstream>
00039 #include <iostream>
00040 typedef int ERROR;
00041 
00047 class ConfigFile {
00048 
00049 public:
00050   /*
00051     Erzeugt ein ConfigFile-Objekt.
00052     Es muss der Dateiname und optional ein Kommentarzeichen angegeben werden.
00053     Existiert die Datei nicht, so wird sie angelegt.
00054   */
00055   ConfigFile(const char filename[], const char comment = ';');
00056   ~ConfigFile();
00057 
00058   /*
00059     Die read-Funktionen lesen den gewünschten Wert des Bezeichners "ident"
00060     aus dem Abschnitt "section".
00061     Sie werden in der Variablen "value" gespeichert.
00062     Parms:    section - gesuchter Abschnitt
00063     ident   - gesuchter Bezeichner
00064     value   - Variable von gewünschtem Typ für das Ergebnis
00065     Returns:  errorcode - 0 wenn Wert gefunden wurde
00066   */
00067   ERROR read(const char section[], const char ident[], double* value);
00068   ERROR read(const char section[], const char ident[], char* value);
00069   ERROR read(const char section[], const char ident[], int* value);
00070 
00071   /*
00072     Die store-Funktionen speichern einen in einem Abschnitt einen Bezeichner
00073     mit zugehörigem Wert. Ist der Bezeichner bereits vorhanden, so wird sein
00074     Wert aktualisiert. Ist er nicht vorhanden so wird er neu eingefügt.
00075     Parms:    section - gewünschter Abschnitt
00076     ident   - gewünschter Bezeichner
00077     value   - Wert der gesetzt werden soll
00078     Returns:  errorcode - 0 wenn Wert korrekt gesetzt werden konnte
00079   */
00080   ERROR store(const char section[], const char ident[], const double value);
00081   ERROR store(const char section[], const char ident[], const char value[]);
00082   ERROR store (const char section[], const char ident[], const int value);
00083   ERROR isConsistent();
00084 
00085   static const ERROR CFG_SUCCESS               =  0;
00086   static const ERROR CFG_FILE_NOT_EXISTS       = -1;
00087   static const ERROR CFG_INCORRECT_SYNTAX      = -2;
00088   static const ERROR CFG_SECTION_NOT_FOUND     = -3;
00089   static const ERROR CFG_IDENTIFIER_NOT_FOUND  = -4;
00090 
00091   char getStatus() const;
00092 
00093  private:
00094   ERROR getValue(const char section[], const char ident[]);
00095   ERROR storeValue(const char section[], const char ident[], const char value[]);
00096   void ignoreLine();
00097   ERROR open_w();
00098   ERROR open_r();
00099   void close();
00100   char _comment;
00101   char* _value;
00102   char* _filename;
00103   std::fstream* _file;
00104   //+++++tbaier 20040305
00105   char _openStatus; //status of file c = closed; r = read open, w = write open, e = file error
00106 };
00107 
00108 #endif
00109 
00110 


tams Tim Baier bhandlib v0.25
Generated Wed Aug 16 14:57:09 2006 by doxygen 1.4.7