0Pricing
Lua Academy · Pelajaran

Menulis dan Menambahkan Isi ke Berkas

Tulis string ke berkas dan tambahkan data tanpa menimpa isi yang ada.

Menulis dan Menambahkan Isi ke Berkas adalah pelajaran Lua Academy gratis di CoddyKit. Ini adalah pelajaran 3 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.

Dasar-Dasar f:write()

f:write(...) menulis satu atau beberapa string (atau angka) ke file. Fungsi ini tidak otomatis menambahkan karakter baris baru. Fungsi ini mengembalikan handle file jika berhasil (sehingga dapat dirangkai), atau nil, errMessage, errCode jika gagal.

local f = io.open("output.txt", "w")
if f then
  f:write("Hello, ")
  f:write("World")
  f:write("!\n")
  f:write("Line 2\n")
  f:close()
end

Menulis Beberapa Nilai

f:write() menerima beberapa argumen dan menulis semuanya secara berurutan. Nilai harus berupa string atau angka—memberikan tipe lain akan menimbulkan error. Gunakan tostring() untuk mengonversi boolean, tabel, dan sebagainya.

local f = io.open("log.txt", "w")
f:write("Name: ", "Alice", "\n")
f:write("Age: ", 30, "\n")
f:write("Score: ", string.format("%.1f", 95.5), "\n")
f:close()

Penulisan Berformat

Gabungkan string.format dengan f:write untuk menghasilkan output secara presisi. Pola ini umum digunakan untuk membuat laporan, file log, dan ekspor data dengan persyaratan format tertentu.

local data = {
  {name="Alice", score=95, grade="A"},
  {name="Bob",   score=87, grade="B"},
}

local f = io.open("report.txt", "w")
f:write(string.format("%-12s  %5s  %s\n","Name","Score","Grade"))
f:write(string.rep("-",25) .. "\n")
for _, r in ipairs(data) do
  f:write(string.format("%-12s  %5d  %s\n",r.name,r.score,r.grade))
end
f:close()

Mode Tambah

Mode "a" selalu menulis di akhir file. Posisi file untuk membaca berada di awal, tetapi penulisan selalu diarahkan ke akhir. Gunakan untuk log, jejak audit, dan file apa pun yang ingin Anda tambahi tanpa menghapus isinya.

local function appendLog(msg)
  local f = io.open("app.log", "a")
  if f then
    local ts = os.date("%Y-%m-%d %H:%M:%S")
    f:write(string.format("[%s] %s\n", ts, msg))
    f:close()
  end
end

appendLog("Server started")
appendLog("User logged in: Alice")
appendLog("Request processed")

f:flush() dan Penyanggaan

IO file di Lua menggunakan penyangga. Data yang ditulis dengan f:write() mungkin berada di penyangga sebelum diteruskan ke disk. f:flush() memaksa penyangga ditulis ke disk tanpa menutup file. Selalu lakukan flush sebelum proses lain perlu melihat data tersebut.

local f = io.open("stream.txt", "w")
for i = 1, 5 do
  f:write("Line " .. i .. "\n")
  f:flush()   -- ensure each line is on disk
  -- simulate work
end
f:close()

Menulis Data Biner

Dalam mode penulisan biner ("wb"), tulis byte mentah dengan string.char(). Inilah cara membuat format file biner, gambar, atau pesan protokol. Gunakan string.pack (Lua 5.3+) untuk data biner terstruktur.

local f = io.open("bytes.bin", "wb")
if f then
  -- Write raw bytes
  f:write(string.char(0xFF, 0x00, 0xAB, 0xCD))
  -- Write a 4-byte little-endian integer (Lua 5.3+)
  f:write(string.pack("<I4", 12345))
  f:close()
  print("Written binary file")
end

io.write vs f:write

io.write() menulis ke output bawaan saat ini (awalnya stdout). f:write() menulis ke handle file tertentu. Berbeda dari print(), keduanya tidak menambahkan karakter baris baru atau pemisah tab, sehingga Anda memiliki kendali penuh atas pemformatan output.

-- io.write to stdout
io.write("Enter name: ")
-- (would read input here)

-- f:write to file
local f = io.open("out.txt", "w")
f:write("No auto newline")
f:write(" appended directly")
f:write("\n")  -- explicit newline
f:close()

-- print adds tabs and newline automatically
print("a", "b", "c")   -- a  b  c (tab-separated)

Pola Penulisan Atomik

Demi keamanan, tulis ke file sementara lalu ganti namanya. Cara ini menghindari keadaan ketika file output baru tertulis sebagian. Jika proses berhenti mendadak di tengah penulisan, file asli tetap tidak berubah.

local function atomicWrite(path, content)
  local tmp = path .. ".tmp"
  local f, err = io.open(tmp, "w")
  if not f then return nil, err end
  f:write(content)
  f:close()
  -- os.rename is atomic on most filesystems
  local ok, err2 = os.rename(tmp, path)
  if not ok then
    os.remove(tmp)
    return nil, err2
  end
  return true
end

Menulis Tabel sebagai CSV

Serialisasikan tabel berisi record ke format CSV: tulis baris header, lalu satu baris untuk setiap record, konversikan semua nilai menjadi string, dan gabungkan dengan koma.

local function writeCSV(path, headers, rows)
  local f = io.open(path, "w")
  if not f then return end
  f:write(table.concat(headers, ",") .. "\n")
  for _, row in ipairs(rows) do
    local fields = {}
    for _, h in ipairs(headers) do
      fields[#fields+1] = tostring(row[h] or "")
    end
    f:write(table.concat(fields, ",") .. "\n")
  end
  f:close()
end

writeCSV("data.csv",
  {"name","age","score"},
  {{name="Alice",age=30,score=95},{name="Bob",age=25,score=87}}
)

Nilai Kembalian f:write()

f:write() mengembalikan handle file jika berhasil, sehingga metode dapat dirangkai. Jika gagal, fungsi ini mengembalikan nil, pesan error, dan kode error. Selalu periksa error dalam kode produksi, terutama untuk operasi penulisan pada sistem dengan kapasitas penyimpanan terbatas.

local f = io.open("out.txt", "w")

-- Chaining writes
local ok, err = f:write("line1\n"):write("line2\n"):write("line3\n")
if not ok then
  print("Write failed:", err)
else
  print("All writes succeeded")
end
f:close()

Pemeriksaan Singkat

Apa perbedaan mode "w" dan "a" dalam io.open?

Ringkasan: Menulis File

Ringkasan:

  • f:write(...) — menulis string/angka; tidak ada karakter baris baru otomatis
  • "w" mengosongkan isi file, "a" menambahkan isi
  • f:flush() memaksa penyangga ditulis ke disk
  • io.write() menulis ke output bawaan (stdout)
  • Penulisan atomik: tulis ke file sementara, lalu ganti nama
  • Periksa nilai kembalian penulisan dalam kode produksi

Pertanyaan yang Sering Diajukan

Apakah pelajaran “Menulis dan Menambahkan Isi ke Berkas” gratis?

Ya — teks lengkap “Menulis dan Menambahkan Isi ke 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 “Menulis dan Menambahkan Isi ke Berkas”?

Tulis string ke berkas dan tambahkan data tanpa menimpa isi yang ada. 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 3 dari 4.

Berapa lama pelajaran “Menulis dan Menambahkan Isi ke 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