Portál AbcLinuxu, 12. května 2025 09:14

Dotaz: Glib key-value file parser

10.7.2009 22:00 Premet
Glib key-value file parser
Přečteno: 236×
Odpovědět | Admin

Zdravím,
Pokouším se napsat program a spíš se i učím, ale mám problém s tímhle. Nedokážu pořád pochopit jak to pracuje a jedinej zdroj informací je

http://library.gnome.org/devel/glib/stable/glib-Key-value-file-parser.html
http://www.gtkbook.com/tutorial.php?page=keyfile
z čehož mi to pořád není jasný

 

Mám napsanou funkci pro přidávání záznamů

void add_record(gchar *name, gchar *last_name, gchar *birth, gchar *name_holiday)
{
     GKeyFile *keyfile; 
     GKeyFileFlags flags;
     GError *error = NULL;
     gchar *group_name;

     keyfile = g_key_file_new();
     flags = G_KEY_FILE_KEEP_COMMENTS;
 
     if (!g_key_file_load_from_file (keyfile, "date_reminder.conf", flags, &error))
     {
         g_error (error->message);
         return;
     }

     sprintf(group_name,"%s-%s", name, last_name);
     g_strup(group_name); 

     /* Tohle je jenom kontrole záznamů co se tam bude vkládat */
     printf("%s %s %s %s %s\n", group_name,name,last_name,birth,name_holiday);

     g_key_file_set_string(keyfile, group_name, "name", name);
     g_key_file_set_string(keyfile, group_name, "last_name", last_name);
     g_key_file_set_string(keyfile, group_name, "birth", birth);
     g_key_file_set_string(keyfile, group_name, "name_holiday", name_holiday);

}

Problém je v tom, že se mi to do souboru neuloží a vůbec nevím co mi tam chybí nebo co mám blbě, takže budu rád za každou radu, protože v tuto chvíli víc asi nevymyslím. Výsledek by měl vypadat asi takhle pro uložení např. Jan, Osel, 4.5.1978, 5.6

[JAN-OSEL]
name=Jan
last_name=Osel
birth=4.5.1978
name_holiday=5.6

Díky :)

Nástroje: Začni sledovat (0) ?Zašle upozornění na váš email při vložení nového komentáře.

Odpovědi

10.7.2009 22:56 Premet
Rozbalit Rozbalit vše Re: Glib key-value file parser
Odpovědět | | Sbalit | Link | Blokovat | Admin

Vyřešeno :)

 

void add_record(gchar *name, gchar *last_name, gchar *birth, gchar *name_holiday)
{
     GKeyFile *keyfile; 
     GKeyFileFlags flags;
     GError *error = NULL;
     gchar group_name[40];
     gchar *buffer;
     gsize length;

     keyfile = g_key_file_new();
     flags = G_KEY_FILE_KEEP_COMMENTS;
 
     if (!g_key_file_load_from_file (keyfile, "date_reminder.conf", flags, &error))
     {
         g_error (error->message);
         return;   
     }

     sprintf(group_name,"%s-%s", name, last_name);
     g_strup(group_name);     
     printf("%s %s %s %s %s\n", group_name,name,last_name,birth,name_holiday);

     if(!g_key_file_has_group(keyfile,group_name)) {
         g_key_file_set_string(keyfile, group_name, "name", name);
         g_key_file_set_string(keyfile, group_name, "last_name", last_name);
         g_key_file_set_string(keyfile, group_name, "birth", birth);
         g_key_file_set_string(keyfile, group_name, "name_holiday", name_holiday);
     } else {
         printf("už existuje\n");
     }

     buffer = g_key_file_to_data(keyfile, &length, NULL);
     g_file_set_contents ("date_reminder.conf", buffer, length, &error);

 
     g_key_file_free(keyfile);
     g_free(buffer);
}
10.7.2009 22:58 Andrej Herceg | skóre: 43
Rozbalit Rozbalit vše Re: Glib key-value file parser
Odpovědět | | Sbalit | Link | Blokovat | Admin
Kombinácia
sprintf(group_name,"%s-%s", name, last_name);
g_strup(group_name);
je dosť zvláštna. Lepšie je asi niečo ako
group_name = g_strdup_printf("%s-%s", name, last_name);
(a potom samozrejme g_free(group_name);)

GKeyFile neukladá automaticky do súboru, o to sa musíš postarať ty. Funkcia g_key_file_to_data vráti reťazec obsahujúci tie kľúče/hodnoty a potom s tým musíš niečo urobiť (v tvojom prípade to musíš uložiť do toho súboru).
10.7.2009 23:01 Andrej Herceg | skóre: 43
Rozbalit Rozbalit vše Re: Glib key-value file parser
Po tom, ako si to zmenil na pole znakov to sprintf už nie je tak zvláštne, ale aj tak je rozumnejšie používať g_strdup_printf.
10.7.2009 23:05 Andrej Herceg | skóre: 43
Rozbalit Rozbalit vše Re: Glib key-value file parser
A posledná poznámka, funkcia g_strup by sa nemala používať (namiesto nej použi g_utf8_strup alebo g_ascii_strup).
10.7.2009 23:07 Premet
Rozbalit Rozbalit vše Re: Glib key-value file parser

Díky,

Já teprv s Glib začínám takže ješte všechny ty funkce tak neznám takže nemám přehled :)

Založit nové vláknoNahoru

Tiskni Sdílej: Linkuj Jaggni to Vybrali.sme.sk Google Del.icio.us Facebook

ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.