Comment lire les données d'un fichier dans Lua

Je me demandais s'il y avait un moyen de lire les données d'un fichier ou peut-être juste pour voir s'il existe et retourner un true ou false

function fileRead(Path,LineNumber)
  --..Code...
  return Data
end
22
lua
demandé sur Yu Hao 2012-06-26 09:32:27

4 réponses

Essayez ceci:

-- 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
42
répondu Bart Kiers 2012-06-26 09:58:51

Vous devez utiliser la bibliothèque d'E/S où vous pouvez trouver toutes les fonctions de la table io, puis utiliser file:read pour obtenir le contenu du fichier.

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);
6
répondu netzzwerg 2015-08-06 13:53:37

Il y a une bibliothèque d'e/s disponible, mais si elle est disponible dépend de votre hôte de script (en supposant que vous avez intégré lua quelque part). Il est disponible, si vous utilisez la version en ligne de commande. Le modèle d'E/S complet est probablement ce que vous recherchez.

2
répondu Mario 2012-06-26 08:46:19

Juste un petit ajout si l'on veut analyser un fichier texte séparé par un espace ligne par ligne.

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
1
répondu ryadav 2017-09-19 10:48:40