0Pricing
Lua Academy · Lektion

Dateiinhalte lesen

Lesen Sie Zeilen, Bytes und den vollständigen Inhalt mit den file:read()-Methoden

Dateiinhalte lesen ist eine kostenlose Lua Academy-Lektion auf CoddyKit. Dies ist Lektion 2 von 4. Du kannst die komplette Lektion unten kostenlos lesen – dann übst du sie direkt im Browser mit einem integrierten Code-Editor und einem KI-Tutor rund um die Uhr. Sie ist Teil des Lua Academy-Lernpfads, und dein Fortschritt wird über Web und CoddyKit-App synchronisiert. Der Lua Academy-Kurs umfasst insgesamt 4 Lektionen.

Die gesamte Datei lesen

Verwenden Sie f:read("a") (oder "*a"), um die gesamte Datei als Zeichenfolge einzulesen. Das ist einfach und für kleine bis mittelgroße Dateien geeignet. Bei sehr großen Dateien sollten Sie in Blöcken oder zeilenweise lesen, um Speicherprobleme zu vermeiden.

local f = io.open("config.txt", "r")
if f then
  local content = f:read("a")
  f:close()
  print("Size:", #content, "bytes")
  print(content)
end

Zeile für Zeile lesen

f:read("l") liest die nächste Zeile und entfernt den Zeilenumbruch. Am Dateiende (EOF) wird nil zurückgegeben. Verwenden Sie eine while-Schleife, um jede Zeile zu verarbeiten. f:lines() ist die idiomatische Kurzform für dasselbe Vorgehen.

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) end

Eine feste Anzahl Bytes lesen

Übergeben Sie eine Zahl an f:read(n), um genau n Bytes zu lesen. Zurückgegeben wird eine Zeichenfolge mit bis zu n Bytes (weniger, wenn das Dateiende erreicht wird) oder am Dateiende nil. Verwenden Sie dies für Binärprotokolle oder strukturierte Dateiformate.

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()
end

Eine Zahl lesen

f:read("n") liest die nächste Zahl aus der Datei und überspringt dabei Leerraum. Zurückgegeben wird eine Lua-Zahl oder nil, wenn das nächste Token keine Zahl ist. Das ist nützlich zum Lesen strukturierter numerischer Datendateien.

-- 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)
end

In Dateien positionieren

f:seek(whence, offset) verschiebt die Dateiposition. whence ist "set" (vom Anfang), "cur" (von der aktuellen Position) oder "end" (vom Ende). Zurückgegeben wird die neue absolute Position. Verwenden Sie dies, um Dateien erneut zu lesen oder an bestimmte Stellen zu springen.

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()
end

CSV-Dateien lesen

Analysieren Sie CSV-Daten zeilenweise: Lesen Sie jede Zeile und teilen Sie sie anschließend mit string.gmatch an den Kommas auf. Für den produktiven Einsatz müssen Sie in Anführungszeichen eingeschlossene Felder und Kommas innerhalb solcher Felder behandeln; für einfache Daten reicht die grundlegende Aufteilung aus.

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"}}

Konfigurationsdateien lesen

Ein einfaches Konfigurationsformat mit key=value: Lesen Sie die Datei zeilenweise, überspringen Sie Kommentare und leere Zeilen und analysieren Sie key=value-Paare mit 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)

Lesen in Blöcken

Lesen Sie große Dateien in Blöcken fester Größe, damit nicht alles in den Speicher geladen werden muss. Verarbeiten Sie jeden Block, sobald er eintrifft. Das ist für Dateien erforderlich, die größer als der verfügbare Arbeitsspeicher sind.

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
end

Mehrere Werte pro Zeile lesen

Wenn jede Zeile mehrere durch Leerzeichen oder Tabulatoren getrennte Werte enthält, verwenden Sie string.match oder string.gmatch, um diese zu extrahieren. Dieses Muster eignet sich für einfache strukturierte Textdateien.

-- 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)
end

Kurzform mit io.lines

io.lines(filename) öffnet die Datei, gibt einen Zeilen-Iterator zurück und schließt die Datei nach der Verarbeitung. Dies ist die knappste Möglichkeit, eine Datei zeilenweise zu lesen, ohne den Handle explizit verwalten zu müssen.

-- 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)

Kurze Verständnisfrage

Was gibt f:read("a") zurück, wenn sich der Dateizeiger bereits am Dateiende (EOF) befindet?

Zusammenfassung: Dateien lesen

Zusammenfassung:

  • f:read("a") — gesamte Datei als Zeichenfolge
  • f:read("l") — eine Zeile ohne Zeilenumbruch
  • f:read(n) — genau n Bytes
  • f:read("n") — nächste Zahl
  • io.lines(path) — Zeilen-Iterator, schließt automatisch
  • f:seek() — zu einer Position springen

Häufig gestellte Fragen

Ist die Lektion „Dateiinhalte lesen“ kostenlos?

Ja — der vollständige Text von „Dateiinhalte lesen“ ist hier im Web kostenlos zu lesen. Um sie interaktiv zu üben (integrierter Code-Editor und 24/7 KI-Tutor) und den Rest des Lua Academy-Kurses freizuschalten, upgrade auf CoddyKit PRO. Der Lua Academy-Kurs umfasst insgesamt 4 Lektionen.

Was lerne ich in „Dateiinhalte lesen“?

Lesen Sie Zeilen, Bytes und den vollständigen Inhalt mit den file:read()-Methoden Du übst Lua Academy mit praktischem Code, den du direkt im Browser ausführst, und ein 24/7 KI-Tutor beantwortet deine Fragen während du die Lektion bearbeitest.

Brauche ich Erfahrung, um Lua Academy zu starten?

Keine Vorkenntnisse erforderlich. Lua Academy auf CoddyKit ist für Anfänger bis fortgeschrittene Lernende strukturiert, sodass du hier starten oder von Anfang an beginnen und in deinem eigenen Tempo voranschreiten kannst. Dies ist Lektion 2 von 4.

Wie lange dauert die Lektion „Dateiinhalte lesen“?

Die meisten CoddyKit-Lektionen dauern etwa 5–10 Minuten. Jede ist kompakt und interaktiv, sodass du stetig Fortschritte machst und genau dort weitermachst, wo du aufgehört hast – im Web und in der App.

Kann ich in dieser Lua Academy-Lektion Code schreiben und ausführen?

Ja. Jede Lua Academy-Lektion enthält einen integrierten Code-Editor, sodass du echten Code direkt in deinem Browser schreibst und ausführst und sofort KI-Feedback erhältst — ohne lokale Einrichtung erforderlich.

Alle Lektionen in diesem Kurs

  1. Dateien mit io.open öffnen
  2. Dateiinhalte lesen
  3. Dateien schreiben und erweitern
  4. Dateien schließen und Fehler behandeln
← Zurück zu Lua Academy