----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 ~= ""
andstring.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
;
endv =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;
endv = v.."\""
..vx;
s =vz;
--print(5,v,s);
endtr = 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
;
endend
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,"
^,", ""
);
endend
return
ret;
end--
解析csv檔案的每一行
local
function
getrowcontent(file)
local
content;
local check = false
local count = 0
while
true
dolocal t = file:read
()
ifnot t then
if count==0
then check = true
endbreak
endif
not content then
content =t
else
content =content..t
endlocal i = 1
while
true
dolocal index = string.find(t, "\""
, i)
ifnot index then
break
endi = index + 1
count = count + 1
endif count % 2 == 0
then check = true
break
endend
ifnot 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
dolocal line =getrowcontent(file)
ifnot line then
break
endtable.insert
(content, line)
endfor k,v in
pairs(content) do
ret[table.getn(ret)+1] =parseline(v);
endfile:close
()
return
ret
endfunction
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簡單使用,lua工具類編寫,lua表的使用
專案中的工具類編寫,以utils.lua為例 首先建立乙個表。utils utils or 尋找陣列中某個值的下標 utils utils or 尋找陣列中某個值的下標,僅在table中每個值都不一樣時有效 utils.findidxbyvalue function arr,value local ...
LUA相關工具資源
出處 windows平台lua的整合開發環境 lua and wxwidgets的混合體.有自己的帶有偵錯程式的ide。這個ide使用wxlua開發的 eclipse 平台的lua ide brazilian portuguese的一些免費的lua ide outra ide para lua gr...
Lua導表工具
寫了個小工具練手,主要功能是把excel表轉化為程式使用表。可以從xml轉換為lua,json,txt,三種方式。這樣的工具即方便了策劃也方便了程式。先說一下感想吧,最開始寫的時候沒想到有加這麼多功能,最開始的僅僅是處理單張表,三行自定義表頭。後面陸續加功能導致 不太好看,也不好維護,不過還好是乙個...