Membaca Isi Berkas
Baca baris, byte, dan seluruh isi dengan metode file:read().
Membaca Isi Berkas adalah pelajaran Lua Academy gratis di CoddyKit. Ini adalah pelajaran 2 dari 4. Kamu bisa membaca pelajaran lengkapnya di bawah secara gratis — lalu praktikkan langsung di browser dengan editor kode bawaan dan tutor AI 24/7. Ini adalah bagian dari jalur belajar Lua Academy, dan progresmu tersinkronisasi di web dan aplikasi CoddyKit. Kursus Lua Academy mencakup 4 pelajaran total.
Membaca Seluruh File
Gunakan f:read("a") (atau "*a") untuk membaca seluruh file ke dalam string. Cara ini sederhana dan cocok untuk file kecil hingga sedang. Untuk file yang sangat besar, baca dalam potongan atau baris demi baris agar terhindar dari 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 berikutnya dan menghapus karakter baris baru. Mengembalikan nil saat mencapai EOF. Gunakan perulangan while untuk memproses setiap baris. f:lines() adalah bentuk singkat yang lazim dan melakukan hal 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 Jumlah Byte Tetap
Berikan angka pada f:read(n) untuk membaca tepat sebanyak n byte. Fungsi ini mengembalikan string berisi hingga n byte (lebih sedikit jika mencapai EOF), atau nil saat mencapai EOF. Gunakan cara ini untuk protokol biner atau format file terstruktur.
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 Angka
f:read("n") membaca angka berikutnya dari file dan melewati spasi kosong. Fungsi ini mengembalikan angka Lua, atau nil jika token berikutnya bukan angka. Cara ini berguna untuk membaca file data numerik terstruktur.
-- 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)
endBerpindah Posisi dalam File
f:seek(whence, offset) memindahkan posisi file. whence adalah "set" (dari awal), "cur" (dari posisi saat ini), atau "end" (dari akhir). Fungsi ini mengembalikan posisi absolut yang baru. Gunakan untuk membaca ulang atau melompat ke bagian lain dalam file.
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 File CSV
Uraikan data CSV baris demi baris: baca setiap baris, lalu pisahkan berdasarkan koma menggunakan string.gmatch. Untuk penggunaan produksi, tangani bidang yang diberi tanda kutip dan koma di dalam tanda kutip; untuk data sederhana, pemisahan dasar 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 File Konfigurasi
Format konfigurasi key=value sederhana: baca baris demi baris, lewati komentar dan baris kosong, lalu uraikan 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 dalam Potongan
Untuk file besar, baca dalam potongan berukuran tetap agar tidak memuat semuanya ke memori. Proses setiap potongan saat diterima. Cara ini penting untuk file yang ukurannya melebihi 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 Beberapa Nilai per Baris
Jika setiap baris berisi beberapa nilai yang dipisahkan spasi atau tab, gunakan string.match atau string.gmatch untuk mengekstraknya. Pola ini menangani file teks terstruktur sederhana.
-- 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 file, mengembalikan iterator baris, dan menutup file setelah selesai. Ini adalah cara paling ringkas untuk membaca file baris demi baris tanpa mengelola handle secara eksplisit.
-- 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)Pemeriksaan Singkat
Apa yang dikembalikan f:read("a") jika penunjuk file sudah berada di EOF?
Ringkasan: Membaca File
Ringkasan:
f:read("a")— seluruh file sebagai stringf:read("l")— satu baris, tanpa karakter baris baruf:read(n)— tepat sebanyak n bytef:read("n")— angka berikutnyaio.lines(path)— iterator baris, menutup file otomatisf:seek()— melompat ke posisi tertentu
Pertanyaan yang Sering Diajukan
Apakah pelajaran “Membaca Isi Berkas” gratis?
Ya — teks lengkap “Membaca Isi Berkas” gratis dibaca di sini di web. Untuk praktiknya secara interaktif (editor kode bawaan dan tutor AI 24/7) dan buka sisa kursus Lua Academy, upgrade ke CoddyKit PRO. Kursus Lua Academy mencakup 4 pelajaran total.
Apa yang akan aku pelajari di “Membaca Isi Berkas”?
Baca baris, byte, dan seluruh isi dengan metode file:read(). Kamu berlatih Lua Academy dengan kode praktik yang langsung kamu jalankan di browser, dan tutor AI 24/7 menjawab pertanyaanmu saat kamu mengerjakan pelajaran ini.
Apakah aku perlu pengalaman untuk memulai Lua Academy?
Tidak diperlukan pengalaman sebelumnya. Lua Academy di CoddyKit dirancang untuk pemula hingga pelajar tingkat lanjut, jadi kamu bisa memulai di sini atau dari awal dan belajar sesuai kecepatan kamu sendiri. Ini adalah pelajaran 2 dari 4.
Berapa lama pelajaran “Membaca Isi Berkas” memakan waktu?
Sebagian besar pelajaran CoddyKit memakan waktu sekitar 5–10 menit. Setiap pelajaran ringkas dan interaktif, jadi kamu membuat kemajuan stabil dan melanjutkan dari tempat kamu tinggalkan di web dan aplikasi.
Bisakah aku menulis dan menjalankan kode dalam pelajaran Lua Academy ini?
Ya. Setiap pelajaran Lua Academy menyertakan editor kode bawaan, jadi kamu menulis dan menjalankan kode nyata langsung di browser dan mendapatkan umpan balik AI instan — tidak diperlukan penyiapan lokal.
Semua pelajaran dalam kursus ini
- Membuka Berkas dengan io.open
- Membaca Isi Berkas
- Menulis dan Menambahkan Isi ke Berkas
- Menutup Berkas dan Menangani Galat