文章**
---- author: my name
-- date: 2013-12-16 18:52:11
-- csv解析
--
-- 去掉字串左空白
local function trim_left(s)
return string.gsub(s, "^%s+", "");
end
-- 去掉字串右空白
local function trim_right(s)
return string.gsub(s, "%s+$", "");
end
-- 解析一行
local function parseline(line)
local ret = {};
local s = line .. ","; -- 新增逗號,保證能得到最後乙個字段
while (s ~= "") do
--print(0,s);
local v = "";
local tl = true;
local tr = true;
while(s ~= "" and string.find(s, "^,") == nil) do
--print(1,s);
if(string.find(s, "^\"")) then
local _,_,vx,vz = string.find(s, "^\"(.-)\"(.*)");
--print(2,vx,vz);
if(vx == nil) then
return nil; -- 不完整的一行
end
-- 引號開頭的不去空白
if(v == "") then
tl = false;
end
v = v..vx;
s = vz;
--print(3,v,s);
while(string.find(s, "^\"")) do
local _,_,vx,vz = string.find(s, "^\"(.-)\"(.*)");
--print(4,vx,vz);
if(vx == nil) then
return nil;
end
v = v.."\""..vx;
s = vz;
--print(5,v,s);
end
tr = true;
else
local _,_,vx,vz = string.find(s, "^(.-)([,\"].*)");
--print(6,vx,vz);
if(vx~=nil) then
v = v..vx;
s = vz;
else
v = v..s;
s = "";
end
--print(7,v,s);
tr = false;
end
end
if(tl) then v = trim_left(v); end
if(tr) then v = trim_right(v); end
ret[table.getn(ret)+1] = v;
--print(8,"ret["..table.getn(ret).."]=".."\""..v.."\"");
if(string.find(s, "^,")) then
s = string.gsub(s,"^,", "");
end
end
return ret;
end
--解析csv檔案的每一行
local function getrowcontent(file)
local content;
local check = false
local count = 0
while true do
local t = file:read()
if not t then if count==0 then check = true end break end
if not content then
content = t
else
content = content..t
end
local i = 1
while true do
local index = string.find(t, "\"", i)
if not index then break end
i = index + 1
count = count + 1
end
if count % 2 == 0 then check = true break end
end
if not check then assert(1~=1) end
return content
end
--解析csv檔案
function loadcsv(filename)
local ret = {};
local file = io.open(filename, "r")
assert(file)
local content = {}
while true do
local line = getrowcontent(file)
if not line then break end
table.insert(content, line)
end
for k,v in pairs(content) do
ret[table.getn(ret)+1] = parseline(v);
end
file:close()
return ret
end
function csv2lua(filename, filepath, desfilepath )
local t = loadcsv(filepath);
if t then
t = luautil.serialize(filename,t);
endif t then
luautil.writefile(t, desfilepath)
endend--test
--local t= loadcsv("csvtesttxt.csv")
--for k,v in pairs(t) do
-- local tt = v
-- local s = ""
-- for i,j in pairs(tt) do
-- s = string.format("%s,%s",s,j)
-- end
-- print ("",s)
--end
文章**
lua讀取CSV檔案
沒什麼難度,就是snsi轉utf 8的時候必須是utf 8無bom格式的不然會出錯,在eclipse上是看不出什麼錯誤的,但在andstudio上會發現多乙個 的符號。廢話不多說直接上 function string.getcsvfile filepath filepath是你csv的路徑 loca...
lua載入dll檔案套路
在做遊戲的時候,經常會要使用dll來封裝庫給lua來使用。本文將用於說明如何來通過lua來載入dll。在loadlib.c檔案中的127lines static void ll load lua state l,const char path static lua cfunction ll sym ...
修改lua的檔案載入器,自定義lua檔案載入
1.require會搜尋目錄載入檔案 2.require會判斷是否檔案已經載入避免重複載入同一檔案。require使用的路徑和普通我們看到的路徑還有些區別,我們一般見到的路徑都是乙個目錄列表。require的路徑是乙個模式列表,每乙個模式指明一種由虛檔名 require的引數 轉成實檔名的方法。更明...