从零开始:C语言配置文件解析实战(二)—— 数据解析与键值获取
各类资料学习下载合集
https://pan.quark.cn/s/8c91ccb5a474
在上一篇文章中,我们已经成功地“扫描”了配置文件,并知道了里面有多少条有用的信息。今天,我们将更进一步,把这些有用的信息“请”到我们的程序中,并让它们井井有条地“住”下来,方便我们随时访问。
一、 回顾与目标
上一节,我们完成了 getValidLines
和 isValidLine
两个函数。现在我们手握“有效行数”这个重要信息。本节的核心目标是:
- 1. 定义一个“房子”:创建一个C语言结构体(
struct
),用来存放每一条键值对(Key-Value)信息。 - 2. 批量“盖房子”:根据有效行数,动态地在内存中创建足够多的“房子”(结构体数组)。
- 3. “装修入住”:实现一个核心的解析函数
parseFile
,它会再次读取文件,将每一条有效行的键和值分离,并填入对应的“房子”里。 - 4. “按门牌号找人”:实现一个查询函数
getValueByKey
,让我们能方便地通过一个键(如 "heroName")快速找到它的值(如 "亚瑟")。 - 5. “人走楼空”:编写一个释放内存的函数
freeSpace
,在程序结束时清理我们申请的内存空间,养成良好的编程习惯。
二、 设计数据结构:为配置信息安个家
每一条有效的配置信息都包含两部分:key
和 value
。使用结构体来封装它们是再合适不过的了。
我们在 file_parse.h
中添加这个结构体定义:
file_parse.h
#ifndef __FILE_PARSE_H__
#define __FILE_PARSE_H__#include <stdio.h>
#include <string.h>
#include <stdlib.h>// 新增:定义配置信息结构体
struct ConfigInfo {char key[64];char value[64];
};// 获取文件有效行数
int getValidLines(const char* filePath);// 判断当前行是否为有效信息
int isValidLine(const char* line);// 新增:解析文件函数
void parseFile(const char* filePath, int lineCount, struct ConfigInfo** pConfigInfo);// 新增:根据Key获取Value函数
char* getValueByKey(const char* key, struct ConfigInfo* configInfo, int lineCount);// 新增:释放内存函数
void freeSpace(struct ConfigInfo** pConfigInfo);#endif // __FILE_PARSE_H__
这里我们定义了 ConfigInfo
结构体,包含两个字符数组成员 key
和 value
,长度都设为64,对于大多数配置文件来说足够了。同时,我们把新函数的声明也加了进去。