使用lua将textarea保存到文件中

时间:2014-03-13 18:14:11

标签: post lua textarea

我有一个使用CGI和LUA的网络服务器(uhttpd)。 我用textarea做了一个表格。 我需要的是将textarea的内容保存在位于/etc/list.txt的文件中 我认为LUA脚本必须读取POST变量,然后将它们保存到本地文件/etc/list.txt。

我已经有了阅读文件的脚本:

function file_exists(file)
  local f = io.open(file, "rb")
  if f then f:close() end
  return f ~= nil
end

function lines_from(file)
  if not file_exists(file) then return {} end
  lines = {}
  for line in io.lines(file) do 
    lines[#lines + 1] = line
  end
  return lines
end

local file = '/etc/list.txt'
local lines = lines_from(file)

print ('<textarea name="mensaje" cols="40" rows="40">')

for k,v in pairs(lines) do
  print(v)
end

print ("</textarea>")

此脚本向我展示了textrea上file.txt的内容。 现在我需要一个按钮&#34; Save&#34;将textarea再次发布到文件中。

感谢您的帮助,祝您度过愉快的一天。

1 个答案:

答案 0 :(得分:0)

小批评:lines_from文件每次调用时都会覆盖全局变量lines。这应该是本地的。在阅读之前打开和关闭文件以查看它是否存在是浪费。该操作可以折叠为lines_from

function lines_from(filename)
  local lines = {}
  local file = io.open(filename)
  if file then 
      for line in file:lines(file) do 
        lines[#lines + 1] = line
      end
      file:close();
  end
  return lines
end

在您的情况下,没有理由将文本作为行阅读。只需阅读所有文件的文字:

function text_from(filename)
  local text = ''
  local file = io.open(filename)
  if file then 
      text = file:read('*a') 
      file:close();
  end
  return text
end

local file = 'test.lua'
local text = text_from(file)

print ('<textarea name="mensaje" cols="40" rows="40">')
print(text)
print ("</textarea>")

要将文本写回文件,只需颠倒过程,在&#34; w +&#34;中打开文件。模式(替换现有数据):

function save_text_to(filename, text)
  local file = io.open(filename, 'w+')
  if file then 
      text = file:write(text);
      file:close();
  end
end

save_text_to('foo', text)