配置文件:
config.ini
# 设备ip
# ip = 10.34.17.241
ip = 10.34.17.6
port = 10005
device =
解析规则:
- 忽略带有"#"打头的行
- 忽略每一行的空格
- 忽略空行
1、使用C语言
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<assert.h>
void parse_config(char *filename)
{
//读取配置文件
FILE *fp = fopen(filename, "r");
assert(fp); //防止配置文件打开失败
char buf[128];
char *p = NULL;
char *delim = " =\n"; // 分隔符为=或者空格或者换行符
//按行读取文件内容
while (fgets(buf, 128, fp) != NULL)
{
//p指向分隔后的字符串的首字符
p = strtok(buf, delim);
//跳过注释行
if (p == NULL || *p == '#')
continue;
while (p)
{
printf("%s ", p);
p = strtok(NULL, delim);
}
printf("\n");
}
}
int main()
{
parse_config("D:\\config.ini");
}
运行结果:
2、使用python
def parse_config(filename):
for line in open(filename):
line = line.strip()
if not line or line[0] == '#':
continue
for v in line.split('='):
v = v.strip()
print(v, end=' ')
print()
parse_config("D:\\config.ini")
运行结果:
结论:
- 使用C语言解析配置文件比较麻烦,需要了解strtok函数的用法,上面的代码解决不了键值对中含有空格;
- python简单但效率低,代码中其实有很多重复操作,但是对于简单的程序完全可以不考虑效率。