【C 语言】文件操作 ( 配置文件读写 | 读取配置文件 | 函数接口形参 | 读取配置文件的逐行遍历操作 | 读取一行文本 | 查找字符 | 删除字符串前后空格 )
文章目录
- 一、函数接口形参
- 二、读取配置文件的逐行遍历操作
- 1、读取配置文件的逐行遍历操作
- 2、读取一行数据
- 3、查找字符
- 4、删除字符串前后的空格
- 5、完整代码示例
一、函数接口形参
函数作用 : 从 char *filename
文件中 , 查找 char *key
关键字 对应的 值 ; 将查找到的值 写出到 char *value
指针指向的内存中 , 将值的长度写出到 int *value_len
指向的内存中 ;
代码示例 :
/*** @brief read_config_file 读取配置文件* @param filename 文件名* @param key 键* @param value 值* @param value_len 值字符串长度* @return*/
int read_config_file(char *filename /*in*/, char *key /*in*/, char *value/*in out*/, int *value_len /*out*/)
二、读取配置文件的逐行遍历操作
1、读取配置文件的逐行遍历操作
读取配置文件的逐行遍历操作 :
- 读取一行文本数据
- 先判断该行数据中, 是否包含 ‘=’ 字符
- 然后查找该行数据中 , 是否存在 Key 关键字字符串
- 如果存在 Key 关键字 , 则继续查找 Key 关键字右侧是否有 ‘=’ 字符
- 如果找到了 ‘=’ 字符 , 则越过该字符 , 剩下的就是 Value 字符串信息 ;
- 删除 Value 字符串左右两侧的空格信息
- 使用两个指针分别指向 Value 字符串两侧 ;
2、读取一行数据
// 获取一行数据fgets(line_buffer, MAX_LINE, fp);
3、查找字符
// 查找 '=' 字符p = strchr(line_buffer, '=');// 如果没有找到 '=' 字符 , 则退出 , 继续执行下一次循环if (p == NULL){continue;}
4、删除字符串前后的空格
// 获取 Value 起始位置for(;;){// 去掉开始位置的空格if (*p == ' '){p ++ ;}else{start = p;if (*start == '\n'){// 进入到该分支 , 说明 Value 值是空的// 直接退出即可goto End;}break;}}// 获取 Value 结束位置// 从 Value 的不为空格的位置开始遍历for(;;){// 遇到空格或回车 , 说明读取到了最后的位置, 或者换行位置if ((*p == ' ' || *p == '\n')){break;}else{p ++;}}end = p;
5、完整代码示例
// 逐行遍历 配置文件 中的文本数据while (!feof(fp)){// 清空 line_buffer 中的遗留数据 , 避免被上一次写入的数据干扰memset(line_buffer, 0, sizeof(line_buffer));// 获取一行数据fgets(line_buffer, MAX_LINE, fp);// 查找 '=' 字符p = strchr(line_buffer, '=');// 如果没有找到 '=' 字符 , 则退出 , 继续执行下一次循环if (p == NULL){continue;}// 查找 Key 值// 如果找到了 Key 关键字 , 则返回的指针 p 指向 Key 关键字出现的首地址中p = strstr(line_buffer, key);// 如果没有找到 Key 关键字 , 退出执行下一次循环换if (p == NULL){continue;}// 越过 Key 关键字 , 从 Key 关键字后面的内容遍历p = p + strlen(key);// 查找 '=' 字符p = strchr(p, '=');// 如果没有找到 '=' 字符 , 则退出 , 继续执行下一次循环if (p == NULL){continue;}// 越过 '=' 字符 , 从 '=' 字符 后面的内容遍历p = p + 1;// 获取 Value 起始位置for(;;){// 去掉开始位置的空格if (*p == ' '){p ++ ;}else{start = p;if (*start == '\n'){// 进入到该分支 , 说明 Value 值是空的// 直接退出即可goto End;}break;}}// 获取 Value 结束位置// 从 Value 的不为空格的位置开始遍历for(;;){// 遇到空格或回车 , 说明读取到了最后的位置, 或者换行位置if ((*p == ' ' || *p == '\n')){break;}else{p ++;}}end = p;// 通过 间接赋值 设置 Value 值长度*value_len = end - start;// 通过 间接赋值 设置 Value 值数据内容memcpy(value, start, end - start);}
【C 语言】文件操作 ( 配置文件读写 | 读取配置文件 | 函数接口形参 | 读取配置文件的逐行遍历操作 | 读取一行文本 | 查找字符 | 删除字符串前后空格 )相关推荐
- C语言文件的随机读写
C语言文件的随机读写 文件顺序读写,即读写文件只能从头开始,依次读写各个数据.但在实际开发中经常需要读写文件的中间部分,要解决这个问题,就得先移动文件内部的位置指针,再进行读写.这种读写方式称为随机读 ...
- c 语言 字符 查找,C 语言实例 - 查找字符在字符串中出现的次数
C 语言实例 - 查找字符在字符串中出现的次数 C 语言实例 C 语言实例 查找字符在字符串中的起始位置(索引值从 开始). 实例 #include int main() { char str[], ...
- c语言生成随机坐标,C语言 文件的随机读写详解及示例代码
前面介绍的文件读写函数都是顺序读写,即读写文件只能从头开始,依次读写各个数据.但在实际开发中经常需要读写文件的中间部分,要解决这个问题,就得先移动文件内部的位置指针,再进行读写.这种读写方式称为随机读 ...
- c语言生成随机的坐标,C语言文件的随机读写
前面介绍的文件读写函数都是顺序读写,即读写文件只能从头开始,依次读写各个数据.但在实际开发中经常需要读写文件的中间部分,要解决这个问题,就得先移动文件内部的位置指针,再进行读写.这种读写方式称为随机读 ...
- c语言二fseek从文件头移动_编程C语言文件的随机读写
实现随机读写的关键是要按要求移动位置指针,这称为文件的定位. 文件定位 移动文件内部位置指针的函数主要有两个,即rewind()和fseek().rewind函数前面已多次使用过,其调用形式为: ...
- 查找字符串中指定字符的位置c语言,C语言中查找字符在字符串中出现的位置的方法...
C语言strchr()函数:查找某字符在字符串中首次出现的位置 头文件:#include strchr() 用来查找某字符在字符串中首次出现的位置,其原型为: char * strchr (const ...
- 【C 语言】文件操作 ( 配置文件读写 | 框架搭建 | 写出或更新配置文件 | 读取配置文件 )
文章目录 一.写出或更新配置文件 二.读取配置文件 一.写出或更新配置文件 写出或更新配置文件 : 首先 , 使用 字符数组 存储 键值对 信息 ; // 写出 或 更新 的配置项// 数组声明会后 ...
- c语言实现将字符串首尾*删除,C语言实现Trim()函数:删除字符串首尾空格。...
如:" cd dwq ",删除后为"cd dwq". 思路:定义两个指针,一个指向字符串的第一个字符,向后遍历,找到第一个不为空格的字符.另一个指针指向字符 ...
- 【C 语言】文件操作 ( 配置文件读写 | 完整代码示例 ) ★
文章目录 一.头文件 cfg.h 二.核心业务 cfg.c 三.主函数 四.执行结果 一.头文件 cfg.h // 防止多次导入 #ifndef __CFG_H__ #define __CFG_H__ ...
最新文章
- 争夺基础架构主导权,AI 新一轮战争将打响?
- echarts中的世界地图
- UA OPTI501 电磁波 LIH介质中的平面波1 平面波的性质
- boost::hana::decltype_用法的测试程序
- spring aop execution表达式
- TensorFlow载入VGG并可视化每层
- 只看当前分支_看小姐姐用动图展示10大Git命令
- 第一个简单的Servlet
- java中复制图片_2017.5.3 java中 复制图片的4种方式(copy图片只能用字节流对象)...
- 尚硅谷RabbitMQ学习笔记(上)
- 数学实验基于matlab软件,数学实验:基于MATLAB软件
- mac u盘linux 双系统安装教程,苹果电脑怎么安装双系统 苹果电脑安装双系统教程...
- Istio对接虚拟机
- 文本文件(txt或者ttt格式)数据导入OpenGL中绘制花房子
- 列表中循环添加字典出现覆盖现象的问题
- 【Linux】基础指令
- 深度学习基础-损失函数详解
- Gram矩阵+Gram矩阵和协方差矩阵的关系
- 爬了3000万QQ用户数据,挖出了花千骨赵丽颖的QQ号
- [转]打工仔拒绝与砍手党同流合污 因被辞退怒杀主管
热门文章
- 关于如何修改Redmine系统中的字段问题解答
- WinForm创建系统托盘以及操作注册表
- legend3---6、legend3爬坑杂记
- c#一种存储结构解决动态平衡问题
- C# 尝试读取或写入受保护的内存,这通常指示其他内存已损坏。错误类型为:System.AccessViolationException。...
- 在linux下安装配置DNS服务器
- MongoDb 安全配置
- TechEd China 2009 课程幻灯片和代码下载 - MBL311 SQL Server Compact 终极性能调校
- JAVA线程池ScheduledExecutorService周期性地执行任务 与单个Thread周期性执行任务的异常处理...
- zend studio报错