Как читать данные из файла в Lua

21

Мне было интересно, есть ли способ прочитать данные из файла или, возможно, просто посмотреть, существует ли он и вернуть true или false

function fileRead(Path,LineNumber)
  --..Code...
  return Data
end
    
задан Yu Hao 26.06.2012 в 07:32
источник
  • stackoverflow.com/questions/4990990/lua-check-if-a-file-exists или stackoverflow.com/questions/5094417/... –  Bart Kiers 26.06.2012 в 10:47

4 ответа

37

Попробуйте следующее:

-- http://lua-users.org/wiki/FileInputOutput

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

-- get all lines from a file, returns an empty 
-- list/table if the file does not exist
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

-- tests the functions above
local file = 'test.lua'
local lines = lines_from(file)

-- print all line numbers and their contents
for k,v in pairs(lines) do
  print('line[' .. k .. ']', v)
end
    
ответ дан Bart Kiers 26.06.2012 в 11:58
источник
6

Вы должны использовать библиотеку ввода-вывода , где вы можете найти все функции в папке io , а затем используйте file:read , чтобы получить содержимое файла.

local open = io.open

local function read_file(path)
    local file = open(path, "rb") -- r read mode and b binary mode
    if not file then return nil end
    local content = file:read "*a" -- *a or *all reads the whole file
    file:close()
    return content
end

local fileContent = read_file("foo.html");
print (fileContent);
    
ответ дан netzzwerg 06.08.2015 в 15:53
источник
2

Имеется библиотека I / O library , но если она доступна, зависит от вашего сервера сценариев (предполагается, где-то встроено lua). Он доступен, если вы используете версию командной строки. полная модель ввода-вывода , скорее всего, то, что вы ищете.

    
ответ дан Mario 26.06.2012 в 10:46
источник
  • Если это будет игра, я бы предпочел добавить вашу собственную функцию-обертку, которую можно вызвать из Lua. В противном случае вы открываете банку червей, предоставляя людям возможность испортить жесткие диски других игроков через аддоны / карты / плагины. –  Mario 26.06.2012 в 11:49
1

Просто небольшое дополнение, если вы хотите разделить текстовый файл, разделенный пробелом, по строкам.

read_file = function (path)
local file = io.open(path, "rb") 
if not file then return nil end

local lines = {}

for line in io.lines(path) do
    local words = {}
    for word in line:gmatch("%w+") do 
        table.insert(words, word) 
    end    
  table.insert(lines, words)
end

file:close()
return lines;
end
    
ответ дан ryadav 19.09.2017 в 11:49
источник