Lua table導(dǎo)入及簡化導(dǎo)出


1.前言

這是一個(gè)非常不通用的導(dǎo)入導(dǎo)出!梗顺!(先給自己挖個(gè)坑以后再補(bǔ)成通用)
為了避免導(dǎo)入過于復(fù)雜惰说,所以我將table里的嵌套table都轉(zhuǎn)為一行數(shù)據(jù)

導(dǎo)出前

導(dǎo)出后

適用場景:
嵌套的table的value可以都存在同一行(最好不要有太多嵌套撕蔼!不然會越來越復(fù)雜)窿吩,在導(dǎo)入方法里杨蛋,你必須明確哪幾個(gè)值是屬于哪個(gè)key的值兜材。比如我的存法是將pos的x,y,z都存在前三個(gè),因?yàn)槲业腸hild這個(gè)table里的值的個(gè)數(shù)是不確定的逞力,這樣可以方便后面我取數(shù)據(jù)

OS:如果你想要將table原原本本導(dǎo)出來放在文件里曙寡,用dump就行了,但是這樣導(dǎo)入就很痛苦

2.導(dǎo)出函數(shù)

這個(gè)還可以改進(jìn)寇荧,可以用迭代+for循環(huán)來實(shí)現(xiàn)(具體可參考dump的寫法举庶,過幾天我再改進(jìn)),下面我的實(shí)現(xiàn)僅適用于兩層table

--導(dǎo)出節(jié)點(diǎn)數(shù)據(jù)
    local timeStr = os.date("%Y-%m-%d %H:%M:%S", os.time())   --TODO:time進(jìn)行轉(zhuǎn)換 --%x 
    local path =  "路徑"
    local fileName = "文件名"
    local file = io.open(path .. fileName, "w+")
    file:write("你想寫的備注:" .. timeStr .. "\n".."--posX,posY,posZ,child1,child2.....\n")
    for k,v in pairs(self.currentArray) do
        local strLine = nil
        strLine = "[\""..k.."\"] = "
        strLine = strLine..string.format("{%.2f,%.2f,%d", v.pos.posX, v.pos.posY, v.pos.posZ)
        for key,value in ipairs(v.child) do   
            strLine = strLine..string.format(",%s",value)
        end
        file:write(strLine.."}\n")
    end

    file:flush()
    file:close()

3.導(dǎo)入函數(shù)

因?yàn)槊恳恍械膙alue是通過逗號隔開揩抡,所以取數(shù)據(jù)就需要分隔字符串了户侥,lua沒有函數(shù)镀琉,只能自己動手寫了(這里給function可以傳入一個(gè)符號,那就可以實(shí)現(xiàn)傳入空格或者其他符號都可以截取)

--截取以逗號分隔的字符串
    local splitStr = function (str) 
        local strTable = {}
        local j  = 1
        while string.find(str,",",j) do
            local i = string.find(str,",",j)
            table.insert(strTable,string.sub(str,j,i-1))
            j = i + 1
        end 
        table.insert(strTable,string.sub(str,j))
        return strTable
    end
 local fileName = "文件名"
    --讀取文件
    local path = "路徑"
    local readFile = io.open(path .. fileName,"r")
    local readLine = nil
    local curTemp = {}
    for readLine in readFile:lines() do
        local beginKeyIdx = string.find(readLine,"%[")
        local endKeyIdx = string.find(readLine,"%]")
        if beginKeyIdx~=nil and endKeyIdx~=nil then
            --此時(shí)獲得每行的key
            local idx = string.sub(readLine,beginKeyIdx+2,endKeyIdx-2)
            curTemp[idx]={pos = {posX = 0 ,posY = 0 ,posZ = 0} , child = {}}
            
            local beginValueIdx = string.find(readLine,"{")
            local endValueIdx = string.find(readLine,"}")
            if beginValueIdx~=nil and endValueIdx~=nil then
                --此時(shí)獲得每行的value
                local stringAllPos = string.sub(readLine,beginValueIdx+1,endValueIdx-1)
                local values = splitStr(stringAllPos)
                curTemp[idx].pos.posX = tonumber(values[1])
                curTemp[idx].pos.posY = tonumber(values[2])
                curTemp[idx].pos.posZ = tonumber(values[3])
                local curValuesIdx = 3
                while curValuesIdx< #stringAllPos do
                    curValuesIdx = curValuesIdx + 1
                    table.insert(curTemp[idx].child,values[curValuesIdx])
                end
            end
        end
    end
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末蕊唐,一起剝皮案震驚了整個(gè)濱河市屋摔,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌替梨,老刑警劉巖钓试,帶你破解...
    沈念sama閱讀 212,718評論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異副瀑,居然都是意外死亡弓熏,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,683評論 3 385
  • 文/潘曉璐 我一進(jìn)店門糠睡,熙熙樓的掌柜王于貴愁眉苦臉地迎上來硝烂,“玉大人,你說我怎么就攤上這事铜幽≈托唬” “怎么了?”我有些...
    開封第一講書人閱讀 158,207評論 0 348
  • 文/不壞的土叔 我叫張陵除抛,是天一觀的道長狮杨。 經(jīng)常有香客問我,道長到忽,這世上最難降的妖魔是什么橄教? 我笑而不...
    開封第一講書人閱讀 56,755評論 1 284
  • 正文 為了忘掉前任,我火速辦了婚禮喘漏,結(jié)果婚禮上护蝶,老公的妹妹穿的比我還像新娘。我一直安慰自己翩迈,他們只是感情好持灰,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,862評論 6 386
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著负饲,像睡著了一般堤魁。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上返十,一...
    開封第一講書人閱讀 50,050評論 1 291
  • 那天妥泉,我揣著相機(jī)與錄音,去河邊找鬼洞坑。 笑死盲链,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播刽沾,決...
    沈念sama閱讀 39,136評論 3 410
  • 文/蒼蘭香墨 我猛地睜開眼瓢剿,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了悠轩?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,882評論 0 268
  • 序言:老撾萬榮一對情侶失蹤攻泼,失蹤者是張志新(化名)和其女友劉穎火架,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體忙菠,經(jīng)...
    沈念sama閱讀 44,330評論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡何鸡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,651評論 2 327
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了牛欢。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片骡男。...
    茶點(diǎn)故事閱讀 38,789評論 1 341
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖傍睹,靈堂內(nèi)的尸體忽然破棺而出隔盛,到底是詐尸還是另有隱情,我是刑警寧澤拾稳,帶...
    沈念sama閱讀 34,477評論 4 333
  • 正文 年R本政府宣布吮炕,位于F島的核電站,受9級特大地震影響访得,放射性物質(zhì)發(fā)生泄漏龙亲。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 40,135評論 3 317
  • 文/蒙蒙 一悍抑、第九天 我趴在偏房一處隱蔽的房頂上張望鳄炉。 院中可真熱鬧,春花似錦搜骡、人聲如沸拂盯。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,864評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽磕仅。三九已至,卻和暖如春簸呈,著一層夾襖步出監(jiān)牢的瞬間榕订,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,099評論 1 267
  • 我被黑心中介騙來泰國打工蜕便, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留劫恒,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 46,598評論 2 362
  • 正文 我出身青樓,卻偏偏與公主長得像两嘴,于是被迫代替她去往敵國和親丛楚。 傳聞我的和親對象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,697評論 2 351

推薦閱讀更多精彩內(nèi)容