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

来源:互联网 发布:新浪历史分笔数据接口 编辑:程序博客网 时间:2024/05/08 06:07

设有下面的配置文件(1.txt):

# 简单的“键值”配置文件样例# 支持“=”和“:”两种赋值方式# ① 注释语句采用'#'符号顶格写# ② “键”为由数字或大小写字母组成的串,“值”不限制# ③ “键”及“值”两边可以有空格、制表符(\t)# ③ 配置文件中可以存在空行XYZ=89abc:1233Y=78888N=111ABCM= ABC222Name : Zhang_001Mail: Hello@gmail.com  PosX: 1900PosY : 900Data= 7,999,000

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


#include <stdio.h>#include <string.h>////   删除一个字符串两端的空格//char *DelSpace(char *in);//// 【键】【值】数据结构定义//typedef struct{char key[50];char val[50];}KEY_VAL;void main(){//打开配置文件FILE *fp = fopen("1.txt", "r");if(!fp){printf("配置文件读取失败\n");return;}//定义【键】【值】,但这里没有用到KEY_VAL kv[100];memset(kv, 0x00, sizeof(kv));char tmp[100]; //存放配置文件的每一行//// 解析配置文件//while (fgets(tmp, 100, fp)){//忽略注释语句if (tmp[0] == '#') continue;//忽略空行语句if (tmp[0] == '\n')continue;char key[50] = {0};char val[50] = {0};if (strstr(tmp, "="))//【key=val】样式{sscanf(tmp, "%[0-9a-zA-Z\t ]=%s", key, val);}else if (strstr(tmp, ":"))//【key:val】样式{sscanf(tmp, "%[0-9a-zA-Z\t ]:%s", key, val);}//去掉【key】【val】字符串两边的空格char *k = DelSpace(key);char *v = DelSpace(val);//显示printf("源串: %s\t键= %s, 值= %s\n\n", tmp, k, v);}fclose(fp);}////   删除一个字符串两端的空格//返回修改后的串,小心该函数会修改输入串//char *DelSpace(char *in){char *out = NULL;char *p = in;while((*p == ' ')||(*p == '\t')) p++;//略去字符串前面的空格out = p;//保存输出串地址while(1)//略去字符串后面的空格{if (*p == ' ')break;if (*p == '\n') break;if (*p == '\0') break;if (*p == '\t') break;p++;}*p = '\0';return out;}



原创粉丝点击