lua 工具類(一)

2021-09-06 14:18:19 字數 4053 閱讀 2881

--

--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,三種方式。這樣的工具即方便了策劃也方便了程式。先說一下感想吧,最開始寫的時候沒想到有加這麼多功能,最開始的僅僅是處理單張表,三行自定義表頭。後面陸續加功能導致 不太好看,也不好維護,不過還好是乙個...