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

相关文章

Java AOP面向切面编程的概念和实现方式

《JavaAOP面向切面编程的概念和实现方式》AOP是面向切面编程,通过动态代理将横切关注点(如日志、事务)与核心业务逻辑分离,提升代码复用性和可维护性,本文给大家介绍JavaAOP面向切面编程的概... 目录一、AOP 是什么?二、AOP 的核心概念与实现方式核心概念实现方式三、Spring AOP 的关

从基础到高级详解Go语言中错误处理的实践指南

《从基础到高级详解Go语言中错误处理的实践指南》Go语言采用了一种独特而明确的错误处理哲学,与其他主流编程语言形成鲜明对比,本文将为大家详细介绍Go语言中错误处理详细方法,希望对大家有所帮助... 目录1 Go 错误处理哲学与核心机制1.1 错误接口设计1.2 错误与异常的区别2 错误创建与检查2.1 基础

C++读写word文档(.docx)DuckX库的使用详解

《C++读写word文档(.docx)DuckX库的使用详解》DuckX是C++库,用于创建/编辑.docx文件,支持读取文档、添加段落/片段、编辑表格,解决中文乱码需更改编码方案,进阶功能含文本替换... 目录一、基本用法1. 读取文档3. 添加段落4. 添加片段3. 编辑表格二、进阶用法1. 文本替换2

MySQL的JDBC编程详解

《MySQL的JDBC编程详解》:本文主要介绍MySQL的JDBC编程,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录前言一、前置知识1. 引入依赖2. 认识 url二、JDBC 操作流程1. JDBC 的写操作2. JDBC 的读操作总结前言本文介绍了mysq

JavaScript中的高级调试方法全攻略指南

《JavaScript中的高级调试方法全攻略指南》什么是高级JavaScript调试技巧,它比console.log有何优势,如何使用断点调试定位问题,通过本文,我们将深入解答这些问题,带您从理论到实... 目录观点与案例结合观点1观点2观点3观点4观点5高级调试技巧详解实战案例断点调试:定位变量错误性能分

ShardingProxy读写分离之原理、配置与实践过程

《ShardingProxy读写分离之原理、配置与实践过程》ShardingProxy是ApacheShardingSphere的数据库中间件,通过三层架构实现读写分离,解决高并发场景下数据库性能瓶... 目录一、ShardingProxy技术定位与读写分离核心价值1.1 技术定位1.2 读写分离核心价值二

从基础到高级详解Python数值格式化输出的完全指南

《从基础到高级详解Python数值格式化输出的完全指南》在数据分析、金融计算和科学报告领域,数值格式化是提升可读性和专业性的关键技术,本文将深入解析Python中数值格式化输出的相关方法,感兴趣的小伙... 目录引言:数值格式化的核心价值一、基础格式化方法1.1 三种核心格式化方式对比1.2 基础格式化示例

Android协程高级用法大全

《Android协程高级用法大全》这篇文章给大家介绍Android协程高级用法大全,本文结合实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友跟随小编一起学习吧... 目录1️⃣ 协程作用域(CoroutineScope)与生命周期绑定Activity/Fragment 中手

Python异步编程之await与asyncio基本用法详解

《Python异步编程之await与asyncio基本用法详解》在Python中,await和asyncio是异步编程的核心工具,用于高效处理I/O密集型任务(如网络请求、文件读写、数据库操作等),接... 目录一、核心概念二、使用场景三、基本用法1. 定义协程2. 运行协程3. 并发执行多个任务四、关键

AOP编程的基本概念与idea编辑器的配合体验过程

《AOP编程的基本概念与idea编辑器的配合体验过程》文章简要介绍了AOP基础概念,包括Before/Around通知、PointCut切入点、Advice通知体、JoinPoint连接点等,说明它们... 目录BeforeAroundAdvise — 通知PointCut — 切入点Acpect — 切面