Ini-Datei lesen, schreiben o. besser XML?

  • Themenstarter Themenstarter Kloppo2011
  • Beginndatum Beginndatum
Hi.
Code:
if (! fs) 
{
	cerr << "cannot open file ColourCodes.txt for input\n";
	system("pause");
}
Es würde mehr Sinn machen, die Schleife in einem else Block anzuschließen. Besser ist explizit die .is_open() Methode zu benutzen.
Code:
while (fs >> code) 
{
	if (! fs.eof()) 
	{
		codes.push_back(code);
	}
Diese if-Abfrage ist unnötig und falsch. Lass sie einfach weg.

Ansonsten, warum verwendest du denn nicht eine ini Bibliothek?

Gruß
 
Danke Änderungen durchgeführt. Hast du ein Beispiel?


Danke
 
Zuletzt bearbeitet von einem Moderator:
Meine Ini:
Code:
[Parameter]
inputgmlfile = C:\temp\MCG.gml
outputgmlfile = C:\temp\COL.gml
gml2picexe = C:\OGDF\gml2pic\gml2pic.exe
imageformat = pdf

[Colouring]
Cluster Yellow = #FFB2B2
Cluster Blue = #FF6666
Cluster Red = #FF6699

Ich muss jetzt die Section Colouring auslesen und die Parameter einzeln betrachten. Ich probiere gerade mit eine Map bekomme sie nur nicht vernünftig gefüllt.
Ich denke getprivateprofilesection macht nicht zuviel Sinn, weil in der Section später bis zu 800 Einträge stehen können.
Habt Ihr nen Vorschlag?
 
Weil ich einfach noch nicht die richtige Idee habe, die Werte aus der Section Colouring aus der Ini-Datei auszulesen.
Welche Technick wende ich am besten an? Getprivateprofilesection? string.find? Ich muss am ende dann halt auch wieder weitere Paramter anhängen. Ich denke eine map zu füllen ist die beste Idee, da ich so später am besten sowohl auf den Paramternamen als auch auf die Parametereiegenschaft zurückgreifen kann oder? Ich nehme eine Liste und zerschneide dann die Werte am "=" Zeichen.

Ich muss halt später den einmal den Paramternamen also z.B. "Cluster Yellow" mit einem Namen aus einer anderen Datei vergleichen und einmal den Farbcode mit einem anderen Farbcode vergleichen.

Meine INI:
Code:
[Parameter]
inputgmlfile = C:\temp\MCG.gml
outputgmlfile = C:\temp\COL.gml
gml2picexe = C:\OGDF\gml2pic\gml2pic.exe
imageformat = pdf

[Colouring]
Cluster Yellow = #FFB2B2
Cluster Blue = #FF6666
Cluster Red = #FF6699
Cluster Green = #7FFFB2

Mein Code:
Code:
fsini.open("c:/Project_OGDF/CPL/Release/config.ini", ios::in | ios::out | ios::app);
if (!fsini.is_open()) 
{
	cerr << "cannot open file config.ini for input\n";
	system("pause");
}
else 
{
/*while (fsini >> inicode) 
{
	pos = inicode.find('='); 
	cout <<pos <<endl;
}*/
		
//Schleife über alle Cluster, Farbcode setzen
for (i = 1; i< C.numberOfClusters(); i++) 
{
	code = codes.front();
	codes.pop_front(); 
	code = "#" + code;
	CA.clusterFillColor(i) = code.c_str();
	CA.clusterLineWidth(i) = 2.0;
	inicode = CA.clusterLabel(i).cstr();
	inicode = inicode + " = " + code;
	Parameter in die ini schreiben
	fsini <<endl <<inicode;
}

}
fsini.close();

Sobald die while-Schleife nicht auskommentiert ist, wird nichts mehr in die Datei geschrieben.
Wie kann ich jetzt die Section Colouring aus der Ini-Datei auslesen und in eine Map speichern?

Danke

Es wäre doch jetzt sinnvoll in der while-Schleife die Section Colouring auszulesen und in eine map zu speichern. Und danach die Vergleiche mit den Werten anzustellen.
 
Alles klar gleichzeitig lesen und schreiben geht wohl nur wenn die Datein im Binär-Format sind. Was ist denn sinnvoller?
Und verwendet man besser eine Binär-Datei oder eine Textdatei?

Danke
 
Zuletzt bearbeitet von einem Moderator:
Lesen und Schreiben sollte? auch im Textmodus gehen.

Und ini und xml sind Paradebeispiele für Textdateien. Nichts Binäres drin.
 
Jup! Ja ich kann im Textmodus schreiben und lesen, muss aber hierfür die Datei jedes mal neu öffnen ist geht nicht mit einem Aufruf. Also ich muss die Datei einmal lesend öffnen und einmal schreibend.
 
Jup! Ja ich kann im Textmodus schreiben und lesen, muss aber hierfür die Datei jedes mal neu öffnen ist geht nicht mit einem Aufruf. Also ich muss die Datei einmal lesend öffnen und einmal schreibend.
Nein, das ist unnötig. Du machst wahrscheinlich irgendetwas falsch. Vermutlich hast du vergessen .clear() aufzurufen um das EOF und fail bit zu löschen.

Gruß
 
Zurück