2013-09-25 42 views
1

我有一個文件,它是我正在製作的遊戲的一部分,我正在嘗試使用代碼來操作它。Lua 5.2.1 - 在文件中編輯和保存變量

以下是文件:

tech = 
{ 
    weaponstech = 1.5, 
    armortech = 1.8, 
    shieldstech = 2 
} 

我試圖打開這樣

local file = io.open("tech") 

該文件,然後嘗試將變量「shieldstech」的值更改爲2.2。

我需要這個在每次運行函數時自動發生。

我通常使用單變量文件像這樣:

v = 1 

但只是給我的文件的混亂是難以管理。

所以現在我用我寫技術文件的方式存儲變量。

這是我用來編輯這些單變量文件:

local file = io.open("file", "w") 
file:write("v = "..var) 
file.close() 

但它僅僅是工作太多重寫單行或代碼整個文件,所以我想只是改變和保存變量,像這樣:

local file = io.open("tech", "w") 
shieldstech = 2.2 
file:close() 

但它不會像那樣工作,我知道爲什麼。我不告訴程序編輯文件,我告訴它在該程序的實例中編輯變量。我對文件所做的一切都是打開它,然後關閉它。

你們中的任何人都知道如何做到這一點?

THX,

  • 布倫丹

回答

2

我的建議是使用一些專門爲這項任務了。這裏是一個例子:https://github.com/2ion/ini.lua這將允許您讀取數據,根據需要對其進行儘可能多或者少許的更改,然後將其寫回。

編輯:這對這個依賴性:https://github.com/stevedonovan/Penlight/blob/master/lua/pl/path.lua

可能要代替嘗試inih(雖然這是寫C,所以整合將需要一些更多的知識):http://luarocks.org/repositories/rocks/#lua-inih

+0

請問這個工作在linux上嗎? 如果是這樣我把文件ini.lua放入什麼目錄? – Leviathan

+0

我沒有看到它不會有任何理由。我已經完成了Lua一段時間 - 但它在你的程序包路徑中的某處。 –

0

這將改寫整個文件每次,這是不是很好的表現,但它會工作。考慮使用sqlite數據庫。

local file = io.open("tech", "w") 
file:write("tech = {") 
for p,v in pairs(tech) do file:write(p .. " = " .. v .. ",") end 
file:write("}") 
file:close() 
+0

如果問題得到保證,sqlite是一個很好的建議。一個介於兩者之間的想法會是這樣的:http:// luarocks。org/repositories/rocks /#lgdbm(提供帶索引鍵的單個「表」) - 每個數據集都是不同的文件) –

+1

無需連接'write'中的值:可以使用'file:write(p,「 =「,v,」,「)'。 – lhf

+0

這會表現得更好,但我認爲它隱藏了目的。當然味道的問題。 :) –