Prosíme přihlašte se nebo zaregistrujte.

Přihlašte se svým uživatelským jménem a heslem.
Vaše pomoc je stále potřeba!

Autor Téma: Glib key-value file parser [vyřešeno]  (Přečteno 2966 krát)

premet

  • Host
Glib key-value file parser [vyřešeno]
« kdy: 10 Července 2009, 21:19:52 »
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ů
Kód: [Vybrat]
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
Kód: [Vybrat]
[JAN-OSEL]
name=Jan
last_name=Osel
birth=4.5.1978
name_holiday=5.6

Díky  :)
« Poslední změna: 10 Července 2009, 23:00:40 od Premet »

Martin - ViPEr*CZ*

  • Závislák
  • ***
  • Příspěvků: 3047
Re: Glib key-value file parser
« Odpověď #1 kdy: 10 Července 2009, 22:01:25 »
Prolezl jsem ten první odkaz a zdá se to být správně... zkoušel jsi ještě nakonec uvolnit pomocí g_key_file_free ?
Open source is gold way... Mint 17.2, Debian 8.1 Jessie| Ubuntu Wiki (návody) | Google vyhledávač | Qt4 návody

premet

  • Host
Re: Glib key-value file parser
« Odpověď #2 kdy: 10 Července 2009, 22:07:24 »
Jo to jsem zkoušel, teď tam mám tohle, ale pořád nic
Kód: [Vybrat]
void add_record(gchar *name, gchar *last_name, gchar *birth, gchar *name_holiday)
{
     GKeyFile *keyfile;
     GKeyFileFlags flags;
     GError *error = NULL;
     gchar group_name[40];

     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");
     }
 
     g_key_file_free(keyfile);
}

Martin - ViPEr*CZ*

  • Závislák
  • ***
  • Příspěvků: 3047
Re: Glib key-value file parser
« Odpověď #3 kdy: 10 Července 2009, 22:21:27 »
Todle g_key_file_set_string(keyfile, group_name, "birth", birth); má taky nějakou návratovou hodnotu... co to vrací?
Open source is gold way... Mint 17.2, Debian 8.1 Jessie| Ubuntu Wiki (návody) | Google vyhledávač | Qt4 návody

premet

  • Host
Re: Glib key-value file parser
« Odpověď #4 kdy: 10 Července 2009, 22:24:01 »
Todle g_key_file_set_string(keyfile, group_name, "birth", birth); má taky nějakou návratovou hodnotu... co to vrací?
Právě funkce g_key_file_set_string nemá žádnou návratovou hodnotu
http://library.gnome.org/devel/glib/stable/glib-Key-value-file-parser.html#g-key-file-set-string

Martin - ViPEr*CZ*

  • Závislák
  • ***
  • Příspěvků: 3047
Re: Glib key-value file parser
« Odpověď #5 kdy: 10 Července 2009, 22:28:12 »
Sorry moje chyba. Koukal jsem se omylem na funkci s "get".
Takže co to vlastně celý udělá? Vytvoří to soubor date_reminder.conf a v něm nic není?

PS: zkus tam změnit adresu /home/user/date_reminder.conf
« Poslední změna: 10 Července 2009, 22:30:14 od Martin - ViPEr*CZ* »
Open source is gold way... Mint 17.2, Debian 8.1 Jessie| Ubuntu Wiki (návody) | Google vyhledávač | Qt4 návody

premet

  • Host
Re: Glib key-value file parser
« Odpověď #6 kdy: 10 Července 2009, 22:30:36 »
Sorry moje chyba. Koukal jsem se omylem na funkci s "get".
Takže co to vlastně celý udělá? Vytvoří to soubor date_reminder.conf a v něm nic není?
Ne právě ani nevytvoří, pokud ten soubor neexistuje tak to vyhodí akorát chybu nic víc, takže soubor nejspíš musí existovat. Ale jinak po provedení funkce je soubor pořád prázdný, nějak se mi to celý nezdá  ;D

PS: zkus tam změnit adresu /home/user/date_reminder.conf
To na to nebude mít vliv, protože ten soubor to jako otevře, když ho třeba přejmenuju tak už to hodí chybu, takže se souborem to pracuje, akorát do něj nic neuloží.
« Poslední změna: 10 Července 2009, 22:32:27 od Premet »

