加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

cocos2dx lua解析csv成lua配置文件,方便程序调用

发布时间:2020-12-14 19:38:55 所属栏目:百科 来源:网络整理
导读:我很喜欢去读笨木头的文章,简单的说我是笨木头的粉丝! 这里读了笨木头的文章之后,引用了 Cocos2d-x Lua 读取Csv文件,更方便的使用数据 这篇文件的数据,写了一个用 lua 解析 csv 成 配置文件,方便程序调用,如果用cocos2dx lua写程序的话,可以这样子来

我很喜欢去读笨木头的文章,简单的说我是笨木头的粉丝!这里读了笨木头的文章之后,引用了Cocos2d-x Lua 读取Csv文件,更方便的使用数据这篇文件的数据,写了一个用lua解析csv配置文件,方便程序调用,如果用cocos2dx lua写程序的话,可以这样子来用cha.MissionEntry[1].Index

这里是一段全lua代码:
--读取文件内容,返回一个字符串
function getFile(file_name)
  local f = assert(io.open(file_name,'r'))  --确保读取文件不会错误
  local string = f:read("*all") --读取文件的所有内容
  f:close()  --这里记得关闭文件指针
  return string 
end

function split(str,reps)  --这里是分割字符串的函数
      local resultStrsList = {}
      string.gsub(str,'[^' .. reps ..']+',function(w) table.insert(resultStrsList,w) end )
      return resultStrsList
end

function loadCsvFile(filePath)
      --读取文件
      local data = getFile(filePath)
      --按行划分
      local lineStr = split(data,'nr')
      --[[从第三行开始保存(第一行是标题,第二行是注释,后面的行才是内容)
      
            用二维数组保存:arr[ID][属性标题字符串]
      --]]
      local titles = split(lineStr[1],",")
      --打印第一行的数据
      --print(titles[1]..":"..titles[2])
      for ii=1,#titles,1 do
            print(titles[ii])
      end
      
      local ID = 1
      local arrs = {}
      print(#lineStr)

      local file = io.open("C:/Users/MissionEntry——test.lua","w")  --这里会创建一个新的文件MissionEntry——test.lua
      assert(file)
      file:write("cha = {}n")
      file:write("cha.MissionEntry = ")
      file:write("{")
      file:write("n")
      
    


      for i = 3,#lineStr,1 do
            -- 一行中,每一列的内容
            local content = split(lineStr[i],")
            --以标题作为索引,保存每一列的内容,取值的时候这样取:arrs[1].Title
            arrs[ID] = {}
            file:write("             ")
            file:write("[")
            file:write(ID)
            file:write("]={")
            for j=1,1 do
                  arrs[ID][titles[j]] = content[j]
                  file:write(titles[j])
                  file:write("=")
                  if type(content[j]) == "number" then
                        file:write(content[j])
                  end

                  if type(content[j]) == "string" then
                        
                        if tonumber(content[j]) then  --这里是判断数字,如果为真,就写数字
                              file:write(content[j])
                        else
                              file:write(string.format("%q",content[j])) --如果不是数字,就写带有双引号的字符串
                        end
                        
                  end

                  if j ~= #content then  --这里可以判断是最后一个就要写“}”
                        file:write(",")
                  else
                        file:write("}")
                  end
                  
            end
            if i ~= #lineStr then --这里可以判断是最后一个就要写"",也就是空字符串
                  file:write(",")
            else
                  file:write("")
            end
            
            file:write("n")
            file:write("n")

            ID = ID + 1
      end
      file:write("}")
      file:close()
      return arrs
end


local function main()
      local csvConfig = loadCsvFile("C:/Users/MissionEntry.csv")
end


main()


 
 
 上面的一段代码是去读一个MissionEntry.csv文件,也就是下面的图片 
执行了上面这段lua代码之后,就会生成一个MissionEntry——test.lua文件,这个文件是你自己命名的,打开这个文件就是下面这段内容了



然后我们在别的lua文件引用的时候,就用这段代码去拿
Summary = require ("MissionEntry") --读取文件,这是文件的路径
Summary.MissionEntry[1].Index


这样就方便很多了,执行lua代码,我是用这个编辑器的,LUA编辑调试器

注:第一次写博客,写的不好,还请见谅,也欢迎各位大神指导

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读