表格格式为

INT    STRING    INT    INT    INT    INT    INT
Id Desc Type SceneId OpenId MaxPliesp ClearancePlies
第1关 -
第2关
第3关

1、先给出用到的字符串处理函数代码

--字符串分割函数
--传入字符串和分隔符,返回分割后的table
function string.split(str, delimiter)
if str==nil or str=='' or delimiter==nil then
return nil
end local result = {}
for match in (str..delimiter):gmatch("(.-)"..delimiter) do
table.insert(result, match)
end
return result
end --字符串按位分割函数
--传入字符串,返回分割后的table,必须为字母、数字,否则返回nil
function string.gsplit(str)
local str_tb = {}
if string.len(str) ~= then
for i=,string.len(str) do
new_str= string.sub(str,i,i)
if (string.byte(new_str) >= and string.byte(new_str) <=) or (string.byte(new_str)>= and string.byte(new_str)<=) or (string.byte(new_str)>= and string.byte(new_str)<=) then
table.insert(str_tb,string.sub(str,i,i))
else
return nil
end
end
return str_tb
else
return nil
end
end function string.trim(s)
return (string.gsub(s, "^%s*(.-)%s*$", "%1"))
end

2、表格对象代码(class见我上上篇文章lua高阶用法 OO的实现

TableData = class()

function TableData:ctor()
self.data = {}
end function TableData:GetById(id)
local num = #self.data
for i=,num do
if(id==self.data[i].Id) then
return self.data[i];
end
end
print( 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')
end function TableReader.IsEmptyLine(str)
if(str=='' or str[]=='#') then
return true
end
return false
end local TableFieldType =
{
INT = ,
FLOAT = ,
STRING = ,
UNKNOW =
} 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=,#fields do
local sytax = fields[i] if(Syntax_INT==sytax) then
table.insert(types,TableFieldType.INT)
elseif(Syntax_FLOAT==sytax) then
table.insert(types,TableFieldType.FLOAT)
elseif(Syntax_STRING==sytax) then
table.insert(types,TableFieldType.STRING)
else
table.insert(types,TableFieldType.UNKNOW)
print('Error:',i,'unknow type['..sytax..']')
end
end
return types
end function TableReader.ParseField(str)
local fieldsTable = {}
local fields = string.split(str,'\t') for i=,#fields do
table.insert(fieldsTable,fields[i])
end
return fieldsTable
end function TableReader.ParseValue(fieldsTable,typeTable,str)
local ret = {}
local fields = string.split(str,'\t')
for i=,#fields do
if(TableFieldType.INT==typeTable[i] or TableFieldType.FLOAT==typeTable[i]) then
ret[fieldsTable[i]] = tonumber(fields[i])
elseif(TableFieldType.STRING==typeTable[i]) then
ret[fieldsTable[i]] = fields[i]
else
print('Error:ParseValue',i)
end
end
return ret
end function TableReader.LoadTable(text)
local tab = TableData.new(); local lines = TableReader.ReadAllLines(text)
local lineNum = #lines local types = nil
local fieldsTable = nil for i=,lineNum do
local str = string.trim(lines[i]) if(not TableReader.IsEmptyLine(str)) then if(nil==types) then
types = TableReader.ParseType(str)
elseif(nil==fieldsTable) then
fieldsTable = TableReader.ParseField(str)
else
table.insert(tab.data,TableReader.ParseValue(fieldsTable,types,str))
end end
end return tab
end

4、使用代码

local table = TableReader.LoadTable(str)
local data = table:GetById()
print(data.Desc)

Lua 读表代码,自动生成字段名字的更多相关文章

  1. [转]用Python做一个自动生成读表代码的小脚本

    写在开始(本片文章不是写给小白的,至少你应该知道一些常识!) 大家在Unity开发中,肯定会把一些数据放到配置文件中,尤其是大一点的项目,每次开发一个新功能的时候,都要重复的写那些读表代码.非常烦.来 ...

  2. 代码自动生成工具MyGeneration之一(程序员必备工具)

    代码自动生成工具MyGeneration之一(程序员必备工具) 转 分类: C#2008-08-06 18:12 16064人阅读 评论(12) 收藏 举报 工具数据库相关数据库stringbrows ...

  3. Spring Boot (七)MyBatis代码自动生成和辅助插件

    一.简介 1.1 MyBatis Generator介绍 MyBatis Generator 是MyBatis 官方出品的一款,用来自动生成MyBatis的 mapper.dao.entity 的框架 ...

  4. Mybatis Generator代码自动生成(实体类、dao层、映射文件)

    写了一段时间增删改查有点厌烦,自己找了下网上的例子鼓捣了下自动生成. 首先得有一个配置文件: generatorConfig.xml <?xml version="1.0" ...

  5. Mybatis最入门---代码自动生成(generatorConfig.xml配置)

    [一步是咫尺,一步即天涯] 经过前文的叙述,各位看官是不是已经被Mybatis的强大功能给折服了呢?本文我们将介绍一个能够极大提升我们开发效率的插件:即代码自动生成.这里的代码自动生成包括,与数据库一 ...

  6. 基于数据库的代码自动生成工具,生成JavaBean、生成数据库文档、生成前后端代码等(v6.0.0版)

    TableGo v6.0.0 版震撼发布,此次版本更新如下: 1.UI界面大改版,组件大调整,提升界面功能的可扩展性. 2.新增BeautyEye主题,界面更加清新美观,也可以通过配置切换到原生Jav ...

  7. C# 代码自动生成工具

    开源:C# 代码自动生成工具,支持站点前后台   前言 写这个项目有很长一段时间了,期间也修修改改,写到最后,自己也没咋用(研究方向变化了). 正文 具体项目开源了:https://github.co ...

  8. iBatis 代码自动生成工具 iBator 及 Example 使用

    iBator的下载和安装 官方下载地址:http://people.apache.org/builds/ibatis/ibator/ 安装:见<Eclipse 插件安装> 安装完成后,“F ...

  9. eclipse生成mybatis的逆向工程-mybatis代码自动生成

    首先,工作中一直在使用命令方式的mybatis的代码自动生成,今天把自己的笔记本直接搞一个在eclipse中生成的逆向代码生成工程,方便自己在家学习使用,在搞这个工程的过程中由于自己搞了一套环境,所i ...

随机推荐

  1. js确认删除对话框

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...

  2. 学习web前端学习路程

    学习路程: 1.HTML和CSS基础 2.JavaScript语言 3.jQuery 4.综合网站实践 5.优化及调试

  3. [转]Tomcat启动java.lang.OutOfMemoryError: PermGen space错误解决

    原文地址:http://outofmemory.cn/java/OutOfMemoryError/outofmemoryerror-permgen-space-in-tomcat-with-eclip ...

  4. WPF基础到企业应用系列6——布局全接触

    本文转自:http://knightswarrior.blog.51cto.com/1792698/365351 一. 摘要 首先很高兴这个系列能得到大家的关注和支持,这段时间一直在研究Windows ...

  5. Bzoj1597 [Usaco2008 Mar]土地购买

    Time Limit: 10 Sec  Memory Limit: 162 MBSubmit: 4005  Solved: 1460 Description 农夫John准备扩大他的农场,他正在考虑N ...

  6. [JavaEE]设计模式之SOLID原则

    1. S  The Single Responsibility Principle  单一责任原则 当需要修改某个类的时候原因有且只有一个(THERE SHOULD NEVER BE MORE THA ...

  7. easyUi 页面创建一个toolbar实例

    1.定义toolbar方法 pagination : true, pageSize : 10, pageList : [ 5, 10, 15, 20, 50 ], toolbar : toolbarF ...

  8. c# .Net :Excel NPOI导入导出操作教程之读取Excel文件信息及输出

    c# .Net :Excel NPOI导入导出操作教程之读取Excel文件信息及输出 using NPOI.HSSF.UserModel;using NPOI.SS.UserModel;using S ...

  9. Java学习资料

    微信扫码:http://v.dxsbb.com/jisuanji/Java之家:http://www.javazhijia.com/bs/biye/137.html一些 http://www.ibei ...

  10. 在linux终端远程登陆linux服务器

    在linux终端远程登陆linux服务器   原来在Linux终端远程登陆linux服务器是那么的容易,如果的服务器用户名是abc(也可以是root),只需要在终端输入: 然后电脑会提示输入密码就登录 ...