2012-02-18 213 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