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
![]() |
Generated Wed Aug 16 14:57:09 2006 by
![]() |