日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

Lua 读表代码,自动生成字段名字

發布時間:2024/6/21 编程问答 30 豆豆
生活随笔 收集整理的這篇文章主要介紹了 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 读表代码,自动生成字段名字的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。