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 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) ~= 0 then
        for i=1,string.len(str) do
            new_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))
            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=1,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[0]==‘#‘) then
        return true
    end
    return false
end

local 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 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=1,#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=1,#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=1,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(0)
print(data.Desc)
时间: 2024-10-16 17:52:44

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

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

写在开始(本片文章不是写给小白的,至少你应该知道一些常识!) 大家在Unity开发中,肯定会把一些数据放到配置文件中,尤其是大一点的项目,每次开发一个新功能的时候,都要重复的写那些读表代码.非常烦.来个实用小工具,大家随便看看. 1 #-*- coding: utf-8 -*- 2 #----------------------------------------------------------# 3 # 版本:python-3.5.0a3-amd64 4 # 功能:生成读表代码文件 5 #

如何根据动态SQL代码自动生成DTO

当前的状况 一般做数据库相关开发, 除非学习, 否则很少有人愿意直接使用JDBC.本来Java代码就比较啰嗦了,而直接用JDBC写代码之啰嗦简直有些令人发狂!所以在实际开发过程中,我们通常都会使用一些框架/库来帮助我们操作数据库.而且开源市场上的选择也比较多,就我个人接触到的有:Hibernate,MyBatis,JdbcTemplate,DbUtils,ActiveRecord,JavaLite等等. 这些框架都能大幅的提高开发效率,对于一些基本CRUD操作来说,虽然各有差异,但总的来说基本是

使用mybatis-plus-generator进行代码自动生成

为了解放程序员的双手,减少重复性代码的编写,推荐使用插件:mybatis-plus-generator 进行代码自动生成.下面我将详细介绍通过 mybatis-plus-generator 插件自动生成 controller.service.mapper.serviceImpl相关代码. 项目工程目录总览如下: 1. 使用 idea 创建 maven 项目,引入相关依赖,项目pom文件如下所示: <?xml version="1.0" encoding="UTF-8&q

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

第一种方式:通过Main方法执行配置文件. ------------------------------------------------------------------------------------------------------------------------------------- 1.创建本文我们将使用的工程Mybatis13,工程结构图如下:[重点文件我们给出,其他配置文件请读者参考前文工程] 2.修改jdbc.properties文件,具体内容如下: jdbc.

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

iBator的下载和安装 官方下载地址:http://people.apache.org/builds/ibatis/ibator/ 安装:见<Eclipse 插件安装> 安装完成后,“File” —> "New" —> "Other..." iBatis 代码自动生成工具 iBator - 低调的华丽 - 辉色空间 选择项目名 —> "New" —> "Other..." —> “N

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

写了一段时间增删改查有点厌烦,自己找了下网上的例子鼓捣了下自动生成. 首先得有一个配置文件: generatorConfig.xml <?xml version="1.0" encoding="UTF-8"?><!DOCTYPE generatorConfiguration        PUBLIC "-//mybatis.org//DTD MyBatis Generator Configuration 1.0//EN"   

mybaits generator 代码自动生成工具使用

mybaits generator 代码自动生成工具使用MyBatis Generator (MBG) 是一个Mybatis的代码生成器,它可以帮助我们根据数据库中表的设计生成对应的实体类,xml Mapper文件,接口以及帮助类(也就是我们可以借助该类来进行简单的CRUD操作),这样就避免了我们每使用到一张表的数据就需要手动去创建对应的类和xml文件,这就帮我们节约了大量的时间去开发和业务逻辑有关的功能,但是如果对联合查询和存储过程您仍然需要手写SQL和对象. 生成方式主要有 Maven 和

MyBatis代码自动生成

MyBatis的代码自动生成的功能,由于MyBatis属于一种半自动的ORM框架,所以主要的工作就是配置Mapping映射文件,但是由于手写映射文件很容易出错,所以可利用MyBatis生成器自动生成实体类.DAO接口和Mapping映射文件.这样可以省去很多的功夫,将生成的代码copy到项目工程中即可. 使用自动生成有很多方式,可以在eclipse中安装插件,但是以下将要介绍的这种方式我认为很轻松,最简单,不需要装插件,只需要下几个jar包即可,把它们放在一个目录下面. 生成代码需要的文件和ja

mybatis-generator 代码自动生成插件

Hibernate 可以选择MyEclipse Datebase Explorer 或者是 Hibernate-tools 等工具来自动生成映射文件和实体类. mybatis 当然也要有!下面简单介绍一个代码自动生成插件:mybatis-generator. mybatis-generator有三种用法:命令行.eclipse插件.maven插件. 作为一个使用idea开发的程序猿来说势必选择maven插件了.其他两种方式就不再此介绍了,因为我没有用过啊--- 仅仅需要简单的三步就可以啦,就是这