[寒江孤叶丶的Cocos2d-x之旅_24]Cocos2d-x LUA 解析 Csv文件的方法

[寒江孤叶丶的Cocos2d-x之旅_24]Cocos2d-x LUA 解析 Csv文件的方法,第1张

概述原创文章,欢迎转载,转载请注明:文章来自[寒江孤叶丶的Cocos2d-x之旅系列] 博客地址:http://blog.csdn.net/qq446569365 之前项目用CocoSutdio的数据编辑器导出的Json作为数据文件读取到游戏中,后来发现,效率太低的……低的可怜啊,于是开始选用Excel导出的CSV文件。从http://blog.csdn.net/znxf0702/article/de

原创文章,欢迎转载,转载请注明:文章来自[寒江孤叶丶的Cocos2d-x之旅系列]

博客地址:http://blog.csdn.net/qq446569365

之前项目用CocoSutdio的数据编辑器导出的Json作为数据文件读取到游戏中,后来发现,效率太低的……低的可怜啊,于是开始选用Excel导出的CSV文件。从http://blog.csdn.net/znxf0702/article/details/42142045挖来了一段代码,但是存在一些不适用于被项目的问题。于是着手解决了两个主要问题1.CSV字符串换行的问题,2.第一个字段名有看不见的三个byte的问题。将代码分享出来,希望对大家有帮助

ChangeLog:

1.加入数字检测,现在能够转换为数字的都会以数字的形式存储

--[[-------------------------------------------------    CsvLoader.lua    Created by ArcherPeng on 15-03-18.-------------------------------------------------功能概述:本模块用于读取Excel导出的CSV文件,将读取的结果保存在一个table中本模块支持换行功能,但需要特殊标记在字符串开头加入#rrr表示开启换行,之后每加入一个#rrr则会换一次例如:#rrr普通副本#rrr挑战副本#rrr挂机副本#rrr日常副本#rrr结果为“普通副本挑战副本挂机副本日常副本”loadCsvfile(filePath,indexTitle)filePath  文件的路径indexTitle  作为teble的Key的字段-------------------------------------------------示例代码:--test1local testarr = loadCsvfile("data/test.csv")for k,v in pairs(testarr[1]) do    print(k,v)end--test2local testarr = loadCsvfile("data/test.csv","EquIEID")for k,v)end--]]_csv_log = function(...)    print(string.format(...))endfunction split(str,reps)    local resultStrsList = {};    string.gsub(str,'[^' .. reps ..']+',function(w) table.insert(resultStrsList,w) end );    return resultStrsList;endlocal 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 and (string.trim(content))end--处理str是否需要换行,在字符串前加#rrr表示开启换行,然后所有需要换行的地方加入#rrrlocal function dealStr(str)	if type(str) ~= "string" then 		return str	end	local keyWord = string.sub(str,1,4)	if keyWord ~= "#rrr" then		return str	end 	str = string.sub(str,5)	local strArr = string.split(str,"#rrr")	return table.concat(strArr,"\n")endfunction loadCsvfile(filePath,indexTitle)    if not filePath then return end    filePath = cc.fileUtils:getInstance():fullPathForfilename(filePath)     local alls = {}    local file = io.open(filePath,"r")    while true do    	local line = getRowContent(file)    	if not line then            break    	end    	table.insert(alls,line)    end    local Titles = split(alls[1],",")    for k,v in pairs(Titles) do    	if string.utf8len(Titles[k]) ~= string.len(Titles[k]) then        	_csv_log("修正前:Titles["..k.."]  "..Titles[k].."  "..string.utf8len(Titles[k]).."  "..string.len(Titles[k]))        	Titles[k] = string.sub(Titles[k],string.len(Titles[k]) - string.utf8len(Titles[k]) + 2)        	_csv_log("修正后:Titles["..k.."]  "..Titles[k].."  "..string.utf8len(Titles[k]).."  "..string.len(Titles[k]))        end    end    local ID = 1    local arrs = {}    for i = 2,#alls,1 do        local content = split(alls[i],")        local tabelArrs = {}        local index         local flg = false                for j = 1,#Titles,1 do            tabelArrs[Titles[j]] = tonumber(content[j]) or dealStr(content[j])            -- print("Titles[j]  "..Titles[j].."  "..string.utf8len(Titles[j]).."  "..string.len(Titles[j]))            if indexTitle and indexTitle == Titles[j] then            	index = tonumber(content[j]) or content[j]            	flg = true            end        end        if flg then        	arrs[index] = tabelArrs        else        	arrs[ID] = tabelArrs        end        ID = ID + 1    end    return arrsend_G.APUtils = _G.APUtils or {}_G.APUtils.LoadCsv = _G.APUtils.loadCsvfile or loadCsvfile
总结

以上是内存溢出为你收集整理的[寒江孤叶丶的Cocos2d-x之旅_24]Cocos2d-x LUA 解析 Csv文件的方法全部内容,希望文章能够帮你解决[寒江孤叶丶的Cocos2d-x之旅_24]Cocos2d-x LUA 解析 Csv文件的方法所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/1048580.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-25
下一篇 2022-05-25

发表评论

登录后才能评论

评论列表(0条)

保存