配置文件中“键=值”(key=val)字符串C语言解析

来源:互联网 发布:怎样从手机淘宝买东西 编辑:程序博客网 时间:2024/05/11 21:27
设有下面的配置文件(1.txt):

[cpp] view plaincopy
  1. # 简单的“键值”配置文件样例  
  2. # 支持“=”和“:”两种赋值方式  
  3. # ① 注释语句采用'#'符号顶格写  
  4. # ② “键”为由数字或大小写字母组成的串,“值”不限制  
  5. # ③ “键”及“值”两边可以有空格、制表符(\t)    
  6. # ③ 配置文件中可以存在空行  
  7.   
  8.   
  9. XYZ =   89  
  10. abc :   1233  
  11.   
  12. Y   =   78888  
  13. N   =   111ABC    
  14. M= ABC222  
  15. Name : Zhang_001  
  16. Mail: Hello@gmail.com           
  17. PosX:    1900  
  18. PosY : 900  
  19. Data    = 7,999,000  

解析程序(里面主要用到了sscanf函数):


[cpp] view plaincopy
  1. #include <stdio.h>  
  2. #include <string.h>  
  3.   
  4. //  
  5. //   删除一个字符串两端的空格  
  6. //  
  7. char *DelSpace(char *in);  
  8.   
  9. //  
  10. // 【键】【值】数据结构定义  
  11. //  
  12. typedef struct  
  13. {  
  14.     char key[50];  
  15.     char val[50];  
  16. }KEY_VAL;  
  17.   
  18.   
  19.   
  20. void main()  
  21. {  
  22.     //打开配置文件  
  23.     FILE *fp = fopen("1.txt""r");  
  24.     if(!fp)  
  25.     {  
  26.         printf("配置文件读取失败\n");  
  27.         return;  
  28.     }  
  29.   
  30.     //定义【键】【值】,但这里没有用到  
  31.     KEY_VAL kv[100];  
  32.     memset(kv, 0x00, sizeof(kv));  
  33.   
  34.     char tmp[100]; //存放配置文件的每一行  
  35.   
  36.     //  
  37.     // 解析配置文件  
  38.     //  
  39.     while (fgets(tmp, 100, fp))  
  40.     {  
  41.   
  42.         //忽略注释语句  
  43.         if (tmp[0] == '#'continue;  
  44.   
  45.         //忽略空行语句  
  46.         if (tmp[0] == '\n'continue;  
  47.   
  48.   
  49.         char key[50] = {0};  
  50.         char val[50] = {0};  
  51.   
  52.   
  53.         if (strstr(tmp, "="))//【key=val】样式  
  54.         {  
  55.             sscanf(tmp, "%[0-9a-zA-Z\t ]=%s", key, val);  
  56.         }  
  57.         else if (strstr(tmp, ":"))//【key:val】样式  
  58.         {  
  59.             sscanf(tmp, "%[0-9a-zA-Z\t ]:%s", key, val);  
  60.         }  
  61.   
  62.       
  63.         //去掉【key】【val】字符串两边的空格  
  64.         char *k = DelSpace(key);  
  65.         char *v = DelSpace(val);  
  66.   
  67.   
  68.         //显示  
  69.         printf("源串: %s\t键= %s, 值= %s\n\n", tmp, k, v);  
  70.   
  71.     }  
  72.   
  73.     fclose(fp);  
  74. }  
  75.   
  76. //  
  77. //   删除一个字符串两端的空格  
  78. //      返回修改后的串,小心该函数会修改输入串  
  79. //  
  80. char *DelSpace(char *in)  
  81. {  
  82.     char *out = NULL;  
  83.     char *p = in;  
  84.   
  85.   
  86.     while((*p == ' ')||(*p == '\t')) p++;   //略去字符串前面的空格  
  87.   
  88.     out = p;    //保存输出串地址  
  89.   
  90.     while(1)    //略去字符串后面的空格  
  91.     {  
  92.         if (*p == ' ')  break;  
  93.         if (*p == '\n'break;  
  94.         if (*p == '\0'break;  
  95.         if (*p == '\t'break;  
  96.   
  97.         p++;  
  98.     }  
  99.     *p = '\0';  
  100.   
  101.   
  102.     return out;  
  103. }  
0 0
原创粉丝点击