状态机学习(二)解析INI文件
题目来自<系统程序员成长计划>
作者:李先静.
状态变化如下
#include <string>
#include <iostream>
using namespace std;string s = "[GRP]\n\
name = def \n\
data = 2016.11.29 \r\n\
; this is a comment \r\n\
str = this is a test \n\
[zhangshan] \n\
;\n\
name = pengjun \n\
data = 3355456";enum STATE
{STAT_NONE = 0,STAT_GROUP,STAT_KEY,STAT_VALUE,STAT_COMMENT
};void IniBufferParse(const string& s)
{STATE state = STAT_NONE;size_t groupStart = 0, groupEnd = 0;size_t commentStart = 0, commentEnd = 0;size_t keyStart = 0, keyEnd = 0;for (size_t i = 0; i < s.size(); i++){switch (state){case STAT_NONE:if (s[i] == '['){ state = STAT_GROUP;groupStart = i+1;}else if (s[i] == '\r' || s[i] == '\n'){state = STAT_NONE;}else if (s[i] == ';'){state = STAT_COMMENT;commentStart = i + 1;}else if (!isspace( s[i]) ){state = STAT_KEY;keyStart = i;}break;case STAT_GROUP:if (s[i] == ']'){ state = STAT_NONE;groupEnd = i;cout << "group = " << s.substr(groupStart, groupEnd - groupStart) << endl;}else if (s[i] == '\r' || s[i] == '\n'){state = STAT_NONE;}break;case STAT_COMMENT:if (s[i] == '\r' || s[i] == '\n'){state = STAT_NONE;commentEnd = i;cout << "comment = " << s.substr(commentStart, commentEnd - commentStart) << endl;break;}break;case STAT_KEY:if (s[i] == '\r' || s[i] == '\n'){state = STAT_NONE;keyEnd = i;string kvString = s.substr(keyStart, keyEnd - keyStart);size_t i = kvString.find_first_of('=');if (i == string::npos)break;cout << "key = " << kvString.substr(0,i-1) << ". value = " << kvString.substr(i+1) << endl;break;}break;default:break;}}}int main()
{IniBufferParse(s);return 0;
}
运行结果
group = GRP
key = name. value = def
key = data. value = 2016.11.29
comment = this is a comment
key = str. value = this is a test
group = zhangshan
comment =
key = name. value = pengjun
请按任意键继续. . .
转载于:https://www.cnblogs.com/itdef/p/6112765.html
状态机学习(二)解析INI文件相关推荐
- AVI音视频封装格式学习(二)——AVI RIFF文件参考
AVI RIFF文件参考 AVI RIFF File Reference 微软AVI文件格式是与捕获,编辑和播放音视频流的应用程序一起使用的RIFF文件规范.通常,AVI文件包含多个不同类型的数据流. ...
- 解决ini-parser解析ini文件中文乱码问题
解决ini-parser解析ini文件中文乱码问题 参考文章: (1)解决ini-parser解析ini文件中文乱码问题 (2)https://www.cnblogs.com/nodegis/p/95 ...
- python解析ini文件
新建一个config.ini文件 [LocalDB] ip=127.0.0.1 prot=3306 user=root passwd=123456 db=proxy python中解析ini文件的库为 ...
- C#学习笔记——读写ini文件
1: using System; 2: using System.Collections.Generic; 3: using System.Linq; 4: using System.Text; 5: ...
- vb 解析ini文件_PHP文件及运行(适合PHP初学者)
PHP文件及运行(适合PHP初学者) PHP文件可包含HTML.JavaScript代码和 PHP代码,换句话说PHP 代码可以嵌入HTML文档.PHP文件名以php为后缀. PHP代码以" ...
- vc中常用文件操作(二) Ini文件操作
在我们写的程序当中,总有一些配置信息需要保存下来,以便完成程序的功能,最简单的办法就是将这些信息写入INI文件中,程序初始化时再读入.具体应用如下: 一.将信息写入.INI文件中. 1.所用的WINA ...
- Python 内置模块之 ConfigParser - 解析 ini 文件
ini配置文件是被configParser直接解析然后再加载的,如果只是修改配置文件,并不会改变已经加载的配置 INI文件结构简单描述 INI文件就是扩展名为"ini"的文件.在W ...
- Java当中解析ini文件对应到JavaBean当中
目录 1.ini文件简介 2.ini文件 3.ini解析工具类 4.示例运行结果 1.ini文件简介 .ini 文件是Initialization File的缩写,即初始化文件,是windows的系统 ...
- PDF学习二:PDF文件物理结构
说明: 在PDF学习一 Hello World中简单提到了PDF文件结构.本文将重点讲PDF文件结构,指的是其文件物理组织方式,决定对象是如何存放在一个PDF文件中, 它们是如何被访问的,如何被更新的 ...
最新文章
- Android 自定义ProgressBar 实现进度圆环
- 2021-11-10 YOLOX训练最新笔记总结(coco格式)
- 自定义控件:QQ气泡效果粘性控件的实现
- Rancher的简单部署和使用
- 【RPC】你应该知道的 RPC 原理
- Github Actions
- go语言的iota是什么意思_go语言基础之iota枚举
- 在线圆周率查询下载工具
- XcodeGhost:墙、感染、信任和欺骗
- 快速学习单反相机基础操作
- css模板 bulma_用Bulma在6分钟内学习CSS框架
- 用matlab道路交通信息化,tiaffic 基于matlab十字路口交通流模拟仿真,多种集合 263万源代码下载- www.pudn.com...
- 微信小程序考勤签到管理系统+后台管理系统
- ibmt60升级linux,【原创】老兵不死,T60最强升级记
- 手把手教你,搭建内网穿透服务
- r720换固态硬盘后如何重装系统_电脑安装完固态硬盘后如何重装系统?
- 一种使用内存做硬盘的方法,提升读写速度
- 来答疑了!关于网易云信 Innovation 2022 开发者大赛,你想知道的都在这儿!
- Microsoft Excel 教程:如何在 Excel 中使用 XLOOKUP 函数?
- NFT如何应用到医疗健康产业
热门文章
- 联想w540笔记本参数_2020年12月笔记本电脑推荐!联想、惠普、华为笔记本电脑推荐!18款高性价比笔记本电脑推荐!!!...
- python爬虫cookie池 与ip绑定_Python爬虫:设置Cookie解决网站拦截并爬取蚂蚁短租
- 串传送指令MOVSB MOVSW
- floatvalue 重写_Java Number floatValue()方法与示例
- Java PriorityQueue clear()方法与示例
- java集合转换_java各种集合的转换
- C++ 常用拷贝和替换算法
- C++ 对引用的理解5
- 【c语言】棋盘游戏--三子棋
- 2018南京区域赛 J-Prime Game