C高级编程 第七天(文件读写练习)

2024-08-26 04:44

本文主要是介绍C高级编程 第七天(文件读写练习),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

目录

有一个文件如下,包括key:value

 ①根据字符串判断是否是有效行

②计算文件有效行数

③解析文件

④根据key获取对应的value

⑤释放内存


有一个文件如下,包括key:value

 ①根据字符串判断是否是有效行

该字符串只有换行符或者不包含冒号就不算做一行;该字符串包含":"则为有效行数

int isInvalidLine(char* arr)
{if (arr[0] == '\n' || strchr(arr, ':') == NULL)//若此行只有换行符 或者 不包含冒号 就不算做一行{return 0;}return 1;
}

②计算文件有效行数

按行读取文件,若该行是有效行,则行数加一

int getLines(const char* Path)
{FILE* file = fopen(Path, "r");char arr[64] = { 0 };int line = 0;//记录行数if (file != NULL){while (fgets(arr, 1024, file) != NULL)	//按行读取{if (1 == isInvalidLine(arr))	//如果此行有效,则行数加一{line++;}}}return line;
}

③解析文件

将文件中的内容存放到结构体中

int parseFile(const char* filepath, int lines, struct ConfigInfo** configInfo)
{struct ConfigInfo* config = (struct ConfigInfo*)malloc(sizeof(struct ConfigInfo) * lines);FILE* file = fopen(filepath, "r");if (NULL != file){int index = 0;char buff[1024] = { 0 };//将每行读取的数据放入其中while (NULL != fgets(buff, 64, file)){if (1== isInvalidLine(buff)){//清空结构体memset(configInfo[index]->key, 0, 64);memset(configInfo[index]->value, 0, 64);char* arr = strchr(buff, ':');strncpy(configInfo[index]->key, buff, arr - buff);strncpy(configInfo[index]->value, arr+1, strlen(arr+1)-1);//-1是为了不要文件中的换行符printf("key是%s\n", configInfo[index]->key);printf("value是%s\n", configInfo[index]->value);index++;}}memset(buff, 0, 1024);}*configInfo = config;
}

④根据key获取对应的value

char* getValueByKey(char* key, ConfigInfo* configInfo, int lines)
{for (int i = 0; i < sizeof(configInfo) / sizeof(struct ConfigInfo); i++){if (key == configInfo[i].key){return configInfo[i].value;}}return nullptr;
}

⑤释放内存

void freeSpace(ConfigInfo* configInfo)
{if (NULL == configInfo){return;}free(configInfo);configInfo = nullptr;
}

这篇关于C高级编程 第七天(文件读写练习)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1107581

相关文章

C#读写文本文件的多种方式详解

《C#读写文本文件的多种方式详解》这篇文章主要为大家详细介绍了C#中各种常用的文件读写方式,包括文本文件,二进制文件、CSV文件、JSON文件等,有需要的小伙伴可以参考一下... 目录一、文本文件读写1. 使用 File 类的静态方法2. 使用 StreamReader 和 StreamWriter二、二进

Python中你不知道的gzip高级用法分享

《Python中你不知道的gzip高级用法分享》在当今大数据时代,数据存储和传输成本已成为每个开发者必须考虑的问题,Python内置的gzip模块提供了一种简单高效的解决方案,下面小编就来和大家详细讲... 目录前言:为什么数据压缩如此重要1. gzip 模块基础介绍2. 基本压缩与解压缩操作2.1 压缩文

Go语言数据库编程GORM 的基本使用详解

《Go语言数据库编程GORM的基本使用详解》GORM是Go语言流行的ORM框架,封装database/sql,支持自动迁移、关联、事务等,提供CRUD、条件查询、钩子函数、日志等功能,简化数据库操作... 目录一、安装与初始化1. 安装 GORM 及数据库驱动2. 建立数据库连接二、定义模型结构体三、自动迁

Java中的for循环高级用法

《Java中的for循环高级用法》本文系统解析Java中传统、增强型for循环、StreamAPI及并行流的实现原理与性能差异,并通过大量代码示例展示实际开发中的最佳实践,感兴趣的朋友一起看看吧... 目录前言一、基础篇:传统for循环1.1 标准语法结构1.2 典型应用场景二、进阶篇:增强型for循环2.

MySQL主从复制与读写分离的用法解读

《MySQL主从复制与读写分离的用法解读》:本文主要介绍MySQL主从复制与读写分离的用法,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录一、主从复制mysql主从复制原理实验案例二、读写分离实验案例安装并配置mycat 软件设置mycat读写分离验证mycat读

Redis分片集群、数据读写规则问题小结

《Redis分片集群、数据读写规则问题小结》本文介绍了Redis分片集群的原理,通过数据分片和哈希槽机制解决单机内存限制与写瓶颈问题,实现分布式存储和高并发处理,但存在通信开销大、维护复杂及对事务支持... 目录一、分片集群解android决的问题二、分片集群图解 分片集群特征如何解决的上述问题?(与哨兵模

使用Python进行GRPC和Dubbo协议的高级测试

《使用Python进行GRPC和Dubbo协议的高级测试》GRPC(GoogleRemoteProcedureCall)是一种高性能、开源的远程过程调用(RPC)框架,Dubbo是一种高性能的分布式服... 目录01 GRPC测试安装gRPC编写.proto文件实现服务02 Dubbo测试1. 安装Dubb

Apache 高级配置实战之从连接保持到日志分析的完整指南

《Apache高级配置实战之从连接保持到日志分析的完整指南》本文带你从连接保持优化开始,一路走到访问控制和日志管理,最后用AWStats来分析网站数据,对Apache配置日志分析相关知识感兴趣的朋友... 目录Apache 高级配置实战:从连接保持到日志分析的完整指南前言 一、Apache 连接保持 - 性

ShardingSphere之读写分离方式

《ShardingSphere之读写分离方式》:本文主要介绍ShardingSphere之读写分离方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录ShardingSphere-读写分离读写分离mysql主从集群创建 user 表主节点执行见表语句项目代码读写分

mysql中的group by高级用法详解

《mysql中的groupby高级用法详解》MySQL中的GROUPBY是数据聚合分析的核心功能,主要用于将结果集按指定列分组,并结合聚合函数进行统计计算,本文给大家介绍mysql中的groupby... 目录一、基本语法与核心功能二、基础用法示例1. 单列分组统计2. 多列组合分组3. 与WHERE结合使