0Pricing
Lua Academy · Pelajaran

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

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

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

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

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

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

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

Pintasan 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 string
  • f:read("l") — satu baris, tanpa karakter baris baru
  • f:read(n) — tepat sebanyak n byte
  • f:read("n") — angka berikutnya
  • io.lines(path) — iterator baris, menutup file otomatis
  • f: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

  1. Membuka Berkas dengan io.open
  2. Membaca Isi Berkas
  3. Menulis dan Menambahkan Isi ke Berkas
  4. Menutup Berkas dan Menangani Galat
← Kembali ke Lua Academy