Lectura del contenido de archivos
Lea líneas, bytes y el contenido completo con los métodos file:read().
Lectura del contenido de archivos es una lección gratuita de Lua Academy en CoddyKit. Esta es la lección 2 de 4. Puedes leer la lección completa abajo gratuitamente — luego la practicas en el navegador con un editor de código integrado y un tutor de IA 24/7. Forma parte de la ruta de aprendizaje de Lua Academy, y tu progreso se sincroniza en la web y la app de CoddyKit. El curso de Lua Academy incluye 4 lecciones en total.
Leer el archivo completo
Use f:read("a") (o "*a") para leer el archivo completo en una cadena. Es una opción sencilla y adecuada para archivos pequeños o medianos. Para archivos muy grandes, lea en bloques o línea por línea para evitar problemas de memoria.
local f = io.open("config.txt", "r")
if f then
local content = f:read("a")
f:close()
print("Size:", #content, "bytes")
print(content)
endLeer línea por línea
f:read("l") lee la siguiente línea y elimina el salto de línea. Devuelve nil al llegar a EOF. Use while para procesar cada línea. f:lines() es la forma abreviada idiomática de hacer lo mismo.
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) endLeer una cantidad fija de bytes
Pase un número a f:read(n) para leer exactamente n bytes. Devuelve una cadena de hasta n bytes (menos si se alcanza EOF) o nil al llegar a EOF. Úselo para protocolos binarios o formatos de archivo estructurados.
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()
endLeer un número
f:read("n") lee el siguiente número del archivo e ignora los espacios en blanco. Devuelve un número de Lua o nil si el siguiente token no es un número. Es útil para leer archivos de datos numéricos estructurados.
-- 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)
endDesplazarse dentro de archivos
f:seek(whence, offset) mueve la posición del archivo. whence puede ser "set" (desde el principio), "cur" (desde la posición actual) o "end" (desde el final). Devuelve la nueva posición absoluta. Úselo para volver a leer partes del archivo o saltar a distintas posiciones.
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()
endLeer archivos CSV
Analice los datos CSV línea por línea: lea cada línea y, después, sepárela por comas mediante string.gmatch. En código de producción, gestione los campos entre comillas y las comas que aparecen dentro de ellas; para datos sencillos, basta con la separación básica.
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"}}Leer archivos de configuración
Un formato de configuración sencillo basado en clave=valor: lea línea por línea, omita los comentarios y las líneas en blanco, y analice los pares clave=valor con 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)Lectura por bloques
Para archivos grandes, lea bloques de tamaño fijo para evitar cargar todo en memoria. Procese cada bloque a medida que llegue. Esto es fundamental para archivos cuyo tamaño supera 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
endLeer varios valores por línea
Cuando cada línea contiene varios valores separados por espacios o tabulaciones, use string.match o string.gmatch para extraerlos. Este patrón permite procesar archivos de texto estructurados sencillos.
-- 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)
endAtajo io.lines
io.lines(filename) abre el archivo, devuelve un iterador de líneas y cierra el archivo al terminar. Es la forma más concisa de leer un archivo línea por línea sin administrar explícitamente el handle.
-- 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)Comprobación rápida
¿Qué devuelve f:read("a") cuando el puntero del archivo ya está en EOF?
Resumen: leer archivos
Resumen:
f:read("a")— archivo completo como cadenaf:read("l")— una línea, sin salto de líneaf:read(n)— exactamente n bytesf:read("n")— siguiente númeroio.lines(path)— iterador de líneas que cierra automáticamente el archivof:seek()— saltar a una posición
Preguntas frecuentes
¿La lección «Lectura del contenido de archivos» es gratis?
Sí — el texto completo de «Lectura del contenido de archivos» es gratis para leer aquí en la web. Para practicarla de forma interactiva (editor de código integrado y tutor de IA 24/7) y desbloquear el resto del curso de Lua Academy, actualiza a CoddyKit PRO. El curso de Lua Academy incluye 4 lecciones en total.
¿Qué aprenderé en «Lectura del contenido de archivos»?
Lea líneas, bytes y el contenido completo con los métodos file:read(). Practicas Lua Academy con código real que ejecutas directamente en el navegador, y un tutor de IA 24/7 responde tus preguntas mientras trabajas en la lección.
¿Necesito experiencia previa para empezar Lua Academy?
No se requiere experiencia previa. Lua Academy en CoddyKit está estructurado para principiantes hasta estudiantes avanzados, así que puedes empezar aquí o desde el inicio y avanzar a tu ritmo. Esta es la lección 2 de 4.
¿Cuánto tiempo toma la lección «Lectura del contenido de archivos»?
La mayoría de las lecciones de CoddyKit toman alrededor de 5–10 minutos. Cada una es compacta e interactiva, así que avanzas constantemente y retomas exactamente por donde dejaste en la web y la app.
¿Puedo escribir y ejecutar código en esta lección de Lua Academy?
Sí. Cada lección de Lua Academy incluye un editor de código integrado, así que escribes y ejecutas código real directamente en tu navegador y obtienes retroalimentación instantánea de IA — sin configuración local necesaria.
Todas las lecciones de este curso
- Apertura de archivos con io.open
- Lectura del contenido de archivos
- Escritura y adición en archivos
- Cierre de archivos y gestión de errores