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()
endMenulis 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")
endio.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
endMenulis 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 isif:flush()memaksa penyangga ditulis ke diskio.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
- Membuka Berkas dengan io.open
- Membaca Isi Berkas
- Menulis dan Menambahkan Isi ke Berkas
- Menutup Berkas dan Menangani Galat