C++ Enum转Lua Table工具

观察C++ Enum结构

总结结构

enum GameMessage
{
//******* ///******************
GM_GAMESERVER_INIT_OK = 101,//逻辑服务器初始化完成消息(共享内存部分)
GM_DATABASESERVER_INIT_OK,//数据库服务器初始化完成
//GM_REGISTER_GAME_SERVER,
/*************** 仙盟开始 *************************/
SM_PILL_RETURN,
}

分析结构

  • enum GameMessage开头
  • {}中包含所有枚举注释
  • 每一行可能为枚举或注释
    • 枚举 (带,号 带枚举值 带注释)
    • 注释(//开头 ///开头 /*/包含)

定义每行的结构类

public class EnumLineStream
{
public string name;//枚举名
public int valuse;//枚举值
public string annotation;注释
public bool isStart;是否是开头{
public bool isEnd;是否是结尾}
}

读取文件 关键API

StreamReader sr = new StreamReader(路径, Encoding.Default);
string line;
while ((line = sr.ReadLine()) != null)
{
解析(line)
}

解析思想

  • 判断该行是否为{或}
  • 判断该行是否为空
  • 判断该行是否为注释(//开头 ///开头 /*/包含)
  • 判断该行是否为枚举(带,号 带枚举值 带注释)

根据解析获得的数据生成文件 关键API

string filePath = Directory.GetCurrentDirectory() + "/GameMessage.lua";//保存文件路径

FileStream fileStream = new FileStream(filePath, FileMode.Create, FileAccess.ReadWrite);//创建文件

StreamWriter streamWriter = new StreamWriter(fileStream);
StringBuilder stringBuilder = new StringBuilder();
for (int i = 0; i < data.Count; i++)
{
//。。。。读取数据 stringBuilder.AppendLine(数据);//添加并换行
} streamWriter.Write(stringBuilder);//写入文件
streamWriter.Close();//关闭文件

C++ Enum 转 Lua Table工具的更多相关文章

  1. lua table integer index 特性

    table.maxn (table) Returns the largest positive numerical index of the given table, or zero if the t ...

  2. 树形打印lua table表

    为方便调试lua程序,往往想以树的形式打印出一个table,以观其表内数据.以下罗列了三种种关于树形打印lua table的方法;法一 local print = print local tconca ...

  3. lua table 排序--满足多条件排序

    前提 假设 一个小怪 有三种属性,等级(level).品质(quality).id(pid) 我们需要对他们进行排序,两种排序情况,第一是单一属性排序,比如按照等级进行排序,或者多种属性进行优先级排序 ...

  4. 详解LUA开发工具及其环境配置

    LUA开发工具及其环境配置是本文要介绍的内容,主要是来了解并学习lua开发工具的使用和环境的配置,第一次接触LUA的话,就跟本人一起学习吧.看我能不能忽悠到你. LUA是语言,那么一定有编写的工具.第 ...

  5. cocos2d-x lua table数据存储

    cocos2d-x lua table数据存储 version: cocos2d-x 3.6 1. 将table转为json http://blog.csdn.net/songcf_faith/art ...

  6. cocos2d-x lua table与json的转换

    cocos2d-x lua table与json的转换 version: cocos2d-x 3.6 1.引入json库 require("src/cocos/cocos2d/json&qu ...

  7. Lua table使用

    days = {"Sunday", "Monday", "Tuesday", "Wednesday", "Th ...

  8. lua table表

    lua table表 语法结构 创建一个 table 直接使用 "{}" 即可 table1 = {} -- 赋值 table1["name"] = " ...

  9. lua table表判断是否为空

    官方手册里早已经给了答案,那就是靠lua内置的next函数 即如此用: a = {} if next(a) == nil then next其实就是pairs遍历table时用来取下一个内容的函数. ...

随机推荐

  1. 2018.12.08 codeforces 939E. Maximize!(二分答案)

    传送门 二分答案好题. 题意简述:要求支持动态在一个数列队尾加入一个新的数(保证数列单增),查询所有子数列的 最大值减平均值 的最大值. 然而网上一堆高人是用三分做的. 我们先考虑当前的答案有可能由什 ...

  2. java.lang.ClassNotFoundException: org.apache.juli.logging.LogFactory的解决办法

    Tomcat7早就出来正式版,但是一直都没有用过,尤其是针对于我还一直在用Myeclipse6.5的人来说,它在配置tomcat的时候没有tomcat7的选项,所以就报了错误信息. java.lang ...

  3. mysql学习之路_乱码问题

    中文数据问题: 中文数据问题本质就说字符集问题, 计算机只识别二进制,人类识别符号:需要友谊个二进制与字符对应关系(字符集). 报错:服务器没有识别对应的四个字节. 服务器认为的数据是utf—8,一个 ...

  4. thinkphp3.2 链接数据库测试

    配置数据库: 在Application/Home/config.php文件中设置: <?php return array( 'DB_TYPE' => 'mysql', // 数据库类型 ' ...

  5. 事件同步(一)-——CreateEvent( )事件对象实现线程同步

    事件对象分为两类:人工重置事件对象和自动重置事件对象.对于人工重置事件对象,可以同时有多个线程等待到事件对象,成为可调度线程. 对于自动重置事件对象,等待该事件对象的多个线程只能有一个线程成为可调度线 ...

  6. command not found Operation not permitted

    mysql -uroot -p  报错误:command not found 因为苹果在OS X 10.11中引入的SIP特性使得即使加了sudo(也就是具有root权限)也无法修改系统级的目录,其中 ...

  7. 终端简单使用 &vim编写代码

    vim简单实用 & 用vim编写代码 ##  简单介绍  ## vi 1.c 建立1.c(文件存在,则打开1.c) vi共有三种模式: 按esc进入指令模式 按i进入编辑模式(按i光标位置不变 ...

  8. web-day3

    第3章WEB03- JS篇 今日任务 使用JS完成图片轮播效果 使用JS完成页面定时弹出广告 使用JS完成表单的校验 使用JS完成表格的隔行换色 使用JS完成复选框的全选效果 使用JS完成省市联动效果 ...

  9. browsersync

    以后不需要F5了 之前实现自动刷新,是通过livereload,它需要插件比较麻烦:现在改为browsersync. BrowserSync,迅捷从免F5开始 完整选项 不止是自动刷新:默认就有 UI ...

  10. UITabBarItem title 和self.title设置不同的标题

    self.navigationItem.title = @"my title"; //sets navigation bar title. self.tabBarItem.titl ...