Membaca Kandungan Fail
Baca baris, bait dan kandungan penuh dengan kaedah file:read().
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)
endMembaca 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) endMembaca 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()
endMembaca 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)
endMencari 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()
endMembaca 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
endMembaca 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)
endPintasan 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 rentetanf:read("l")— satu baris tanpa baris baharuf:read(n)— tepat sebanyak n baitf:read("n")— nombor seterusnyaio.lines(path)— lelaran baris, ditutup secara automatikf:seek()— melompat ke kedudukan
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
- Membuka Fail dengan io.open
- Membaca Kandungan Fail
- Menulis dan Menambah pada Fail
- Menutup Fail dan Pengendalian Ralat