-- 一些大型游戏需要对数据的整理,这样便于修改和统一管理还有修改。常见的有js和csv
-- csv 其实就是都好分割的简单文本结构,所以当作一般的文本来处理就好了,js需要解析,有现成的解析库
---------------------------- csv的处理
--[[ "tab1.csv"
id name age class
1 liuxin 22 5
2 qiqi 23 1
3 qian 13 6
4 nannan 24 3
]]
--[[
function GetLine( filename )
index = 0
myLine = {}
for line in io.lines(filename) do
index = index + 1
myLine[index] = line
end
return index,myLine
end
-- function GetInfo( tab, id, n ) --通过索引id获取第n个元素
-- a,b = string.find(tab[id], ",")
-- return "name"
-- end
-- a,b = GetLine("D:/LUA/tab1.csv")
-- print("sum:",a)
-- for i=1,#b do
-- print(b[i])
-- end
function GetValue( myString )
num = 0
value = {}
if myString ~= nil then
while string.find(myString, ",") ~= nil do
i,j = string.find(myString, ",") --找到标记的起始位置和结尾位置
num = num + 1
value[num] = string.sub(myString, 1, j-1)
myString = string.sub(myString, j+1, string.len(myString)) --剪切 “标记后面” 到 “字符窜末尾”
end
num = num + 1
value[num] = myString
end
return value
end
function GetValueByMark( myString, mark )
num = 0
value = {}
if myString ~= nil then
while string.find(myString, mark) ~= nil do
i,j = string.find(myString, mark)
num = num + 1
value[num] = string.sub(myString, 1, j-1)
myString = string.sub(myString, j+1, string.len(myString))
end
num = num + 1
value[num] = myString
end
return value
end
num,t = GetLine("D:/LUA/tab1.csv")
tab = GetValueByMark(t[2],",")
for i=1,#tab do
print(tab[i])
end
]]
-- 创建一个二维数组 一次性解析csv
function LoadCsv( fileName )
num = 0
tab = {}
for line in io.lines(fileName) do
num = num + 1
curentLine = line --获取一行
--解析这一行信息
index = 0
t = {} -- 这里每次都会清空
while string.find(curentLine,",") do --循环遍历标记
index = index + 1
_begin,_end = string.find(curentLine,",")
t[index] = string.sub(curentLine,1,_begin-1)
curentLine = string.sub(curentLine,_end+1,string.len(curentLine))
end
index = index + 1 --处理最后一个,因为每行末尾没有标记
t[index] = curentLine
tab[num] = t
end
return num, tab
end
num,t = LoadCsv("D:/LUA/tab1.csv")
for i=1,#t do
for j=1,#t[i] do
print(t[i],t[i][j])
end
end
Lua对的io操作也是十分简单方便的,如果你用过c/c++ 那么感觉函数用起来很亲切.hh
就给一篇参考文档很详细:点击打开链接