Config file in C++

fish-guts

Erfahrenes Mitglied
Hallo Zusammen

Ich möchte gerne eine Parsing Tool für *.conf dateien erstellen.

Ich habe bereits eine Funktion, die überprüft, ob die Anführungszeichen komplettiert wurden, und die Leezeilen ignoriert werden.

Ich lese nun das Conf-File zeilenweise ein. Ich möchte nun bei jeder Zeile überprüfen, ob der Eintrag gültig ist. Dazu habe ich Konstanten erstellen, die den erwarteten Typ (int, string, etc.) zurückgeben.Das Format in der Konfigurationsdatei sieht wie folgt aus:

Testparameter "1"

Wie kann ich nun überprüfen, ob dieser Parameter gültig ist?

Danke euch schon im Voraus für viele nette Antworten.

Gruss

FG
 
Hi.

Also am günstigsten wäre es dafür einen Parser Framework wie z.B. Spirit zu benutzen.

Da mußt du nur die Regeln angeben und alles andere geht fast wie von selbst.

Gruß

PS: Es wäre auch vorteilhaft, wenn du mal etwas Code postest damit man sehen kann was du meinst. Wann z.B. ist denn der Parameter "gültig"? Was bedeutet das?
 
Zuletzt bearbeitet:
Hallo

Ich hatte bisher nix an Code, was ich posten konnte. Ich habe in der Zwischenzeit mal was gemacht.

Code:
typedef struct {
	std::string name;
    struct {
        int type;               /* PARAM_* below */
        void *ptr;              /* Pointer to where to store the value */
    } params[MAXPARAMS];        /* max number of parameters (default: 128) */
} config;
 
 
int parse_config(std::string s)
{
	config conf[] = {
		{"ServerName",				{PARAM_STRING,&c_server_name}},
		{"ServerUser",				{PARAM_STRING,&c_server_user}},
		{"ServerHost",				{PARAM_STRING,&c_server_host}},
	};
	int x,n;
	static int y;
	for(n=0;n<3;n++)
	{	
		if((x=s.compare(conf[n].name))==0)
		{
			y++; // zählt einen korrekten parameter
		}
	}
	if(y==0)
	{
		return 0;
	}
	else
	{
		return 1;
	}
}

Codemässig sollte auch alles korrekt sein, Compiler meldet nichts. Zum Problem:

Das Conffile sieht immer wie folgt aus:

ServerName "test.server.de"
ServerUser "test"
ServerHost "server.de"

Im Code seht ihr bei "config conf[]" die gültigen Parameter. Jetzt habe ich im Config File "ServerName" durch irgendeinen Quatsch ersetzt. Trotzdem meldet das Programm keinen Fehler. Woran könnte das liegen?

Gruss

FG
 
Moin

Oke, das mit dem Initialisieren habe übersehen. Das macht keinen Unterschied zum Programmverhalten.

Ich habe y bewusst als static definiert, weil hier nachher noch andere Elemente hinzukommen, und es dann wichtig ist, dass der Wert auch nachher noch erhalten bleibt.

Gruss

FG

//EDIT: Das ganze hat sich erledigt. Ich hab statt line.compare() nun line.find() verwendet. Jetzt funktioniert alles.
 
Zuletzt bearbeitet:
Also bei mir funktioniert's. Wenn ich irgendwas anderes als die 3 Strings eingebe wird 0 zurückgegeben. Wenn einmal ein richtiger Wert eingegeben wurde, ist die statische Variable natürlich immer größer als 0, d.h. dann können keine Fehler mehr auftreten.

Gruß
 
Zurück