当前位置: 首页 > news >正文

从零开始:C语言配置文件解析实战(二)—— 数据解析与键值获取

各类资料学习下载合集  
​​https://pan.quark.cn/s/8c91ccb5a474​

在上一篇文章中,我们已经成功地“扫描”了配置文件,并知道了里面有多少条有用的信息。今天,我们将更进一步,把这些有用的信息“请”到我们的程序中,并让它们井井有条地“住”下来,方便我们随时访问。

一、 回顾与目标

上一节,我们完成了 ​​getValidLines​​ 和 ​​isValidLine​​ 两个函数。现在我们手握“有效行数”这个重要信息。本节的核心目标是:

  1. 1. 定义一个“房子”:创建一个C语言结构体(​​struct​​),用来存放每一条键值对(Key-Value)信息。
  2. 2. 批量“盖房子”:根据有效行数,动态地在内存中创建足够多的“房子”(结构体数组)。
  3. 3. “装修入住”:实现一个核心的解析函数 ​​parseFile​​,它会再次读取文件,将每一条有效行的键和值分离,并填入对应的“房子”里。
  4. 4. “按门牌号找人”:实现一个查询函数 ​​getValueByKey​​,让我们能方便地通过一个键(如 "heroName")快速找到它的值(如 "亚瑟")。
  5. 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,对于大多数配置文件来说足够了。同时,我们把新函数的声明也加了进去。

三、 核心实现:解
http://www.dtcms.com/a/343807.html

相关文章:

  • 相机曝光调节与自动曝光控制详解
  • 11、Informer论文笔记
  • 高通Camx相机dump yuv和raw图的抓取方式和查看
  • Linux 软件编程(九)网络编程:IP、端口与 UDP 套接字
  • Jmeter混合业务负载测试指南
  • 定制吹塑服务:塑料成型领域的“柔性制造”新范式
  • 计算机网络:TCP、UDP
  • 管理型交换机通过VLAN划分实现不同IP跨网段通信配置方法
  • JavaEE 初阶第二十期:网络编程“通关记”(二)
  • 微前端qiankun框架,子页面图标样式错乱问题,显示为X
  • Halcon那些事:什么是动态阈值,如何用dyn_threshold分割图片
  • Elasticsearch Rails 实战全指南(elasticsearch-rails / elasticsearch-model)
  • 集成电路学习:什么是K-NN最近邻算法
  • Seaborn数据可视化实战:Seaborn图表定制与数据可视化入门
  • AI+虚拟仿真:以科技之光照亮希望的田野
  • 课小悦系列智能耳机上市,用硬核科技为教育赋能
  • 学习嵌入式第二十三天——数据结构——栈
  • Qt5 文件与数据处理详解
  • NETSDK1045 当前 .NET SDK 不支持将 .NET 8.0 设置为目标。请将 .NET 5.0 或更低版本设置为目标,或使用支持
  • 【FPGA Interlaken协议】
  • 服务器与客户端
  • AI服务器介绍
  • FPGA设计中的信号完整性量化与优化:探索高速数字系统的关键路径
  • 20.9 QLoRA微调实战:1.5B参数Whisper-large-v2在24GB显存实现中文语音识别,CER骤降50%!
  • 企业微信新版搞了个AI功能
  • 构效关系(Structure-Activity Relationship, SAR)分析的标准方法:R基团结构解析
  • Amazon Lambda:无服务器时代的计算革命,解锁多样化应用场景
  • MATLAB入门教程
  • 【PSINS工具箱】MATLAB例程,二维平面上的组合导航,EKF融合速度、位置和IMU数据,4维观测量
  • 如何创建一个Cloudfalare worker项目?