游戏筑基开发之利用文件函数取出配置文件(ini文件)的数据实体(C语言)
游戏筑基开发之利用文件函数取出配置文件(ini文件)的数据实体(C语言)
ini文件数据如下:
我们需要取数“=”左边的数据以及“=”右边的数据。同时去除“=”左右两边的空格。
例如第一行取得数据应为:key和value。
解决思路
按行取出数据,先取出:key = value。然后在“=”处隔断,分别取出:key , value(此时未去除空格)。然后去除空格即可。
具体实现
以下给出两个方案实现。第一个方案较为容易理解,第二个方案具有更优良的扩充性。(仅提供思路,仍可优化)。
方案一
#include <stdio.h>
#include <string.h>//去空
static void RemoveNull(char* const p)
{char temp[1024] = { 0 };int strLen = strlen(p);/*if (p[0] != ' ')p[strLen - 1] = '\0';*/for (int i = strLen - 1; i >= 0; i--)if (p[i] != ' '){p[i + 1] = '\0';break;}for (int i = 0; i < strLen; i++){if (p[i] != ' '){strcpy(temp, &p[i]);strcpy(p, temp);break;}}
}int main()
{FILE *pFile = fopen("xxx.ini", "r");if (pFile == NULL){printf("文件打开失败!");return 0;}while (feof(pFile) == 0){char buffer[1024] = { 0 };fgets(buffer, 1024, pFile);//printf("%s", buffer);char key[1024] = { 0 };char value[1024] = { 0 };int strLen = strlen(buffer);for (int i = 0; i < strLen; i++){if (buffer[i] == '='){//strcpy使用时,当遇到\0时结束buffer[i] = '\0';strcpy(key, buffer);buffer[i] = '=';strcpy(value, &buffer[i + 1]);RemoveNull(key);RemoveNull(value);//printf("%s==>%s\n", key, value);break;}}}fclose(pFile);return 0;
}
方案二
#include <stdio.h>
#include <string.h>typedef struct tagIniNode
{char key[1024];//存储keychar value[1024];//存储value
}TIniNode, *PTIniNode;typedef struct tagIni
{PTIniNode pNodes;//存储所有数据int len;//当前数据大小int lenMax;//最大数据大小
}TIni, *PTIni;//初始化配置文件
static PTIni InitIni()
{PTIni pIni = malloc(sizeof(TIni));pIni->len = 0;pIni->lenMax = 100;pIni->pNodes = malloc(sizeof(TIniNode) * pIni->lenMax);return pIni;
}//反向初始化(free)
static void UnInitIni(PTIni *ppIni)
{if (*ppIni == NULL)return;free((*ppIni)->pNodes);free(*ppIni);
}//去空
static void RemoveNull(char* const p)
{char temp[1024] = { 0 };int strLen = strlen(p);for (int i = strLen - 1; i >= 0; i--)if (p[i] != ' '){p[i + 1] = '\0';break;}for (int i = 0; i < strLen; i++){if (p[i] != ' '){strcpy(temp, &p[i]);strcpy(p, temp);break;}}
}//插入一条配置文件
static int InsertIni(PTIni pIni, const char* const key, const char* const value)
{if (pIni->len == pIni->lenMax)return 0;for (int i = 0; i < pIni->len; i++){if (strcmp(pIni->pNodes[i].key, key) == 0){memset(pIni->pNodes[i].value, 0, sizeof(TIniNode));strcpy(pIni->pNodes[i].value, value);return 1;}}memset(pIni->pNodes[pIni->len].key, 0, sizeof(TIniNode));memset(pIni->pNodes[pIni->len].value, 0, sizeof(TIniNode));strcpy(pIni->pNodes[pIni->len].key, key);strcpy(pIni->pNodes[pIni->len].value, value);pIni->len++;return 1;
}//从文件中,加载配置文件
static void LoadIni(PTIni pIni, const char* const pPath)
{FILE *pFile = fopen(pPath, "r");if (pFile == NULL){printf("文件打开失败!");return;}while (feof(pFile) == 0){char buffer[1024] = { 0 };fgets(buffer, 1024, pFile);//printf("%s", buffer);char key[1024] = { 0 };char value[1024] = { 0 };int strLen = strlen(buffer);for (int i = 0; i < strLen; i++){if (buffer[i] == '='){/*strcpy使用时,当遇到\0时结束*/buffer[i] = '\0';strcpy(key, buffer);buffer[i] = '=';strcpy(value, &buffer[i + 1]);RemoveNull(key); RemoveNull(value);//printf("%s==>%s\n", key, value);InsertIni(pIni, key, value);break;}}}fclose(pFile);
}//打印获取数据
static void PrintIniNode(PTIni pIni)
{int count = -1;while ((++count) != pIni->len)printf("%s==>%s\n", pIni->pNodes[count].key, pIni->pNodes[count].value);
}int main()
{PTIni pv = NULL;const char* pPath = "xxx.ini";pv = InitIni();LoadIni(pv, pPath);PrintIniNode(pv);UnInitIni(&pv);return 0;
}
游戏筑基开发之利用文件函数取出配置文件(ini文件)的数据实体(C语言)相关推荐
- Python之Pandas:利用Pandas函数实现对表格文件的查之高级查询(类似sql,分组查询等)之详细攻略
Python之Pandas:利用Pandas函数实现对表格文件的查之高级查询(类似sql,分组查询等)之详细攻略 目录 利用Pandas函数实现对表格文件的查之高级查询(类似sql) 1.分组查询
- php 删除文件 unlink,php 删除文件函数unlink及删除文件夹示例
这篇文章主要为大家详细介绍了php 删除文件函数unlink及删除文件夹示例,具有一定的参考价值,可以用来参考一下. 对php删除文件函数unlink及如何删除文件夹感兴趣的小伙伴,下面一起跟随512 ...
- C# 对Ini文件操作(C# ini文件操作类)
*************************************************** 更多精彩,欢迎进入:http://shop115376623.taobao.com ****** ...
- graphic头文件函数_graphics.h头文件
graphics.h头文件是一款tc操作必备组件.graphics.h头文件主要是运行在win8.win7操作系统上,为用户提供了非常多函数类型,用户只需使用tc编译就可以使用这个软件,是用户进行tc ...
- 文件函数python_Python 基础之文件 函数
今天回顾一下之前学的文件操作相关知识点,对于文件的操作,主要有一下几部分构成: 一.文件的基础知识 1.文件操作的基本流程 文件操作其实可以分成三大部分: 1.打开文件,获取文件句柄并赋予一个变量 2 ...
- graphic头文件函数_graphics.h头文件中文版
graphics.h头文件中文版是一款tc操作运行必备组件,为用户提供非常丰富的图形函数,所有图形函数的原型均在graphics. h中,用户只需使用tc编译就可以使用graphics.h头文件中文版 ...
- java读取txt文件函数_Java读取txt文件和写入txt文件的简单实例
写Java程序时经常碰到要读如txt或写入txt文件的情况,但是由于要定义好多变量,经常记不住,每次都要查,特此整理一下,简单易用,方便好懂! package edu.thu.keyword.test ...
- php超强后门在任意位置创建文件,php大马:.user.ini文件构成的超强PHP后门
这个估计很多同学看了不屑,认为是烂大街的东西了: 那么我来个新的吧:.它比用的更广,不管是nginx/apache/IIS,只要是以fastcgi运行的php都可以用这个方法.我的nginx服务器全部 ...
- 传奇M2server用到的文件一些txt或Ini文件解释说明(整理中……)
1.[FilterItemList.txt]路径[\Envir\]说明:内挂物品名单拾取设置:M2设置:查看→列表信息二→内挂捡取 2.[ItemRuleList.txt]路径[\Envir\]说明: ...
- c# 读取INI文件(将内容写入INI文件)
c#读取INI文件实例 读取ini文件内容,将读取的内容放在指定位置:将内容写入到ini文件中 如图为项目界面 1 c# 读取ini文件方法 1.1 在类中配置API #region API函数声明- ...
最新文章
- 分治策略解决幂乘问题
- WPF ListView DoubleClick
- ThreadLocal的学习
- android 查看gpio状态_GPIO子系统重要概念
- SAP CRM Fiori BP overview page design
- 前端学习(3268):js中this在类中的表现
- 基于墨刀的轻音乐播放器——乐享APP原型设计
- 使用哈工大LTP做自然语言处理任务基础demo
- linux打if语句如何换行,如何在Linux中的列内换行
- Java生成和操作Excel文件
- 运算符重载的常识性问题
- 提高项目39-电子词典
- android美团点餐界面,Android 仿美团点餐页面布局介绍
- 图灵书单 双十一超低优惠来袭
- 转:Windows 7 SP1 RC 开始推送 ┆ 特殊补丁KB976932 ┆ 下载
- 哲学家谈“情绪”——欲望以上,理性未满
- c语言中x的n次幂程序,请教c语言关于X的N次幂问题?
- H5前端性能测试点及优化方法
- java消息中间件_java消息中间件
- python绘制气象等值线图_用Matplotlib绘制Python等值线图