Чтение значений из текста конфигурации с помощью glib

У меня есть следующий Config.cfg

[Power]
Power8=8
Temp=5=1001
Hum=7=1002
Link=8=1003
Vol=9=1004

[Power]
Power10=10
Temp=5=1012
Hum=7=1013
Link=8=1014
Vol=9=1015

и с использованием glib я хочу прочитать значения каждой силы. Я хочу что-то вроде «если Power8 = 8, то верните temp, hum, Link, Vol», еще то же самое для Power10 = 10.

Я написал эту функцию

int read_config()
{

 GKeyFile *keyfile;
 GKeyFileFlags flags;
 GError *error = NULL;
 gsize length;
 gchar *temperatura, *humedad, *link, *voltage;


 // Create a new GKeyFile object and a bitwise list of flags.
 keyfile = g_key_file_new ();
 flags = G_KEY_FILE_KEEP_COMMENTS | G_KEY_FILE_KEEP_TRANSLATIONS;

 // Load the GKeyFile from keyfile.conf or return.
 if (!g_key_file_load_from_file (keyfile, "/home/pi/Desktop/Config.cfg", flags, &error))
 {
   g_error (error->message);
   return -1;
 }
  printf("[Power]\n");
 if(g_key_file_get_integer(keyfile,"Power","Power8",NULL) == 8)
 {
   temperatura=g_key_file_get_string(keyfile,"Power","Temp",NULL);
   humedad=g_key_file_get_string(keyfile,"Power","Hum",NULL);
   link=g_key_file_get_string(keyfile,"Power","Link",NULL);
   voltage=g_key_file_get_string(keyfile,"Power","Volt",NULL);
   printf("Power8:%d\n",g_key_file_get_integer(keyfile,"Power","Power8",NULL));
   printf("Temp:%s\n",temperatura);
   printf("Hum:%s\n",humedad);
   printf("Link:%s\n",link);
   printf("Vol:%s\n",voltage);
 }
else
 {
   temperatura=g_key_file_get_string(keyfile,"Power","Temp",NULL);
   humedad=g_key_file_get_string(keyfile,"Power","Hum",NULL);
   link=g_key_file_get_string(keyfile,"Power","Link",NULL);
   voltage=g_key_file_get_string(keyfile,"Power","Volt",NULL);
   printf("Power10:%d\n",g_key_file_get_integer(keyfile,"Power","Power10",NULL));
   printf("Temp:%s\n",temperatura);
   printf("Hum:%s\n",humedad);
   printf("Link:%s\n",link);
   printf("Vol:%s\n",voltage);
 }

}

Но он возвращает мне значения Power10, а также Vol=(Null)

[Power]
Power8=8
Temp=5=1012
Hum=7=1013
Link=8=1014
Vol=(Null)

В чем проблема?


person dali1985    schedule 03.07.2013    source источник


Ответы (1)


документация четко гласит:

Обратите внимание, что в отличие от спецификации Desktop Entry, группы в файлах ключей могут содержать один и тот же ключ несколько раз; последняя запись выигрывает. Файлы ключей также могут содержать несколько групп с одинаковым именем; они объединены вместе.

Таким образом, ваш файл не является допустимым ключевым файлом glib, поскольку он пытается определить один и тот же ключ несколько раз, ожидая, что каждая группа будет «объектом». Это не так работает, к сожалению.

Проблема Vol кажется просто неправильной клавишей, вы звоните с "Volt", но в файле есть Vol.

person unwind    schedule 03.07.2013
comment
Ты прав! Теперь я вижу документацию. Но для моего образования, в чем проблема с Vol=(null)? - person dali1985; 03.07.2013
comment
Я нашел это. У меня была другая декларация имени - person dali1985; 03.07.2013