Last active
March 3, 2017 08:22
-
-
Save rangercyh/6492791 to your computer and use it in GitHub Desktop.
序列化和反序列化lua表
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
--分割字符串 | |
function sf_Split(str, splitor, nMatchModel) | |
splitor = splitor or ',' | |
nMatchModel = nMatchModel or true | |
local strArray = {} | |
local nStart = 1 | |
local splitorLen = string.len(splitor) | |
local index = string.find(str, splitor, nStart, nMatchModel) | |
while index do | |
strArray[#strArray + 1] = string.sub(str, nStart, index - 1) | |
nStart = index + splitorLen | |
index = string.find(str, splitor, nStart, nMatchModel) | |
end | |
strArray[#strArray + 1] = string.sub(str, nStart, string.len(str)) | |
return #strArray, strArray | |
end | |
--把table里面的可转换为数字的转换为数字 | |
function gf_TableNumberElementToNumber(tb) | |
for k,v in pairs(tb) do | |
if type(v) == "string" and tonumber(v) ~= nil then | |
tb[k] = tonumber(v) | |
elseif type(v) == "table" then | |
tb[k] = gf_TableNumberElementToNumber(v) | |
end | |
end | |
return tb | |
end | |
--序列化和反序列化 | |
function PackSerializedData(SeriData) | |
if type(SeriData) == "string" then | |
if SeriData == "" then | |
return {} | |
else | |
local _, tbContent = sf_Split(SeriData, ";") | |
for k, v in pairs(tbContent) do | |
_, tbContent[k] = sf_Split(v, ",") | |
end | |
return gf_TableNumberElementToNumber(tbContent) | |
end | |
elseif type(SeriData) == "table" then | |
local szContent = "" | |
for k, v in ipairs(SeriData) do | |
for p, q in ipairs(v) do | |
if (type(q) == "number") or (type(q) == "string") then | |
szContent = szContent..q | |
end | |
if p < #v then | |
szContent = szContent.."," | |
end | |
end | |
if k < #SeriData then | |
szContent = szContent..";" | |
end | |
end | |
return szContent | |
end | |
end | |
local test_tb = { | |
[1] = { | |
[1] = 1, | |
[2] = 2, | |
}, | |
[2] = { | |
[1] = 3, | |
[2] = 4, | |
}, | |
[3] = { | |
[1] = 5, | |
[2] = "asdf", | |
}, | |
} | |
local test_str = "1,2;3,4;5,asdf" | |
print(PackSerializedData(PackSerializedData(test_str)) == test_str) |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment