Ich versuche, eine INI-Datei mit C ++ zu analysieren. Irgendwelche Tipps, wie dies am besten erreicht werden kann? Sollte ich die Windows-API-Tools für die INI-Dateiverarbeitung (mit der ich völlig unbekannt bin), eine Open-Source-Lösung verwenden oder versuchen, sie manuell zu analysieren?
89
Wenn Sie eine plattformübergreifende Lösung benötigen, probieren Sie die Programmoptionsbibliothek von Boost aus .
quelle
Ich habe noch nie INI-Dateien analysiert, daher kann ich nicht zu genau auf dieses Problem eingehen.
Aber ich habe einen Rat:
Erfinden Sie das Rad nicht neu, solange ein vorhandenes Ihren Anforderungen entspricht
http://en.wikipedia.org/wiki/INI_file#Accessing_INI_files
http://sdl-cfg.sourceforge.net/
http://sourceforge.net/projects/libini/
http://www.codeproject.com/KB /files/config-file-parser.aspx
Viel Glück :)
quelle
Ich benutze SimpleIni . Es ist plattformübergreifend.
quelle
Wenn Sie bereits Qt verwenden
Dann lesen Sie einen Wert
Es gibt eine Reihe anderer Konverter, die Ihre INI-Werte sowohl in Standardtypen als auch in Qt-Typen konvertieren. Weitere Informationen finden Sie in der Qt-Dokumentation zu QSettings.
quelle
sync()
, was eine Überraschung sein kann), und dies zerstört die Kommentare und die Reihenfolge, in der zuvor Variablen definiert wurden ...Diese Frage ist etwas alt, aber ich werde meine Antwort posten. Ich habe verschiedene INI-Klassen getestet (Sie können sie auf meiner Website sehen ) und ich verwende auch simpleIni, weil ich mit INI-Dateien sowohl unter Windows als auch unter winCE arbeiten möchte. GetPrivateProfileString () von Window funktioniert nur mit der Registrierung unter winCE.
Mit simpleIni ist es sehr einfach zu lesen. Hier ist ein Beispiel:
quelle
inih ist ein einfacher ini-Parser, der in C geschrieben ist. Er wird auch mit einem C ++ - Wrapper geliefert . Anwendungsbeispiel:
Der Autor hat auch eine Liste der vorhandenen Bibliotheken hier .
quelle
Haben Sie versucht , libconfig ; sehr JSON-ähnliche Syntax. Ich bevorzuge es gegenüber XML-Konfigurationsdateien.
quelle
Wenn Sie an Plattformportabilität interessiert sind, können Sie auch Boost.PropertyTree ausprobieren. Es unterstützt INI als Persistenzformat, obwohl der Eigenschaftsbaum nur 1 Ebene tief sein kann.
quelle
Wenn Sie nicht vorhaben, die App plattformübergreifend zu gestalten, ist die Verwendung der Windows-API-Aufrufe der beste Weg. Ignorieren Sie einfach den Hinweis in der API-Dokumentation, dass er nur aus Gründen der 16-Bit-App-Kompatibilität bereitgestellt wird.
quelle
Vielleicht eine späte Antwort. Aber wissenswerte Optionen. Wenn Sie eine plattformübergreifende Lösung benötigen, können Sie auf jeden Fall GLIB ausprobieren, es ist interessant. ( Https://developer.gnome.org/glib/stable/glib- Schlüssel-Wert-Datei-Parser.html )
quelle
Ich weiß, dass diese Frage sehr alt ist, aber ich bin darauf gestoßen, weil ich etwas plattformübergreifendes für Linux brauchte, win32 ... Ich habe die folgende Funktion geschrieben, es ist eine einzelne Funktion, die INI-Dateien analysieren kann, hoffentlich finden andere sie nützlich.
Regeln & Vorsichtsmaßnahmen: buf to parse muss eine NULL-terminierte Zeichenfolge sein. Laden Sie Ihre INI-Datei in eine char-Array-Zeichenfolge und rufen Sie diese Funktion auf, um sie zu analysieren. Abschnittsnamen müssen mit [] Klammern versehen sein, z. B. [MySection]. Außerdem müssen Werte und Abschnitte in einer Zeile ohne führende Leerzeichen beginnen. Es werden Dateien mit Windows \ r \ n oder mit Linux \ n Zeilenenden analysiert. Kommentare sollten # oder // verwenden und am Anfang der Datei beginnen. Es sollten keine Kommentare mit INI-Eintragsdaten gemischt werden. Anführungszeichen und Häkchen werden an beiden Enden der Rückgabezeichenfolge abgeschnitten. Leerzeichen werden nur gekürzt, wenn sie außerhalb des Zitats liegen. Zeichenfolgen müssen keine Anführungszeichen enthalten, und Leerzeichen werden gekürzt, wenn Anführungszeichen fehlen. Sie können auch Zahlen oder andere Daten extrahieren, z. B. wenn Sie einen Float haben, führen Sie einfach ein atof (ret) für den ret-Puffer durch.
Wie benutzt man ... Beispiel ....
quelle
Am Ende habe ich inipp verwendet, was in diesem Thread nicht erwähnt wird.
https://github.com/mcmtroffaes/inipp
War eine MIT-lizenzierte Header-Implementierung, die einfach genug war, um sie zu einem Projekt hinzuzufügen und 4 Zeilen zu verwenden.
quelle