Ini-Datei lesen, schreiben o. besser XML?

  • Themenstarter Themenstarter Kloppo2011
  • Beginndatum Beginndatum
Kannst du mir das mal genauer erklären bitte! Danke
Wie kann ich denn jetzt am besten auf meine Section "Colouring" aus der Ini-Datei zugreifen? Wie kann ich es beeinflussen, dass er erst ab der zweiten Section mir die Werte in eine Map schreibt?
 
Kannst du mir das mal genauer erklären bitte!
Was soll ich denn da erklären?
Wie kann ich denn jetzt am besten auf meine Section "Colouring" aus der Ini-Datei zugreifen?
Verwende eine Bibliothek.

Wie kann ich es beeinflussen, dass er erst ab der zweiten Section mir die Werte in eine Map schreibt?
Verwende eine geeignete Bibliothek.

Evtl. wäre es am besten, wenn du nochmal ganz von Vorne anfängst und uns erstmal erklärst, was du überhaupt vorhast und was die Anforderungen sind. Langsam hab ich den Eindruck, dass eine ini Datei nicht die beste Wahl für dein Problem ist.

Muss die Konfiguration denn menschenlesbar / editierbar sein?

Wie kommst du auf INI vs. XML? Sind denn keine Alternativen möglich? Gibt es Lizenzeinschränkungen?

Gruß
 
Erklären an einem Beispiel! Was soll ich .clear()******
Ich habs mit folgendem Aufruf probiert:
fscodes.open("c:/Project_OGDF/CPL/Release/ColourCodes.txt", ios::in | ios::out | ios:app)
und dann halt eine while schleife zum füllen einer Liste mit den Daten und dann eine Schleife die Werte in die Datei zurück schreibt. Das funktioniert aber nur wenn ich die Datei einmal lesend und einmal schreibend aufrufe und leider nicht in einem Aufruf.

Problemstellung:
Also ich habe drei Dateien:
1. Eine Textdatei mit Farbcodes
2. Eine INI-Datei mit Paramtern für den Programmstart und mit den hinzugefügten Parametern in der Section Colouring.
3. Eine GML-Datei aus der ich ein Label auslese.

So als erstes lese ich jetzt das Label ein, nach diesem Label muss ich dann schauen, ob es als Paramter in der Ini-Datei unter Colouring mit einem Farbcode hinterlegt ist. Wenn ja, dann soll er den Farbcode nehmen und der wird dann wieder in die GML-Datei geschrieben. Wenn nicht, dann soll er einen Farbcode aus der Textdatei mit den Farbcodes nehmen, diesen dann in die GML-Datei schreiben und das Label dann mit dem Farbcode als Paramter an die INI-Datei in der Sektion Colouring anhängen.

Grüße und danke!
 
So hier ist jetzt mein Problem:
Code:
fsini.open("c:/Project_OGDF/CPL/Release/config.ini", ios::in);
if (fsini.is_open()) 
{
while (!fsini.eof())
{
	getline(fsini, inicode);
	cout <<inicode <<endl;
}
}

So wird nun die ganze Ini-Datei ausgelesen, ich benötige aber nur die zweite Sektion. Und ich würde die Werte dann gerne in eine Map schreiben lassen.

GetPrivateProfileSection( "Colouring", puffer, 1024, ini); Wofür genau steht eigentlich die Größenangabe? Gibt es eine Begrenzung?

Danke
 
Prüf jede Zeile, ob sie eine (Whitespaces weggelassen mit [ anfangt und mit ] aufhört.
Wenn ja hast du den Beginn einer neuen Sektion.

Dann prüfst du, ob in den [] Colouring steht.
Wenn ja: Anfang deines Bereichs.
Sonst Ende und Schließen, weil da schon die nächste Sektion beginnt.

Wenn es keine []-Zeile war und [Colouring] schon da war:
Den String am = splitten, Whitespaces vorne und hinten bei beiden Strings weg.
Und in die Map speichern.

PS zum 1024: Das kann man ganz leicht über Google herausfinden.
http://msdn.microsoft.com/en-us/library/ms724348(v=vs.85).aspx
Die Maximallänge, die in puffer passt. Der ist nicht unbegrenzt.
 
Danke! Man kann alles über google finden, aber man kann sich auch nochmal versichern, obs richtig verstanden wurde******!!
Und so habe ich mir das auch gedacht, ich will ja eigentlich auch nur nachforschen, ob es vll. bessere geschicktere Lösungen gibt als meine, aber anscheinend scheint es da nichts wirklich besseres zugeben.
 
Wie deepthroat schon mehrmals hingewisen hat:
Eine fertige Library verwenden würde einem viel davon ersparen.
 
Ich habe mir diese Library angeschaut,die er gepostet hat. Sind das nicht änliche funktionen wie getprivateprofilestring usw.! Mehr konnte ich dem nicht entnehmen. Habe auch nicht wirklich viel nützliche Hilfe gefunden über google.
Hast du noch nen Vorschlag? oder nen Erläuterung welche Datei ich einbinden muss im Prog um den MiniIni Parser zu nutzen?

Grüße
 
Ich habe mir diese Library angeschaut,die er gepostet hat. Sind das nicht änliche funktionen wie getprivateprofilestring usw.!
Natürlich sind das "ähnliche" Funktionen, der Zweck ist doch der gleiche...

Wenn du dir z.B. mal den Beispielcode angeschaut hättest, dann hättest du z.B. festgestellt, dass es eine einfache Möglichkeit gibt über alle Sektionen (oder nur die erste, zweite usw) und Schlüssel zu iterieren:
C:
for (s = 0; ini_getsection(s, section, sizearray(section), inifile) > 0; s++) {
    printf("[%s]\n", section);
    for (k = 0; ini_getkey(section, k, str, sizearray(str), inifile) > 0; k++) {
      printf("\t%s\n", str);
    } /* for */
  }
Es ist sicherlich nicht die schnellste Variante, da hierbei offenbar ständig die Datei geöffnet und geschlossen wird, aber man findet auch Alternativen => :suchen:

\edit: z.B. libconfig (ist keine ini Bibliothek, aber nützlich um Konfigurationsdateien zu verwenden)
Mehr konnte ich dem nicht entnehmen. Habe auch nicht wirklich viel nützliche Hilfe gefunden über google.
Dann solltest du das Projekt erstmal vergessen und Suchen lernen.
Hast du noch nen Vorschlag? oder nen Erläuterung welche Datei ich einbinden muss im Prog um den MiniIni Parser zu nutzen?
Das steht mit Sicherheit in der Doku :rtfm: http://minini.googlecode.com/svn/trunk/doc/minIni.pdf

Gruß
 
Zuletzt bearbeitet:
Wenn euch meine Fragen nerven warum antwortet ihr dann? Trotzdem Danke! Wenn einem einer in zwei Sätzen was erklären kann, ist es halt einfacher als erst ne ganze Doku zu lesen! Aber was solls!
 
Zurück