Lettura del contenuto dei file
Legga righe, byte e contenuto completo con i metodi file:read().
Lettura del contenuto dei file è una lezione Lua Academy gratuita su CoddyKit. Questa è la lezione 2 di 4. Puoi leggere la lezione completa qui gratuitamente — poi esercitati direttamente nel browser con un editor di codice integrato e un tutor IA disponibile 24/7. Fa parte del percorso di apprendimento Lua Academy, e i tuoi progressi si sincronizzano tra il web e l'app CoddyKit. Il corso Lua Academy include 4 lezioni in totale.
Leggere un file intero
Usi f:read("a") (o "*a") per leggere l'intero file in una stringa. È una soluzione semplice e adatta ai file piccoli e medi. Per i file molto grandi, legga a blocchi o riga per riga per evitare problemi di memoria.
local f = io.open("config.txt", "r")
if f then
local content = f:read("a")
f:close()
print("Size:", #content, "bytes")
print(content)
endLeggere riga per riga
f:read("l") legge la riga successiva, rimuovendo il carattere di nuova riga. Restituisce nil alla fine del file. Usi while per elaborare ogni riga. f:lines() è la forma abbreviata idiomatica che svolge la stessa operazione.
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) endLeggere un numero fisso di byte
Passi un numero a f:read(n) per leggere esattamente n byte. Restituisce una stringa contenente fino a n byte (meno se viene raggiunto EOF) oppure nil alla fine del file. È utile per i protocolli binari o i formati di file strutturati.
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()
endLeggere un numero
f:read("n") legge il numero successivo dal file, ignorando gli spazi vuoti. Restituisce un numero Lua oppure nil se il token successivo non è un numero. È utile per leggere file di dati numerici strutturati.
-- 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)
endSpostarsi all'interno dei file
f:seek(whence, offset) sposta la posizione nel file. whence può essere "set" (dall'inizio), "cur" (dalla posizione corrente) oppure "end" (dalla fine). Restituisce la nuova posizione assoluta. È utile per rileggere parti del file o spostarsi al suo interno.
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()
endLeggere file CSV
Analizzi i dati CSV riga per riga: legga ogni riga, quindi la separi in base alle virgole usando string.gmatch. Per un utilizzo in produzione, gestisca i campi racchiusi tra virgolette e le virgole interne alle virgolette; per dati semplici è sufficiente la suddivisione di base.
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"}}Leggere file di configurazione
Per un semplice formato di configurazione chiave=valore, legga il file riga per riga, ignori i commenti e le righe vuote e analizzi le coppie chiave=valore 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)Lettura a blocchi
Per i file grandi, legga blocchi di dimensione fissa per evitare di caricare tutto in memoria. Elabori ogni blocco man mano che viene letto. È essenziale per i file più grandi della RAM disponibile.
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
endLeggere più valori per riga
Quando ogni riga contiene più valori separati da spazi o tabulazioni, usi string.match o string.gmatch per estrarli. Questo schema gestisce i semplici file di testo strutturati.
-- 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)
endScorciatoia io.lines
io.lines(filename) apre il file, restituisce un iteratore di righe e chiude il file al termine. È il modo più conciso per leggere un file riga per riga senza gestire esplicitamente l'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)Verifica rapida
Che cosa restituisce f:read("a") quando il puntatore del file si trova già alla fine del file?
Riepilogo: lettura dei file
Riepilogo:
f:read("a")— l'intero file come stringaf:read("l")— una riga, senza carattere di nuova rigaf:read(n)— esattamente n bytef:read("n")— il numero successivoio.lines(path)— iteratore di righe, con chiusura automaticaf:seek()— spostamento a una posizione
Domande Frequenti
La lezione «Lettura del contenuto dei file» è gratuita?
Sì — il testo completo di «Lettura del contenuto dei file» è gratuito qui sul web. Per esercitarvi in modo interattivo (un editor di codice integrato e un tutor IA 24/7) e sbloccare il resto del corso Lua Academy, passa a CoddyKit PRO. Il corso Lua Academy include 4 lezioni in totale.
Cosa imparerò in «Lettura del contenuto dei file»?
Legga righe, byte e contenuto completo con i metodi file:read(). Eserciti Lua Academy con codice pratico che esegui direttamente nel browser, e un tutor IA 24/7 risponde alle tue domande mentre lavori sulla lezione.
Ho bisogno di esperienza per iniziare Lua Academy?
Non è richiesta alcuna esperienza precedente. Lua Academy su CoddyKit è strutturato per principianti e studenti avanzati, quindi puoi iniziare da qui o dall'inizio e procedere al tuo ritmo. Questa è la lezione 2 di 4.
Quanto tempo richiede la lezione «Lettura del contenuto dei file»?
La maggior parte delle lezioni CoddyKit richiede circa 5–10 minuti. Ogni lezione è breve e interattiva, quindi fai progressi costanti e riprendi esattamente da dove hai lasciato su web e app.
Posso scrivere ed eseguire codice in questa lezione Lua Academy?
Sì. Ogni lezione Lua Academy include un editor di codice integrato, quindi scrivi ed esegui codice reale direttamente nel tuo browser e ricevi feedback istantaneo dall'IA — nessuna configurazione locale necessaria.
Tutte le lezioni di questo corso
- Apertura dei file con io.open
- Lettura del contenuto dei file
- Scrittura e aggiunta ai file
- Chiusura dei file e gestione degli errori