2012-02-18 142 views
1

我正在Corona SDK中製作一個應用程序,用於從SD卡中讀取.txt文件,以更清晰的形式呈現數據,然後允許您對其進行編輯。 一些示例文本:如何通過lua編輯文件中特定的文本行?

#207 USER PREFERENCES Time Between Pressure Log Samples 
207=15 
#208 USER PREFERENCES Auto Print Each Pressure Log Sample 
208=No 
#209 USER PREFERENCES Auto Print Each Event Log Entry 
209=No 
#210 USER PREFERENCES Selective Range Printing 
210=1 

基本上,我需要能夠把文本的特定行從文件,編輯它,並把它放回原處,用純的Lua。例如,我可能希望將208=No更改爲208=Yes而不更改文件中的其他任何內容。

我已經搜索了這個網站,谷歌和Corona的API頁面,但似乎沒有什麼我在找。我將不得不閱讀所有文件直到該行,並在該行之後並將它連接在一起?

回答

1

我將不得不閱讀所有的文件,直到該行,然後將它連接在一起?

您不必連接它。只要繼續閱讀文件和存儲行,直到到達想要更改的行。進行更改,將整個文件的其餘部分作爲一個字符串讀取,然後按順序寫入所有先前讀取的行。

這將是這個樣子:

local hFile = io.open(..., "r") --Reading. 
local lines = {} 
local restOfFile 
local lineCt = 1 
for line in hFile:lines() do 
    if(lineCt == ...) then --Is this the line to modify? 
    lines[#lines + 1] = ModifyLine(line) --Change old line into new line. 
    restOfFile = hFile:read("*a") 
    break 
    else 
    lineCt = lineCt + 1 
    lines[#lines + 1] = line 
    end 
end 
hFile:close() 

hFile = io.open(..., "w") --write the file. 
for i, line in ipairs(lines) do 
    hFile:write(line, "\n") 
end 
hFile:write(restOfFile) 
hFile:close() 
+0

我希望的東西更優雅,但如果這就是它所需要的,那就是它所需要的。謝謝。 – 2012-02-19 03:32:39