J'essaye d'analyser un fichier INI en utilisant C ++. Avez-vous des conseils sur la meilleure façon d'y parvenir? Dois-je utiliser les outils de l'API Windows pour le traitement des fichiers INI (avec lesquels je ne suis absolument pas familier), une solution open-source ou tenter de l'analyser manuellement?
89
Si vous avez besoin d'une solution multiplateforme, essayez la bibliothèque d' options de programme de Boost .
la source
Je n'ai jamais analysé les fichiers ini, je ne peux donc pas être trop précis sur ce problème.
Mais j'ai un conseil:
ne réinventez pas la roue tant qu'une roue existante répond à vos exigences
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
Bonne chance :)
la source
J'utilise SimpleIni . C'est multiplateforme.
la source
Si vous utilisez déjà Qt
Puis lisez une valeur
Il existe de nombreux autres convertisseurs qui convertissent vos valeurs INI en types standard et en types Qt. Voir la documentation Qt sur QSettings pour plus d'informations.
la source
sync()
, ce qui peut être une surprise) et cela détruit les commentaires et l'ordre dans lequel les variables ont été définies précédemment ...cette question est un peu vieille, mais je posterai ma réponse. J'ai testé différentes classes INI (vous pouvez les voir sur mon site Web ) et j'utilise également simpleIni parce que je veux travailler avec des fichiers INI sur Windows et winCE. GetPrivateProfileString () de Windows fonctionne uniquement avec le registre sur winCE.
Il est très facile à lire avec simpleIni. Voici un exemple:
la source
inih est un simple analyseur ini écrit en C, il est également livré avec un wrapper C ++. Exemple d'utilisation:
L'auteur a également une liste des bibliothèques existantes ici .
la source
Avez-vous essayé libconfig ; syntaxe très JSON. Je le préfère aux fichiers de configuration XML.
la source
Si vous êtes intéressé par la portabilité de la plateforme, vous pouvez également essayer Boost.PropertyTree. Il prend en charge ini en tant que format de persistance, bien que l'arborescence des propriétés ne soit que d'un niveau de profondeur.
la source
À moins que vous ne prévoyiez de rendre l'application multiplateforme, l'utilisation des appels d'API Windows serait la meilleure solution. Ignorez simplement la note dans la documentation de l'API concernant la fourniture uniquement pour la compatibilité des applications 16 bits.
la source
Peut-être une réponse tardive ... Mais, cela vaut la peine de connaître les options ... Si vous avez besoin d'une solution multiplateforme, vous pouvez certainement essayer GLIB, c'est intéressant ... ( https://developer.gnome.org/glib/stable/glib- Fichier-clé-valeur-parser.html )
la source
Je sais que cette question est très ancienne, mais je suis tombée dessus parce que j'avais besoin de quelque chose de multiplateforme pour linux, win32 ... J'ai écrit la fonction ci-dessous, c'est une fonction unique qui peut analyser les fichiers INI, j'espère que d'autres le trouveront utile.
règles et mises en garde: buf à analyser doit être une chaîne terminée par NULL. Chargez votre fichier ini dans une chaîne de tableau de caractères et appelez cette fonction pour l'analyser. les noms de section doivent être entourés de [] crochets, comme ce [MaSection], les valeurs et les sections doivent également commencer sur une ligne sans espaces de début. Il analysera les fichiers avec Windows \ r \ n ou avec des fins de ligne Linux \ n. Les commentaires doivent utiliser # ou // et commencer en haut du fichier, aucun commentaire ne doit être mélangé avec les données d'entrée INI. Les guillemets et les graduations sont coupés des deux extrémités de la chaîne de retour. Les espaces ne sont coupés que s'ils sont en dehors du devis. Les chaînes ne doivent pas obligatoirement comporter de guillemets et les espaces sont coupés si des guillemets sont manquants. Vous pouvez également extraire des nombres ou d'autres données, par exemple si vous avez un float, effectuez simplement un atof (ret) sur le tampon ret.
Comment utiliser ... exemple ...
la source
J'ai fini par utiliser inipp qui n'est pas mentionné dans ce fil.
https://github.com/mcmtroffaes/inipp
Était une implémentation d'en-tête sous licence MIT qui était assez simple pour être ajoutée à un projet et 4 lignes à utiliser.
la source