File io 向特定位置写入lua io
如果我有 foo.txt:File io 向特定位置写入lua io,file-io,lua,File Io,Lua,如果我有 foo.txt: cows = 3 sheep = 2 chicken = 14 dogs = 1 如何编写可以更改数字或动物或向列表中添加元素的lua脚本,我查看了io()上的lua文档,但我仍然不知道如何做到这一点,而不做一些愚蠢的事情,比如每次编辑它时让它重写整行。作为基本的文件io操作(也就是说,不限于Lua),您不能在已经存在的文件中间插入内容。您可以覆盖数据。您可以追加数据。但您不能插入数据,从而使以前的数据在文件中被进一步向下推 一般来说,处理这个问题的
cows = 3
sheep = 2
chicken = 14
dogs = 1
如何编写可以更改数字或动物或向列表中添加元素的lua脚本,我查看了io()上的lua文档,但我仍然不知道如何做到这一点,而不做一些愚蠢的事情,比如每次编辑它时让它重写整行。作为基本的文件io操作(也就是说,不限于Lua),您不能在已经存在的文件中间插入内容。您可以覆盖数据。您可以追加数据。但您不能插入数据,从而使以前的数据在文件中被进一步向下推 一般来说,处理这个问题的方法是将文件保存在内存中,然后在用户要求保存数据时写入整个内容。当文件保存在内存中时,它只是一个字符串。因此,您可以执行插入字符等操作
您可以通过读取中的所有剩余数据,返回开始读取的位置,写入新内容,然后写入刚读取的剩余数据来创建插入操作。但是,除非绝对必要,否则人们通常不会这样做。我有一个使用io库的节存器/加载程序脚本示例。如果你想看一下吗
function add_or_update_data_in_file(key, new_value, filespec)
local file = assert(io.open(filespec))
local content = file:read'*a'
file:close()
content, cnt = content:gsub(
'(%f[%C]%s*'..key..'%s*=[ \t]*)[^\r\n]*',
'%1'..new_value, 1)
if cnt == 0 then
content = key..' = '..new_value..'\n'..content
end
file = assert(io.open(filespec, 'w'))
file:write(content)
file:close()
end
add_or_update_data_in_file('chicken', 13.5, 'foo.txt')