写这玩意的初衷是觉得,每次写遍历代码太麻烦了,有没有办法让一条类似SQL的搜索字符串来解决呢,最终出了这么个玩意
那么怎么用呢,DEMO在下面 这里贴出大概用法
创建一个对象以及他的属性
方式1
CMapStu Stu1;
Stu1.InsertDword("ID", 0x123);
Stu1.InsertInt("LV", 30);
Stu1.InsertInt("COORD", 44);
Stu1.InsertString("名字", "怪物1");
方式2
CLString Data =
_T("HP=100,LV=30,名字=怪物1,距离=1.326,类型=1\r\n")
_T("HP=200,LV=10,名字=怪物2,距离=5.526,类型=3\r\n")
_T("HP=300,LV=30,名字=怪物2,距离=3.426,类型=3\r\n")
_T("HP=400,LV=40,名字=怪物4,距离=8.326,类型=3\r\n")
_T("HP=500,LV=30,名字=怪物3,距离=7.626,类型=4\r\n")
_T("HP=400,LV=20,名字=怪物3,距离=5.326,类型=1\r\n")
_T("HP=400,LV=10,名字=怪物1,距离=2.326,类型=1\r\n");
方式3
//用构造函数创建单一数据
CMapStu Data2(_T("LV=1,ID=0x100,坐标X=100.123,名字='小怪2'"));
方式4
//使用字符串数据转换成 单一数据 字符串最好用 ' ' 括起来
CMapStu Data3;
Data3.StringToData(_T("LV=1,ID=0x100,坐标X=100.123,名字='小怪3'"));
索引方式
//SEACH_DATA_FIRST SEACH_DATA_LAST SEACH_DATA_LIST
//三种查找函数的区别
//第一种 搜索到第一个匹配的条件则立即终止
//第二种 搜索到末尾,然后返回最后一个匹配的条件
//第三种 搜索到末尾,返回所有的匹配列表
//注意 如果是匹配最小值或者匹配最大值 则一定要用SEACH_DATA_LAST 例子
//DWORD类型匹配 ID==0x100
CMapStu Seacher2 = SEACH_DATA_FIRST(StuData, _T("ID==0x200"));
printf("查找 条件 ID==0x200 的对象 , DWORD类型查找必须加 0x\r\n");
printf(Seacher2.DataToStringA().c_str());
printf("\r\n------------------------------------\r\n");
//string类型匹配
CMapStuList Seacher3 = SEACH_DATA_LIST(StuData, _T("名字=='小怪3'"));
printf("查找所有 名字=='小怪3' 的对象列表,如果查找的是字符串 必须加 ' ' \r\n");
printf(Seacher3.DataToStringA().c_str());
printf("\r\n------------------------------------\r\n");
//float类型匹配
CMapStu Seacher4 = SEACH_DATA_FIRST(StuData, _T("坐标X==100.123"));
printf("查找 坐标X==100.123 的对象,如果查找的是浮点必须有 . 比如说100.0 \r\n");
printf(Seacher4.DataToStringA().c_str());
printf("\r\n------------------------------------\r\n");
//最小值匹配类型匹配 匹配ID不为0的最小ID值的对象
CMapStu Seacher5 = SEACH_DATA_LAST(StuData, _T("ID!=0x0 min hex by ID"));
printf("查找 匹配ID不为0的最小ID值的对象 \r\n");
printf(Seacher5.DataToStringA().c_str());
printf("\r\n------------------------------------\r\n");
//查找 等级大于50 并且等级最小的对象
CMapStu Seacher6 = SEACH_DATA_LAST(StuData, _T("LV>50 min int by LV"));
printf("查找 等级大于50 并且等级最小的对象 \r\n");
printf(Seacher6.DataToStringA().c_str());
printf("\r\n------------------------------------\r\n");[/
//查找 坐标<200.123 坐标最大值
CMapStu Seacher7 = SEACH_DATA_LAST(StuData, _T("坐标<200.123 max float by 坐标"));
printf("查找 坐标<200.123 坐标最大值 \r\n");
printf(Seacher7.DataToStringA().c_str());
printf("\r\n------------------------------------\r\n");
+增加where 规则库 支持 整数/小数/十六进制 >= <= = == != <> < > 小数必须带 . 如 19.2 十六进制必须带 0x 支持字符串 == = != <> @= *=
+增加where 规则库 支持 取最大值 最小值功能 支持 整数/小数/十六进制 如 max int by / min hex by / min float by
+增加from 指令 刷新单条数据库 如 from 角色数据
+增加fromlist 指令 刷新多条数据库 如 fromlist 怪物数据
+增加select 指令 选择列表 select * / select name / select name,lv
+增加 数据库操作模式 seacher one / seacher first one /seacher list (对结果保存必须添加操作模式)
+增加print 指令 在控制台或者debugprint中 输出数据
+增加insert 指令,在数据库列表中插入一条数据
+增加set 指令 ,在数据库单条列表中设置数据
+增加排序指令sort min(max) int(float dword hex str) by
其中涉及简单的编译原理理论 规则设计模式 后缀表达式
好了 大致介绍到这里,给大家学习下
[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课