游戏筑基开发之利用文件函数取出配置文件(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语言)相关推荐

  1. Python之Pandas:利用Pandas函数实现对表格文件的查之高级查询(类似sql,分组查询等)之详细攻略

    Python之Pandas:利用Pandas函数实现对表格文件的查之高级查询(类似sql,分组查询等)之详细攻略 目录 利用Pandas函数实现对表格文件的查之高级查询(类似sql) 1.分组查询

  2. php 删除文件 unlink,php 删除文件函数unlink及删除文件夹示例

    这篇文章主要为大家详细介绍了php 删除文件函数unlink及删除文件夹示例,具有一定的参考价值,可以用来参考一下. 对php删除文件函数unlink及如何删除文件夹感兴趣的小伙伴,下面一起跟随512 ...

  3. C# 对Ini文件操作(C# ini文件操作类)

    *************************************************** 更多精彩,欢迎进入:http://shop115376623.taobao.com ****** ...

  4. graphic头文件函数_graphics.h头文件

    graphics.h头文件是一款tc操作必备组件.graphics.h头文件主要是运行在win8.win7操作系统上,为用户提供了非常多函数类型,用户只需使用tc编译就可以使用这个软件,是用户进行tc ...

  5. 文件函数python_Python 基础之文件 函数

    今天回顾一下之前学的文件操作相关知识点,对于文件的操作,主要有一下几部分构成: 一.文件的基础知识 1.文件操作的基本流程 文件操作其实可以分成三大部分: 1.打开文件,获取文件句柄并赋予一个变量 2 ...

  6. graphic头文件函数_graphics.h头文件中文版

    graphics.h头文件中文版是一款tc操作运行必备组件,为用户提供非常丰富的图形函数,所有图形函数的原型均在graphics. h中,用户只需使用tc编译就可以使用graphics.h头文件中文版 ...

  7. java读取txt文件函数_Java读取txt文件和写入txt文件的简单实例

    写Java程序时经常碰到要读如txt或写入txt文件的情况,但是由于要定义好多变量,经常记不住,每次都要查,特此整理一下,简单易用,方便好懂! package edu.thu.keyword.test ...

  8. php超强后门在任意位置创建文件,php大马:.user.ini文件构成的超强PHP后门

    这个估计很多同学看了不屑,认为是烂大街的东西了: 那么我来个新的吧:.它比用的更广,不管是nginx/apache/IIS,只要是以fastcgi运行的php都可以用这个方法.我的nginx服务器全部 ...

  9. 传奇M2server用到的文件一些txt或Ini文件解释说明(整理中……)

    1.[FilterItemList.txt]路径[\Envir\]说明:内挂物品名单拾取设置:M2设置:查看→列表信息二→内挂捡取 2.[ItemRuleList.txt]路径[\Envir\]说明: ...

  10. c# 读取INI文件(将内容写入INI文件)

    c#读取INI文件实例 读取ini文件内容,将读取的内容放在指定位置:将内容写入到ini文件中 如图为项目界面 1 c# 读取ini文件方法 1.1 在类中配置API #region API函数声明- ...

最新文章

  1. 分治策略解决幂乘问题
  2. WPF ListView DoubleClick
  3. ThreadLocal的学习
  4. android 查看gpio状态_GPIO子系统重要概念
  5. SAP CRM Fiori BP overview page design
  6. 前端学习(3268):js中this在类中的表现
  7. 基于墨刀的轻音乐播放器——乐享APP原型设计
  8. 使用哈工大LTP做自然语言处理任务基础demo
  9. linux打if语句如何换行,如何在Linux中的列内换行
  10. Java生成和操作Excel文件
  11. 运算符重载的常识性问题
  12. 提高项目39-电子词典
  13. android美团点餐界面,Android 仿美团点餐页面布局介绍
  14. 图灵书单 双十一超低优惠来袭
  15. 转:Windows 7 SP1 RC 开始推送 ┆ 特殊补丁KB976932 ┆ 下载
  16. 哲学家谈“情绪”——欲望以上,理性未满
  17. c语言中x的n次幂程序,请教c语言关于X的N次幂问题?
  18. H5前端性能测试点及优化方法
  19. java消息中间件_java消息中间件
  20. python绘制气象等值线图_用Matplotlib绘制Python等值线图

热门文章

  1. 关系抽取---(二)卷积神经网络
  2. 图论算法——有向图的邻接链表实现
  3. 揭秘React同构应用
  4. 标准库举例:sys、copy
  5. 解密Google、百度搜索引擎揭秘
  6. 博文视点在SD2.0大会上以书会友
  7. 内存、cache和寄存器之间的关系及区别
  8. linux下安装Firefox
  9. keras可视化模型训练过程
  10. hive查看表中列的信息命令_走近大数据之Hive入门(四、Hive的管理)