Lua 读表代码,自动生成字段名字
生活随笔
收集整理的這篇文章主要介紹了
Lua 读表代码,自动生成字段名字
小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
表格格式為
INT STRING INT INT INT INT INT Id Desc Type SceneId OpenId MaxPliesp ClearancePlies 0 第1關(guān) 0 1 -1 110 80 1 第2關(guān) 0 1 0 120 90 2 第3關(guān) 0 2 1 130 100?
1、先給出用到的字符串處理函數(shù)代碼
--字符串分割函數(shù) --傳入字符串和分隔符,返回分割后的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--字符串按位分割函數(shù) --傳入字符串,返回分割后的table,必須為字母、數(shù)字,否則返回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、表格對(duì)象代碼(class見(jiàn)我上上篇文章lua高階用法 OO的實(shí)現(xiàn))
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)?
轉(zhuǎn)載于:https://www.cnblogs.com/mrblue/p/5704399.html
總結(jié)
以上是生活随笔為你收集整理的Lua 读表代码,自动生成字段名字的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 七、数据库技术基础(一)
- 下一篇: video自动全屏播放