#include <confg.h>
Öffentliche Typen | |
| enum | Err { OK = 0, FILE_NOT_FOUND, SECTION_NOT_FOUND, PAR_NOT_FOUND, NO_FURTHER_PAR } |
Öffentliche Methoden | |
| Config () | |
| Config (const string &fileName, Err &err) | |
| ~Config () | |
| Err | init (const string &fileName) |
| Initialisierungsfunktion wird von allen Konstruktoren aufgerufen. | |
| Err | getErr () const |
| string | errToStr () const |
| Wandelt Error-Code in String um. | |
| Err | seekSection (const string §ion) |
| Sucht von Beginn der Konfigurationsdatei an nach Sektion sectionName. | |
| Err | readParameter (const string &par, string &val, const string §ion="", bool isStripSpc=true) |
| Liest den Parameter parName ein und gibt den Wert in value zurueck. | |
| Err | nextParameter (string &par, string &val) |
| Holt naechsten Parameter ab der aktuellen Zeile. | |
| Err | writeParameter (const string &par, const string &val, const string §ion="") |
| Weist dem Parameter setPar in der Sektion setSection den Wert setVal zu. | |
| Err | flush () |
| Schreibt die Konfigurationsdatei neu auf Platte. | |
| void | remove () |
Private Methoden | |
| void | splitLine (string line, string &space, string §ionName, string &parName, string &assignOp, string &value, string &comment) |
| Trennt eine Konfigurationszeile in ihre Bestandteile auf. | |
| void | readFile () |
Liest die ganze Konfigurationsdatei in das String-Array mLines ein. | |
| Err | setParameter (const string &setPar, const string &setVal, unsigned int &i) |
| Beschreibt den Parameter setPar mit Wert setVal. | |
Private Attribute | |
| char | mCs |
| Kommentarsymbol. | |
| string | mAssigns |
| Liste von Zuweisungszeichen. | |
| string | mCsAndEol |
| String mit Kommentar und EOL-Symbol. | |
| string | mFileName |
| Name der Konfigurationsdatei. | |
| string | mSection |
| Name der Sektion. | |
| string | mParName |
| Name des Parameters. | |
| fstream | mFile |
| zu oeffnende Konfigurationsdatei | |
| bool | mIsFileRead |
| Flag, ob Datei schon gelesen. | |
| Err | mErr |
| Fehlercode. | |
| vector< string > | mLines |
| gepufferte Datei | |
Die Klasse Config dient zum Lesen und zerstoerungsfreien Schreiben von Initialisierungsdateien, wie sie frueher unter Windows ueblich waren. Zerstoerungsfrei bedeutet dabei, dass die Formatierung der Datei auch beim Schreiben von Parameteren (z.B. Kommentare am Zeilenende) erhalten bleibt.
Eine Initialisierungsdatei gliedert sich in Sektionen, in denen die Parameter aufgelistet sind; Kommentare sind am Zeilenende erlaubt. Beispiel:
# configuration file for Almetare's Casio fx-85v [PROGRAM] name = Casio fx-85v version = V.1.0 beta nvRam = ||||0||||||| # non volatile RAM - you should not edit this entry displayMode = moreRealistic # allowed: 'debug', 'simple', 'realistic' or 'moreRealistic' xPos = 50 # x position of the dialog in pixels yPos = 20 # y position of the dialog in pixels width = 230 # width of the dialog in pixels (0: default) height = 445 # height of the dialog in pixels (0: default) showHint = off # allowed: 'on' or 'off' showToolTips = on # allowed: 'on' or 'off' logMode = off # allowed: 'on' or 'off' browserPath = default # allowed: 'default' or path to browser [LOGGING] onlFile = log.txt # name of file for normal logging dbgFile = log.txt # name of file for debug logging errFile = log.txt # name of file for error logging maxLogLen = 50 # max. length of files in kByte (if longer: -> *.bak) onlChannels = gnl cns # allowed: 'ctl' 'mem' 'gnl' 'hgh' 'med' 'low' 'all' 'cns' dbgChannels = # allowed: 'ctl' 'mem' 'gnl' 'hgh' 'med' 'low' 'all' 'cns' errChannels = all cns # allowed: 'ctl' 'mem' 'gnl' 'hgh' 'med' 'low' 'all' 'cns' fileToLog = # name of the exclusively logged file
Der Sektionsname muss in eckigen Klammern oberhalb der zugehoerigen Parameter stehen. Leerzeichen und Tabs am Zeilenanfang werden ignoriert.
Trennzeichen zwischen Parameternamen und Parametern koennen in der Klassenvariablen mAssigns definiert werden (z.Zt. Tab, Space und "="). Das Kommentarsymbol wird in mCsAndEol definiert (z.Zt. "#"). Die Werte der Parameter sind grundsaetzlich Strings und muessen ggf. vom Code, der die Klasse verwendet, in andere Typen umgewandelt werden.
|
|
|
|
|
|
|
||||||||||||
|
|
|
|
|
|
|
Wandelt Error-Code in String um.
|
|
|
Schreibt die Konfigurationsdatei neu auf Platte.
|
|
|
|
|
|
Initialisierungsfunktion wird von allen Konstruktoren aufgerufen.
|
|
||||||||||||
|
Holt naechsten Parameter ab der aktuellen Zeile.
|
|
|
Liest die ganze Konfigurationsdatei in das String-Array
|
|
||||||||||||||||||||
|
Liest den Parameter parName ein und gibt den Wert in value zurueck. Wenn section = "", wird ab der aktuellen Zeile gesucht, sonst wird zunaechst die Section ab Dateianfang gesucht.
|
|
|
|
|
|
Sucht von Beginn der Konfigurationsdatei an nach Sektion sectionName. Der Filepointer wird dann an diese Stelle gesetzt.
|
|
||||||||||||||||
|
Beschreibt den Parameter setPar mit Wert setVal. Es wird davon ausgegangen, dass i bereits eine Zeile in der passenden Sektion ist und dann zeilenweise nach dem Parameter gesucht.
|
|
||||||||||||||||||||||||||||||||
|
Trennt eine Konfigurationszeile in ihre Bestandteile auf.
Parameter = Wert # Kommentar
^ ^^ ^^ ^^ ^^
space parName assignOp value comment
oder
[sektion] Kommentar
^ ^ ^ ^ ^
space section comment
|
|
||||||||||||||||
|
Weist dem Parameter setPar in der Sektion setSection den Wert setVal zu. Sonst wird an der Datei nichts veraendert, Kommentare etc. bleiben erhalten. Ausnahme: Wenn der Platz zwischen Parametername und Kommentar nicht reicht, wird der Kommentar nach rechts verschoben. Beim ersten Aufruf wird die ganze Datei in mLines[] eingelesen, weitere Aufrufe arbeiten dann auf diesem Puffer. Er wird im Destruktor oder mit flush() dann wieder geschrieben. Wenn setSection = "", wird ab der aktuellen Zeilenposition direkt nach dem Parameter gesucht.
|
|
|
Liste von Zuweisungszeichen.
|
|
|
Kommentarsymbol.
|
|
|
String mit Kommentar und EOL-Symbol.
|
|
|
Fehlercode.
|
|
|
zu oeffnende Konfigurationsdatei
|
|
|
Name der Konfigurationsdatei.
|
|
|
Flag, ob Datei schon gelesen.
|
|
|
gepufferte Datei
|
|
|
Name des Parameters.
|
|
|
Name der Sektion.
|
1.4.1