lua io writing to specific postion
如果我有
foo.txt:
1 2 3 4 | cows = 3 sheep = 2 chicken = 14 dogs = 1 |
我如何编写一个可以更改数字或动物或将元素添加到列表中的 lua 脚本,我查看了 io 上的 lua 文档(http://www.lua.org/manual/5.3/manual. html#6.8),但我仍然不知道如何做到这一点而不做一些愚蠢的事情,比如每次编辑时都重写整行。
作为基本的文件 IO 操作(即不限于 Lua),你不能在已经存在的文件中间插入东西。您可以覆盖数据。您可以附加数据。但是您不能插入数据,这样以前的数据就会在文件中被推到更远的位置。
一般来说,您处理此问题的方式是将文件保存在内存中,然后在用户说要保存数据时写入整个内容。虽然它在内存中,但它只是一个字符串。因此,您可以执行插入字符等操作。
您可以通过读取所有其余数据来制造插入操作,返回您开始读取的位置,写入新内容,然后写入您刚刚读取的其余数据。但除非绝对必要,否则人们通常不会这样做。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 | 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]*)[^\ \ ]*', '%1'..new_value, 1) if cnt == 0 then content = key..' = '..new_value..'\ '..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') |