premet

  • Host
Re: Glib key-value file parser
« Odpověď #7 kdy: 10 Července 2009, 22:36:06 »
Když jsem teď do toho souboru přidal jeden záznam (ručně editací souboru) a zkusil přidat ten stejnej (přes program) tak mi to vyhodilo, že záznam už existuje, takže se souborem to určitě pracuje, jen vyřešit to ukládání  ???

Martin - ViPEr*CZ*

  • Závislák
  • ***
  • Příspěvků: 3047
Re: Glib key-value file parser
« Odpověď #8 kdy: 10 Července 2009, 22:45:44 »
Teď jsem našel nějakej sample kde g_key_file_load_from_file používají jen na načtení hodnot.

https://stage.maemo.org/svn/maemo/projects/haf/tags/hildon-desktop/0.0.0-32/src/hd-home-background.c
Open source is gold way... Mint 17.2, Debian 8.1 Jessie| Ubuntu Wiki (návody) | Google vyhledávač | Qt4 návody

premet

  • Host
Re: Glib key-value file parser
« Odpověď #9 kdy: 10 Července 2009, 22:57:23 »
Teď jsem našel nějakej sample kde g_key_file_load_from_file používají jen na načtení hodnot.

https://stage.maemo.org/svn/maemo/projects/haf/tags/hildon-desktop/0.0.0-32/src/hd-home-background.c
Tak nejvíc díky, už jsem pochopil jak to funguje a už mi to jde  :).
Kód: [Vybrat]
void add_record(gchar *name, gchar *last_name, gchar *birth, gchar *name_holiday)
{
     GKeyFile *keyfile;
     GKeyFileFlags flags;
     GError *error = NULL;
     gchar *group_name;
     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.dat", flags, &error))
     {
         g_error (error->message);
         return;   
     }

     group_name = g_strdup_printf("%s-%s", name, last_name);
     group_name = g_utf8_strup(group_name, 40 * sizeof(gchar));     

     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.dat", buffer, length, &error);

 
     g_key_file_free(keyfile);
     g_free(buffer);
     g_free (group_name);
}

EDIT: Ješte pár kosmetických úprav, co mi poradil někdo na abclinuxu  :)
« Poslední změna: 10 Července 2009, 23:34:38 od Premet »

Martin - ViPEr*CZ*

  • Závislák
  • ***
  • Příspěvků: 3047
Re: Glib key-value file parser [vyřešeno]
« Odpověď #10 kdy: 10 Července 2009, 23:09:13 »
Nemáš zač... jak to začíná na C, tak to by bylo abych se nezapojil :-D

PS: nejsem si jist, ale todle

Kód: [Vybrat]
if (!g_key_file_load_from_file (keyfile, "date_reminder.conf", flags, &error))
{
         g_error (error->message);
         return;   
}

tam možná ani být nemusí, pokud jde jen o ukládání hodnot.
Open source is gold way... Mint 17.2, Debian 8.1 Jessie| Ubuntu Wiki (návody) | Google vyhledávač | Qt4 návody

premet

  • Host
Re: Glib key-value file parser [vyřešeno]
« Odpověď #11 kdy: 10 Července 2009, 23:11:05 »
Nemáš zač... jak to začíná na C, tak to by bylo abych se nezapojil :-D

PS: nejsem si jist, ale todle

Kód: [Vybrat]
if (!g_key_file_load_from_file (keyfile, "date_reminder.conf", flags, &error))
{
         g_error (error->message);
         return;  
}

tam možná ani být nemusí, pokud jde jen o ukládání hodnot.
Musí, protože musím načíst i ty předchozí záznamy, jinak tam bude uložen vždycky jenom jeden  :)

Martin - ViPEr*CZ*

  • Závislák
  • ***
  • Příspěvků: 3047
Re: Glib key-value file parser [vyřešeno]
« Odpověď #12 kdy: 10 Července 2009, 23:15:37 »
Jo jasný chápu... nebyl jsem si právě jistý a nezkoušel jsem to ... díky ;-)
Open source is gold way... Mint 17.2, Debian 8.1 Jessie| Ubuntu Wiki (návody) | Google vyhledávač | Qt4 návody

 

Provoz zaštiťuje spolek OpenAlt.