Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/lua/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
File io 向特定位置写入lua io_File Io_Lua - Fatal编程技术网

File io 向特定位置写入lua io

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),您不能在已经存在的文件中间插入内容。您可以覆盖数据。您可以追加数据。但您不能插入数据,从而使以前的数据在文件中被进一步向下推 一般来说,处理这个问题的

如果我有

foo.txt:

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')