Lire le contenu de fichiers
Lisez des lignes, des octets et l’intégralité du contenu avec les méthodes file:read().
Lire le contenu de fichiers est une leçon Lua Academy gratuite sur CoddyKit. Ceci est la leçon 2 sur 4. Tu peux lire la leçon complète ci-dessous gratuitement — puis la pratiquer en direct dans le navigateur avec un éditeur de code intégré et un tuteur IA 24/7. Elle fait partie du parcours d'apprentissage Lua Academy, et ta progression se synchronise sur le web et l'application CoddyKit. Le cours Lua Academy comprend 4 leçons au total.
Lire un fichier entier
Utilisez f:read("a") (ou "*a") pour lire le fichier entier dans une chaîne. Cette méthode est simple et convient aux fichiers petits ou moyens. Pour les fichiers très volumineux, lisez-les par blocs ou ligne par ligne afin d’éviter les problèmes de mémoire.
local f = io.open("config.txt", "r")
if f then
local content = f:read("a")
f:close()
print("Size:", #content, "bytes")
print(content)
endLire ligne par ligne
f:read("l") lit la ligne suivante en supprimant le saut de ligne. Renvoie nil à EOF. Utilisez une boucle while pour traiter chaque ligne. f:lines() est la forme abrégée idiomatique qui fait la même chose.
local f = io.open("data.txt", "r")
if f then
local line = f:read("l")
while line ~= nil do
print(line)
line = f:read("l")
end
f:close()
end
-- Equivalent with for loop:
-- for line in io.lines("data.txt") do print(line) endLire un nombre fixe d’octets
Transmettez un nombre à f:read(n) pour lire exactement n octets. Renvoie une chaîne contenant au plus n octets (moins si EOF est atteint), ou nil à EOF. Utilisez cette méthode pour les protocoles binaires ou les formats de fichiers structurés.
local f = io.open("binary.dat", "rb")
if f then
-- Read 4-byte header
local header = f:read(4)
if header then
print("Header bytes:", #header)
for i = 1, #header do
io.write(string.format("%02X ", header:byte(i)))
end
print()
end
f:close()
endLire un nombre
f:read("n") lit le nombre suivant dans le fichier en ignorant les espaces. Renvoie un nombre Lua, ou nil si le prochain élément n’est pas un nombre. Cette méthode est utile pour lire des fichiers de données numériques structurées.
-- File contains: "10 20 30.5 40"
local f = io.open("nums.txt", "r")
if f then
local total = 0
local n = f:read("n")
while n do
total = total + n
n = f:read("n")
end
f:close()
print("Sum:", total)
endSe déplacer dans les fichiers
f:seek(whence, offset) déplace la position dans le fichier. whence vaut "set" (depuis le début), "cur" (depuis la position actuelle) ou "end" (depuis la fin). Renvoie la nouvelle position absolue. Utilisez cette méthode pour relire des données ou vous déplacer dans les fichiers.
local f = io.open("test.txt", "r")
if f then
-- Jump to end, get file size
local size = f:seek("end")
print("File size:", size, "bytes")
-- Seek back to start
f:seek("set", 0)
local first_line = f:read("l")
print("First line:", first_line)
f:close()
endLire des fichiers CSV
Analysez les données CSV ligne par ligne : lisez chaque ligne, puis séparez-la par des virgules avec string.gmatch. Pour une utilisation en production, gérez les champs entre guillemets ainsi que les virgules qu’ils contiennent ; pour des données simples, une séparation élémentaire suffit.
local function parseCSV(path)
local rows = {}
for line in io.lines(path) do
local row = {}
for field in string.gmatch(line, "([^,]+)") do
row[#row+1] = field
end
rows[#rows+1] = row
end
return rows
end
-- Example: "Alice,30,Engineer"
-- => {{"Alice","30","Engineer"}}Lire des fichiers de configuration
Un format de configuration simple avec clé=valeur : lisez le fichier ligne par ligne, ignorez les commentaires et les lignes vides, puis analysez les paires clé=valeur avec string.match.
local function loadConfig(path)
local cfg = {}
for line in io.lines(path) do
-- Skip comments and blank lines
if not line:match("^%s*#") and line:match("%S") then
local k, v = line:match("^%s*(%w+)%s*=%s*(.-)%s*$")
if k then cfg[k] = v end
end
end
return cfg
end
local config = loadConfig("app.conf")
print(config.host, config.port)Lire par blocs
Pour les fichiers volumineux, lisez des blocs de taille fixe afin d’éviter de tout charger en mémoire. Traitez chaque bloc au fur et à mesure de sa lecture. Cette méthode est essentielle pour les fichiers plus volumineux que la RAM disponible.
local function processLarge(path, chunkSize)
chunkSize = chunkSize or 4096
local f, err = io.open(path, "rb")
if not f then return nil, err end
local totalBytes = 0
local chunk = f:read(chunkSize)
while chunk do
totalBytes = totalBytes + #chunk
-- process chunk here
chunk = f:read(chunkSize)
end
f:close()
return totalBytes
endLire plusieurs valeurs par ligne
Lorsque chaque ligne contient plusieurs valeurs séparées par des espaces ou des tabulations, utilisez string.match ou string.gmatch pour les extraire. Ce modèle convient aux fichiers texte structurés simples.
-- File: "Alice 95 A\nBob 87 B"
local results = {}
for line in io.lines("grades.txt") do
local name, score, grade = line:match("(%S+)%s+(%d+)%s+(%S+)")
if name then
results[#results+1] = {
name=name,
score=tonumber(score),
grade=grade
}
end
end
for _, r in ipairs(results) do
print(r.name, r.score, r.grade)
endRaccourci io.lines
io.lines(filename) ouvre le fichier, renvoie un itérateur de lignes et ferme le fichier une fois la lecture terminée. C’est la manière la plus concise de lire un fichier ligne par ligne sans gérer explicitement sa référence.
-- Count non-empty lines
local count = 0
for line in io.lines("data.txt") do
if line:match("%S") then
count = count + 1
end
end
print("Non-empty lines:", count)
-- Collect all lines into a table
local lines = {}
for line in io.lines("data.txt") do
lines[#lines+1] = line
end
print("Total lines:", #lines)Vérification rapide
Que renvoie f:read("a") lorsque le pointeur du fichier se trouve déjà à EOF ?
Récapitulatif : lire des fichiers
Résumé :
f:read("a")— le fichier entier sous forme de chaînef:read("l")— une ligne, sans saut de lignef:read(n)— exactement n octetsf:read("n")— le nombre suivantio.lines(path)— un itérateur de lignes qui ferme automatiquement le fichierf:seek()— se déplacer à une position
Questions Fréquemment Posées
La leçon « Lire le contenu de fichiers » est-elle gratuite ?
Oui — le texte complet de « Lire le contenu de fichiers » est gratuit à lire ici sur le web. Pour la pratiquer de manière interactive (un éditeur de code intégré et un tuteur IA 24/7) et déverrouiller le reste du cours Lua Academy, passe à CoddyKit PRO. Le cours Lua Academy comprend 4 leçons au total.
Qu'est-ce que j'apprendrai dans « Lire le contenu de fichiers » ?
Lisez des lignes, des octets et l’intégralité du contenu avec les méthodes file:read(). Tu pratiques Lua Academy avec du code pratique que tu exécutes directement dans le navigateur, et un tuteur IA 24/7 répond à tes questions au fur et à mesure que tu avances dans la leçon.
Dois-je avoir de l'expérience pour commencer Lua Academy ?
Aucune expérience préalable n'est requise. Lua Academy sur CoddyKit est structuré pour les débutants jusqu'aux apprenants avancés, donc tu peux commencer ici ou depuis le début et avancer à ton rythme. Ceci est la leçon 2 sur 4.
Combien de temps prend la leçon « Lire le contenu de fichiers » ?
La plupart des leçons CoddyKit prennent environ 5–10 minutes. Chacune est courte et interactive, tu progresses régulièrement et tu repiques exactement où tu t'es arrêté sur le web et l'app.
Peux-tu écrire et exécuter du code dans cette leçon Lua Academy ?
Oui. Chaque leçon Lua Academy inclut un éditeur de code intégré, tu écris et exécutes du vrai code directement dans ton navigateur et tu reçois des retours IA instantanés — aucune configuration locale requise.
Toutes les leçons de ce cours
- Ouvrir des fichiers avec io.open
- Lire le contenu de fichiers
- Écrire dans des fichiers et y ajouter du contenu
- Fermer des fichiers et gérer les erreurs