Lua 读表代码,自动生成字段名字
表格格式为
INT STRING INT INT INT INT INT Id Desc Type SceneId OpenId MaxPliesp ClearancePlies 0 第1关 0 1 -1 110 80 1 第2关 0 1 0 120 90 2 第3关 0 2 1 130 100
1、先给出用到的字符串处理函数代码
--字符串分割函数 --传入字符串和分隔符,返回分割后的table function string.split(str, delimiter)if str==nil or str=='' or delimiter==nil thenreturn nilendlocal result = {}for match in (str..delimiter):gmatch("(.-)"..delimiter) dotable.insert(result, match)endreturn result end--字符串按位分割函数 --传入字符串,返回分割后的table,必须为字母、数字,否则返回nil function string.gsplit(str)local str_tb = {}if string.len(str) ~= 0 thenfor i=1,string.len(str) donew_str= string.sub(str,i,i) if (string.byte(new_str) >=48 and string.byte(new_str) <=57) or (string.byte(new_str)>=65 and string.byte(new_str)<=90) or (string.byte(new_str)>=97 and string.byte(new_str)<=122) then table.insert(str_tb,string.sub(str,i,i)) elsereturn nilendendreturn str_tbelsereturn nilend endfunction string.trim(s)return (string.gsub(s, "^%s*(.-)%s*$", "%1")) end
2、表格对象代码(class见我上上篇文章lua高阶用法 OO的实现)
TableData = class()function TableData:ctor()self.data = {} endfunction TableData:GetById(id)local num = #self.datafor i=1,num doif(id==self.data[i].Id) thenreturn self.data[i];endendprint( string.format("nil==TableData:GetById(%d)",id)) return nil; end
3、给出读表器代码
require 'Utility/LuaStringExt' require 'Table/TableData'TableReader = {}function TableReader.ReadAllLines(text)return string.split(text,'\n') endfunction TableReader.IsEmptyLine(str)if(str=='' or str[0]=='#') thenreturn trueendreturn false endlocal TableFieldType = {INT = 0,FLOAT = 1,STRING = 2,UNKNOW = 3 }local Syntax_INT = 'INT' local Syntax_FLOAT = 'FLOAT' local Syntax_STRING = 'STRING'function TableReader.ParseType(str)local types = {}local fields = string.split(str,'\t')for i=1,#fields dolocal sytax = fields[i]if(Syntax_INT==sytax) thentable.insert(types,TableFieldType.INT)elseif(Syntax_FLOAT==sytax) thentable.insert(types,TableFieldType.FLOAT)elseif(Syntax_STRING==sytax) thentable.insert(types,TableFieldType.STRING)elsetable.insert(types,TableFieldType.UNKNOW)print('Error:',i,'unknow type['..sytax..']')endendreturn types endfunction TableReader.ParseField(str)local fieldsTable = {}local fields = string.split(str,'\t')for i=1,#fields dotable.insert(fieldsTable,fields[i])endreturn fieldsTable endfunction TableReader.ParseValue(fieldsTable,typeTable,str)local ret = {}local fields = string.split(str,'\t')for i=1,#fields doif(TableFieldType.INT==typeTable[i] or TableFieldType.FLOAT==typeTable[i]) thenret[fieldsTable[i]] = tonumber(fields[i])elseif(TableFieldType.STRING==typeTable[i]) thenret[fieldsTable[i]] = fields[i]elseprint('Error:ParseValue',i)endendreturn ret endfunction TableReader.LoadTable(text)local tab = TableData.new();local lines = TableReader.ReadAllLines(text)local lineNum = #lineslocal types = nillocal fieldsTable = nilfor i=1,lineNum dolocal str = string.trim(lines[i])if(not TableReader.IsEmptyLine(str)) thenif(nil==types) thentypes = TableReader.ParseType(str)elseif(nil==fieldsTable) thenfieldsTable = TableReader.ParseField(str)elsetable.insert(tab.data,TableReader.ParseValue(fieldsTable,types,str))endendendreturn tab end
4、使用代码
local table = TableReader.LoadTable(str) local data = table:GetById(0) print(data.Desc)
转载于:https://www.cnblogs.com/mrblue/p/5704399.html
Lua 读表代码,自动生成字段名字相关推荐
- java代码自动生成的插件_如何使用插件生成自定义Java 8代码
java代码自动生成的插件 大多数程序员讨厌的一件事就是编写样板代码. 无休止的时间花费在设置实体类和配置数据库连接上. 为了避免这种情况,您可以让Speedment Open Source之类的程序 ...
- golang mysql 自动建表_mysql表结构自动生成golang struct
a lib for golang , generate mysql table schema to golang struct mysql表结构自动生成golang struct github地址 安 ...
- java 生成mysql dto_如何根据动态SQL代码自动生成DTO
当前的状况 一般做数据库相关开发, 除非学习, 否则很少有人愿意直接使用JDBC.本来Java代码就比较啰嗦了,而直接用JDBC写代码之啰嗦简直有些令人发狂!所以在实际开发过程中,我们通常都会使用一些 ...
- 自定义Android注解Part2:代码自动生成
上一期我们已经把butterknife-annotations中的注解变量都已经定义好了,分别为BindView.OnClick与Keep. 如果你是第一次进入本系列文章,强烈推荐跳到文章末尾查看上篇 ...
- Mybatis最入门---代码自动生成(generatorConfig.xml配置)
[一步是咫尺,一步即天涯] 经过前文的叙述,各位看官是不是已经被Mybatis的强大功能给折服了呢?本文我们将介绍一个能够极大提升我们开发效率的插件:即代码自动生成.这里的代码自动生成包括,与数据库一 ...
- Spring Boot (七)MyBatis代码自动生成和辅助插件
一.简介 1.1 MyBatis Generator介绍 MyBatis Generator 是MyBatis 官方出品的一款,用来自动生成MyBatis的 mapper.dao.entity 的框架 ...
- 自动产生fsm代码的工具_代码自动生成工具
构建支持多种数据库类型的代码自动生成工具 背景: 一般的业务代码中写来写去,无外乎是先建好model,然后针对这个model做些CRUD的操作.(主要针对单表的业务操作)针对于数据库dao.mappe ...
- 用java写ods系统_基于数据库的代码自动生成工具,生成JavaBean、生成数据库文档、生成前后端代码等(TableGo v7.0.0版)...
TableGo是基于数据库的代码自动生成工具,低代码编程技术的实现,可以零代码自动生成SpringBoot项目工程.生成JavaBean.生成前后端分离的CRUD代码.生成MyBaits的Mapper ...
- 数据访问层代码自动生成
<%-- Name: 数据访问层代码自动生成 Author: 水木 Description: 用来生成三层结构数据访问层代码 --%> <%@ CodeTemplate Lang ...
最新文章
- html如何给文字添加阴影效果,css中怎么给字体添加阴影效果
- word doc怎么显示base64图片_win10系统word文档打印不出图片怎么办
- oracle 查看并行数据库,Oracle数据库并行查询出错的解决方法
- python时间格式_python 格式化日期
- 初级开发人员的缺点_我希望成为初级开发人员的事情
- 经典算法题--求对策字符串的最大长度
- 【Python】【Flask】Flask 后台发送html页面多种方法
- Ackerman函数 非递归 java_Ackerman(nm)函数的非递归算法.doc
- 【图文】在windows7 下安装和配置Memcached 64-bit for Windows
- 初级程序员面试题总结(一):
- ug冲模标准件库_UG NX插件
- matlab解超静定方程,超定方程和最小二乘法 | 学步园
- 怎样在服务器找回网站后台密码,宝塔面板忘记后台账号密码怎么找回 一条命令轻松搞定...
- 杭州最美的骑行路线在此!趁着春天蹬车撒欢去!
- LAYA和TypeScript制作H5入门——页面制作
- 2022年武汉专精特新小巨人企业奖励补贴以及申报条件汇总
- 【源码】非常有用的Vml图像画板
- Golang实现验证码图片OCR
- java assist_Java-Javaassist(一)
- 2017ACM-ICPC北京区域现场赛 G题 hihocoder1633
热门文章
- 为什么阿里工程师纷纷在内网晒代码?
- php数组制作查找筛选页面,php利用array_search与array_column实现二维数组查找
- Unity Shader着色器优化
- ASP.NET Core微服务(六)——【redis操作】
- ogg replicat 进程 abend 处理
- JavaWeb第一讲 Servlet的工作原理及生命周期
- urllib2 python3错误?用from urllib import request来代替!
- WebService(JAX-WS、XFire、Axis三种)获取客户端ip
- Flask 生成下载文件
- 更改hadoop native库文件后datanode故障