Lua Academy · Pelajaran

Membaca Kandungan Fail

Baca baris, bait dan kandungan penuh dengan kaedah file:read().

Pelajaran 2 daripada 412 langkah

Membaca Kandungan Fail ialah pelajaran Lua Academy percuma di CoddyKit. Ini ialah pelajaran 2 daripada 4. Sebanyak 3 pelajaran dalam laluan pembelajaran ini boleh dibaca sepenuhnya secara percuma — selepas itu, CoddyKit PRO membuka akses kepada semua pelajaran, serta latihan praktikal dengan penyunting kod terbina dalam dan tutor kecerdasan buatan yang tersedia 24/7. Pelajaran ini merupakan sebahagian daripada laluan pembelajaran Lua Academy, dan kemajuan anda disegerakkan merentas web serta aplikasi CoddyKit. Kursus Lua Academy merangkumi sejumlah 4 pelajaran.

Membaca Keseluruhan Fail

Gunakan f:read("a") (atau "*a") untuk membaca keseluruhan fail ke dalam rentetan. Kaedah ini mudah dan sesuai untuk fail kecil hingga sederhana. Untuk fail yang sangat besar, baca dalam bahagian atau baris demi baris bagi mengelakkan masalah memori.

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

Membaca Baris demi Baris

f:read("l") membaca baris seterusnya dan menghapuskan baris baharu. Ia mengembalikan nil pada EOF. Gunakan while untuk memproses setiap baris. f:lines() ialah singkatan lazim yang melakukan perkara yang sama.

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

Membaca Bilangan Bait Tetap

Hantar nombor kepada f:read(n) untuk membaca tepat sebanyak n bait. Ia mengembalikan rentetan yang mengandungi sehingga n bait (kurang jika EOF dicapai), atau nil pada EOF. Gunakannya untuk protokol binari atau format fail berstruktur.

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

Membaca Nombor

f:read("n") membaca nombor seterusnya daripada fail dan melangkau ruang kosong. Ia mengembalikan nombor Lua, atau nil jika token seterusnya bukan nombor. Berguna untuk membaca fail data berangka berstruktur.

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

Mencari Kedudukan dalam Fail

f:seek(whence, offset) mengalihkan kedudukan fail. whence ialah "set" (dari permulaan), "cur" (dari kedudukan semasa), atau "end" (dari penghujung). Ia mengembalikan kedudukan mutlak yang baharu. Gunakannya untuk membaca semula atau melompat ke bahagian lain dalam fail.

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

Membaca Fail CSV

Huraikan data CSV baris demi baris: baca setiap baris, kemudian pecahkan mengikut koma menggunakan string.gmatch. Untuk kegunaan pengeluaran, kendalikan medan berpetik dan koma dalam petikan; namun, untuk data ringkas, pemisahan asas sudah memadai.

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

Membaca Fail Konfigurasi

Format konfigurasi key=value yang ringkas: baca baris demi baris, langkau ulasan dan baris kosong, kemudian huraikan pasangan key=value dengan 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)

Membaca Mengikut Bahagian

Untuk fail besar, baca dalam bahagian bersaiz tetap bagi mengelakkan semuanya dimuatkan ke dalam memori. Proses setiap bahagian apabila diterima. Ini penting untuk fail yang lebih besar daripada RAM yang tersedia.

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

Membaca Berbilang Nilai bagi Setiap Baris

Apabila setiap baris mengandungi berbilang nilai yang dipisahkan oleh ruang atau tab, gunakan string.match atau string.gmatch untuk mengekstraknya. Corak ini mengendalikan fail teks berstruktur yang ringkas.

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

Pintasan io.lines

io.lines(filename) membuka fail, mengembalikan lelaran baris, dan menutup fail apabila selesai. Ini ialah cara paling ringkas untuk membaca fail baris demi baris tanpa mengurus pemegang secara jelas.

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

Semakan Pantas

Apakah yang dikembalikan oleh f:read("a") apabila penuding fail sudah berada pada EOF?

Imbas Kembali: Membaca Fail

Ringkasan:

  • f:read("a") — keseluruhan fail sebagai rentetan
  • f:read("l") — satu baris tanpa baris baharu
  • f:read(n) — tepat sebanyak n bait
  • f:read("n") — nombor seterusnya
  • io.lines(path) — lelaran baris, ditutup secara automatik
  • f:seek() — melompat ke kedudukan
Percuma untuk bermula

Pelajari Lua dengan tutor kecerdasan buatan — percuma

Tulis dan jalankan kod sebenar dalam pelayar anda, dapatkan bantuan segera daripada tutor kecerdasan buatan yang tersedia 24/7, dan sambung semula dari tempat anda berhenti di web atau dalam aplikasi.

Kursus
40
Pelajaran
159

Soalan Lazim

Adakah pelajaran “Membaca Kandungan Fail” percuma?

Ya — sebanyak 3 pelajaran dalam laluan pembelajaran Lua Academy, termasuk “Membaca Kandungan Fail”, boleh dibaca sepenuhnya secara percuma di web ini. Selepas itu, CoddyKit PRO membuka akses kepada semua pelajaran, serta latihan interaktif dengan penyunting kod terbina dalam dan tutor kecerdasan buatan yang tersedia 24/7. Kursus Lua Academy merangkumi sejumlah 4 pelajaran.

Apakah yang akan saya pelajari dalam “Membaca Kandungan Fail”?

Baca baris, bait dan kandungan penuh dengan kaedah file:read(). Anda berlatih Lua Academy menggunakan kod praktikal yang dijalankan terus dalam pelayar, manakala tutor kecerdasan buatan 24/7 menjawab soalan anda semasa anda mengikuti pelajaran.

Adakah saya memerlukan pengalaman untuk memulakan Lua Academy?

Tiada pengalaman terdahulu diperlukan. Pembelajaran Lua Academy di CoddyKit disusun untuk pelajar daripada peringkat pemula hingga lanjutan, jadi anda boleh bermula di sini atau dari awal dan belajar mengikut kadar anda sendiri. Ini ialah pelajaran 2 daripada 4.

Berapa lamakah pelajaran “Membaca Kandungan Fail” diambil?

Kebanyakan pelajaran CoddyKit mengambil masa kira-kira 5–10 minit. Setiap pelajaran ringkas dan interaktif, jadi anda boleh membuat kemajuan secara berterusan dan menyambung tepat dari tempat anda berhenti di web atau aplikasi.

Bolehkah saya menulis dan menjalankan kod dalam pelajaran Lua Academy ini?

Ya. Setiap pelajaran Lua Academy menyertakan penyunting kod terbina dalam, jadi anda boleh menulis dan menjalankan kod sebenar terus dalam pelayar serta menerima maklum balas kecerdasan buatan serta-merta — tanpa memerlukan persediaan setempat.

Semua pelajaran dalam kursus ini

  1. Membuka Fail dengan io.open
  2. Membaca Kandungan Fail
  3. Menulis dan Menambah pada Fail
  4. Menutup Fail dan Pengendalian Ralat
← Kembali ke Lua Academy