Lese filinnhold
Les linjer, byte og hele innholdet med file:read()-metoder.
Lese filinnhold er en gratis leksjon i Lua Academy på CoddyKit. Dette er leksjon 2 av 4. Du kan lese valgfritt 3 leksjoner fra denne læringsstien gratis i sin helhet – deretter låser CoddyKit PRO opp alle leksjoner, samt praktisk øving med en innebygd kodeeditor og en AI-veileder som er tilgjengelig døgnet rundt. Den er en del av læringsløpet i Lua Academy, og fremdriften din synkroniseres mellom nettet og CoddyKit-appen. Kurset i Lua Academy inneholder totalt 4 leksjoner.
Lese hele filen
Bruk f:read("a") (eller "*a") for å lese hele filen inn i en streng. Dette er enkelt og fungerer fint for små og mellomstore filer. For svært store filer bør De lese i blokker eller linje for linje for å unngå minneproblemer.
local f = io.open("config.txt", "r")
if f then
local content = f:read("a")
f:close()
print("Size:", #content, "bytes")
print(content)
endLese linje for linje
f:read("l") leser neste linje og fjerner linjeskiftet. Returnerer nil ved EOF. Bruk while til å behandle hver linje. f:lines() er den idiomatiske kortformen som gjør det samme.
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) endLese et fast antall byte
Send et tall til f:read(n) for å lese nøyaktig n byte. Returnerer en streng med opptil n byte (færre hvis EOF nås), eller nil ved EOF. Bruk dette for binære protokoller eller strukturerte filformater.
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()
endLese et tall
f:read("n") leser neste tall fra filen og hopper over mellomrom. Returnerer et Lua-tall, eller nil hvis neste token ikke er et tall. Dette er nyttig ved lesing av strukturerte numeriske datafiler.
-- 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)
endSøke i filer
f:seek(whence, offset) flytter filposisjonen. whence er "set" (fra begynnelsen), "cur" (fra gjeldende posisjon) eller "end" (fra slutten). Returnerer den nye absolutte posisjonen. Bruk dette til å lese deler på nytt eller hoppe rundt i filer.
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()
endLese CSV-filer
Analyser CSV-data linje for linje: les hver linje, og del den deretter ved komma ved hjelp av string.gmatch. I produksjonskode må De håndtere siterte felt og kommaer inne i anførselstegn, men for enkle data fungerer grunnleggende splitting.
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"}}Lese konfigurasjonsfiler
Et enkelt konfigurasjonsformat med nøkkel=verdi: les linje for linje, hopp over kommentarer og tomme linjer, og analyser nøkkel=verdi-par med 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)Blokkvis lesing
For store filer bør De lese i blokker med fast størrelse for å unngå å laste alt inn i minnet. Behandle hver blokk etter hvert som den kommer inn. Dette er nødvendig for filer som er større enn tilgjengelig RAM.
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
endLese flere verdier per linje
Når hver linje inneholder flere mellomroms- eller tabulatorseparerte verdier, kan De bruke string.match eller string.gmatch til å hente dem ut. Dette mønsteret håndterer enkle strukturerte tekstfiler.
-- 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)
endKortformen io.lines
io.lines(filename) åpner filen, returnerer en linjeiterator og lukker filen når den er ferdig. Dette er den korteste måten å lese en fil linje for linje på uten å administrere filhåndtaket eksplisitt.
-- 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)Kort kontroll
Hva returnerer f:read("a") når filpekeren allerede står ved EOF?
Oppsummering: Lese filer
Oppsummering:
f:read("a")— hele filen som strengf:read("l")— én linje uten linjeskiftf:read(n)— nøyaktig n bytef:read("n")— neste tallio.lines(path)— linjeiterator som lukker filen automatiskf:seek()— hopp til en posisjon
Lær deg Lua med en AI-veileder – gratis
Skriv og kjør ekte kode i nettleseren, få umiddelbar hjelp fra en AI-veileder som er tilgjengelig døgnet rundt, og fortsett der du slapp – på nettet eller i appen.
- Kurs
- 40
- Leksjoner
- 159
Ofte stilte spørsmål
Er leksjonen «Lese filinnhold» gratis?
Ja – du kan lese valgfritt 3 av leksjonene i læringsstien Lua Academy, inkludert «Lese filinnhold», gratis i sin helhet her på nettet. Deretter låser CoddyKit PRO opp alle leksjoner, samt interaktiv øving med en innebygd kodeeditor og en AI-veileder som er tilgjengelig døgnet rundt. Kurset i Lua Academy inneholder totalt 4 leksjoner.
Hva lærer jeg i «Lese filinnhold»?
Les linjer, byte og hele innholdet med file:read()-metoder. Du øver på Lua Academy med praktisk kode som du kjører direkte i nettleseren, mens en AI-veileder som er tilgjengelig døgnet rundt, svarer på spørsmålene dine mens du jobber deg gjennom leksjonen.
Trenger jeg erfaring for å begynne med Lua Academy?
Ingen tidligere erfaring er nødvendig. Lua Academy på CoddyKit er lagt opp for både nybegynnere og viderekomne, så De kan begynne her eller helt fra start og lære i Deres eget tempo. Dette er leksjon 2 av 4.
Hvor lang tid tar leksjonen «Lese filinnhold»?
De fleste CoddyKit-leksjoner tar omtrent 5–10 minutter. Hver leksjon er kort og interaktiv, slik at De gjør jevne fremskritt og kan fortsette akkurat der De slapp – både på nettet og i appen.
Kan jeg skrive og kjøre kode i denne Lua Academy-leksjonen?
Ja. Alle Lua Academy-leksjoner har en innebygd kodeeditor, slik at De kan skrive og kjøre ekte kode direkte i nettleseren og få umiddelbar tilbakemelding fra AI – uten lokal konfigurering.