====== Parser per file .ini ======
Autore: **//Fabio Di Matteo//** \\ Ultima revisione: **//16/03/2016 - 15:32//** \\ \\
La libreria glib (parte integrante del pacchetto GTK+) possiede una [[https://developer.gnome.org/glib/2.30/glib-Key-value-file-parser.html|serie di funzioni]] per gestire file di testo [[http://it.wikipedia.org/wiki/File_INI|.INI]] di solito usati per i file di configurazione delle applicazioni. Qui di seguito vedremo un esempio base per capire come utilizzare queste funzioni.
===== File INI per il test =====
Il nostro file .ini usato per il test.\\ \\
**pref.conf**
[MioGruppo1]
chiave1=testo chiave1 modificato ancora
chiave2=testo-della-chiave-numero-due
chiave3=testo-della-chiave-numero-tre
[MioGruppo2]
chiave4=testo-della-chiave-numero-quattro
chiave5=testo-della-chiave-numero-cinque
===== Codice =====
**main.c**
#include
char* GetKey(gchar* file, const gchar* group ,const gchar* key)
{
//Una varibile per gli eventuali errori
GError *error=NULL;
//Mi preparo a leggere il file con le chiavi
GKeyFile * mykey = g_key_file_new();
g_key_file_load_from_file (mykey, file, G_KEY_FILE_KEEP_COMMENTS, &error);
gchar* myval= g_key_file_get_value (mykey, group, key, &error);
g_key_file_free (mykey);
//Gestisco eventuali errori di lettura
if (error!=NULL)
{
g_print("Errore : %s\n",error->message);
return NULL;
}
return myval;
}
void* SetKey(gchar* file, const gchar* group , const gchar* key, const gchar* content)
{
//Una varibile per gli eventuali errori
GError *error=NULL;
//Mi preparo a leggere il file con le chiavi
GKeyFile *mykey = g_key_file_new();
g_key_file_load_from_file (mykey, file, G_KEY_FILE_KEEP_COMMENTS, &error);
//Scrivo la chiave (immagine in memoria, non scritta sul file)
g_key_file_set_string(mykey, group, key, content);
//Adesso scrivo il file CONFFILE
gsize size;
gchar* data = g_key_file_to_data (mykey, &size, &error);
g_file_set_contents (file, data, size, &error);
//Faccio pulizia delle strutture non piu' necessarie;
g_free (data);
g_key_file_free (mykey);
//Gestisco eventuali errori di lettura
if (error!=NULL)
{
g_print("Errore : %s\n",error->message);
return NULL;
}
}
int main (int argc, char *argv[])
{
//Inizializzo i tipi di glib
g_type_init();
//Setto il valore della chiave numero 1
SetKey("miofile.conf","MioGruppo1" ,"chiave1", "testo chiave1 modificato ancora");
//Leggo i valori delle chiave numero 1 e numero 5
g_print("%s\n",GetKey("miofile.conf","MioGruppo1","chiave1"));
g_print("%s\n",GetKey("miofile.conf","MioGruppo2","chiave5"));
return 0;
}
**makefile**
CPP = gcc
OPTS = `pkg-config --cflags --libs gio-2.0`
all:
$(CPP) main.c -o main $(OPTS)
clean:
rm main