lua載入csv檔案

2021-07-04 01:56:12 字數 3684 閱讀 3952

文章**

---- 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的引數 轉成實檔名的方法。更明...