Barra laterale

programmazione:glib:parser_ini_files

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 serie di funzioni per gestire file di testo .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 <glib.h>
 
 
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

programmazione/glib/parser_ini_files.txt · Ultima modifica: 18/04/2018 - 15:48 (modifica esterna)