Lendo o conteúdo de arquivos
Leia linhas, bytes e o conteúdo completo com os métodos file:read().
Lendo o conteúdo de arquivos é uma aula grátis de Lua Academy no CoddyKit. Esta é a aula 2 de 4. Você pode ler a aula completa abaixo gratuitamente — depois pratica ao vivo no navegador com um editor de código integrado e um tutor de IA 24/7. Faz parte do caminho de aprendizado de Lua Academy, e seu progresso é sincronizado entre a web e o app CoddyKit. O curso de Lua Academy inclui 4 aulas no total.
Ler o Arquivo Inteiro
Use f:read("a") (ou "*a") para ler o arquivo inteiro em uma string. Isso é simples e adequado para arquivos pequenos ou médios. Para arquivos muito grandes, leia em blocos ou linha por linha para evitar problemas de memória.
local f = io.open("config.txt", "r")
if f then
local content = f:read("a")
f:close()
print("Size:", #content, "bytes")
print(content)
endLer Linha por Linha
f:read("l") lê a próxima linha, removendo a quebra de linha. Retorna nil em EOF. Use um laço com while para processar cada linha. f:lines() é a forma abreviada idiomática que faz a mesma coisa.
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) endLer uma Quantidade Fixa de Bytes
Passe um número para f:read(n) a fim de ler exatamente n bytes. Retorna uma string com até n bytes (menos se EOF for alcançado) ou nil em EOF. Use isso para protocolos binários ou formatos de arquivo estruturados.
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()
endLer um Número
f:read("n") lê o próximo número do arquivo, ignorando espaços em branco. Retorna um número Lua ou nil se o próximo token não for um número. É útil para ler arquivos de dados numéricos estruturados.
-- 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)
endNavegar em Arquivos
f:seek(whence, offset) move a posição no arquivo. whence é "set" (a partir do início), "cur" (a partir da posição atual) ou "end" (a partir do fim). Retorna a nova posição absoluta. Use isso para reler ou saltar entre partes dos arquivos.
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()
endLer Arquivos CSV
Analise dados CSV linha por linha: leia cada linha e depois divida-a pelas vírgulas usando string.gmatch. Em código de produção, trate campos entre aspas e vírgulas dentro das aspas; para dados simples, a divisão básica funciona.
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"}}Ler Arquivos de Configuração
Um formato simples de configuração chave=valor: leia linha por linha, ignore comentários e linhas em branco e analise os pares chave=valor com 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)Leitura em Blocos
Para arquivos grandes, leia em blocos de tamanho fixo para evitar carregar tudo na memória. Processe cada bloco à medida que ele chega. Isso é essencial para arquivos maiores que a RAM disponível.
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
endLer Vários Valores por Linha
Quando cada linha contém vários valores separados por espaços ou tabulações, use string.match ou string.gmatch para extraí-los. Esse padrão trata arquivos de texto estruturados 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)
endAtalho io.lines
io.lines(filename) abre o arquivo, retorna um iterador de linhas e fecha o arquivo ao terminar. É a forma mais concisa de ler um arquivo linha por linha sem gerenciar explicitamente o identificador.
-- 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)Verificação Rápida
O que f:read("a") retorna quando o ponteiro do arquivo já está em EOF?
Recapitulação: Lendo Arquivos
Resumo:
f:read("a")— arquivo inteiro como stringf:read("l")— uma linha, sem quebra de linhaf:read(n)— exatamente n bytesf:read("n")— próximo númeroio.lines(path)— iterador de linhas, fecha automaticamentef:seek()— salta para uma posição
Perguntas Frequentes
A aula “Lendo o conteúdo de arquivos” é grátis?
Sim — o texto completo de “Lendo o conteúdo de arquivos” é grátis para ler aqui na web. Para praticá-la interativamente (um editor de código integrado e um tutor de IA 24/7) e desbloquear o restante do curso de Lua Academy, atualize para CoddyKit PRO. O curso de Lua Academy inclui 4 aulas no total.
O que vou aprender em “Lendo o conteúdo de arquivos”?
Leia linhas, bytes e o conteúdo completo com os métodos file:read(). Você pratica Lua Academy com código prático que executa diretamente no navegador, e um tutor de IA 24/7 responde suas dúvidas enquanto trabalha na aula.
Preciso ter experiência prévia para começar Lua Academy?
Nenhuma experiência prévia é necessária. Lua Academy no CoddyKit é estruturado para alunos iniciantes até avançados, então você pode começar aqui ou desde o início e aprender no seu ritmo. Esta é a aula 2 de 4.
Quanto tempo leva a aula “Lendo o conteúdo de arquivos”?
A maioria das aulas CoddyKit leva cerca de 5–10 minutos. Cada uma é compacta e interativa, então você faz progresso constante e retoma exatamente de onde parou entre web e app.
Posso escrever e executar código nesta aula de Lua Academy?
Sim. Cada aula de Lua Academy inclui um editor de código integrado, então você escreve e executa código real direto no navegador e recebe feedback de IA instantaneamente — nenhuma configuração local necessária.
Todas as aulas deste curso
- Abrindo arquivos com io.open
- Lendo o conteúdo de arquivos
- Escrevendo e acrescentando em arquivos
- Fechando arquivos e tratando erros