One method that I thought fairly quickly would be to split the file into a table by lines. You could use the split method provided at
http://lua-users.org/wiki/SplitJoin
-- Compatibility: Lua-5.1
function split(str, pat)
local t = {} -- NOTE: use {n = 0} in Lua-5.0
local fpat = "(.-)" .. pat
local last_end = 1
local s, e, cap = str:find(fpat, 1)
while s do
if s ~= 1 or cap ~= "" then
table.insert(t,cap)
end
last_end = e+1
s, e, cap = str:find(fpat, last_end)
end
if last_end <= #str then
cap = str:sub(last_end)
table.insert(t, cap)
end
return t
end
With the above method, we can split a string by the passed pattern into a table of every instance.
We can now split by the end line character: "n"
The file that we want to remove line 5 from: myFile
This
is
a
sexy
test!
The code we'll write to delete line 5: 'sexy'
local tLines = {}
local nLine = 5 -- Say we don't want line 5.'
local file = fs.open( "myFile", "r" )
local fileContents = file.readAll()
file.close()
-- Compatibility: Lua-5.1
function split(str, pat)
local t = {} -- NOTE: use {n = 0} in Lua-5.0
local fpat = "(.-)" .. pat
local last_end = 1
local s, e, cap = str:find(fpat, 1)
while s do
if s ~= 1 or cap ~= "" then
table.insert(t,cap)
end
last_end = e+1
s, e, cap = str:find(fpat, last_end)
end
if last_end <= #str then
cap = str:sub(last_end)
table.insert(t, cap)
end
return t
end
tLines = split( fileContents, "n" ) -- Split the file string into a table by lines.
local sFile = "" -- This will be the appended file.
for index,value in ipairs( tLines ) do
if index ~= nLine then -- If we're not on line 5.'
sFile = sFile .. value .. "n" -- Read the next line in and add an end line character to it.
end
end
file = fs.open( "myFile", "w" )
file.write( sFile ) -- Write the new contents into the file.
file.close()
The newly appended file: myFile
This
is
a
test!
Hope I helped! :D/>/>