Lua Academy · Ders

Dosyalara Yazma ve Sona Ekleme

Dizeleri dosyalara yazın ve üzerine yazmadan veri ekleyin.

3. ders / 412 adım

Dosyalara Yazma ve Sona Ekleme, CoddyKit'te ücretsiz bir Lua Academy dersidir. Bu, 4 dersinin 3. dersidir. Aşağıdan dersin tamamını ücretsiz okuyabilir, sonra tarayıcıda yerleşik kod editörü ve 7/24 yapay zeka koçu ile uygulamalı olarak pratik yapabilirsin. Bu, Lua Academy öğrenme yolunun bir parçasıdır ve ilerlemeniz web ve CoddyKit uygulaması arasında senkronize olur. Lua Academy kursu toplamda 4 dersten oluşur.

f:write() Temelleri

f:write(...) dosyaya bir veya daha fazla dizeyi (ya da sayıyı) yazar. Satır sonlarını otomatik olarak eklemez. Başarılı olursa dosya tutamacını döndürür (zincirleme çağrıları mümkün kılar); başarısız olursa nil, errMessage, errCode döndürür.

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

Birden Çok Değer Yazma

f:write() birden çok bağımsız değişken kabul eder ve bunların tümünü sırayla yazar. Değerler dize veya sayı olmalıdır; diğer türlerin geçirilmesi bir hataya yol açar. Boole değerlerini, tabloları ve benzerlerini dönüştürmek için tostring() kullanın.

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

Biçimlendirilmiş Yazma

Çıktıyı hassas biçimde oluşturmak için string.format ile f:write işlevini birleştirin. Bu örüntü, belirli biçimlendirme gereksinimleri olan raporlar, günlük dosyaları ve veri aktarımları oluştururken yaygın olarak kullanılır.

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

Ekleme Kipi

"a" kipi her zaman dosyanın sonuna yazar. Okuma konumu başlangıçtadır; ancak yazma işlemleri daima sona yapılır. Günlükler, denetim kayıtları ve mevcut içeriği silmeden ekleme yapmak istediğiniz tüm dosyalar için kullanın.

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() ve Arabelleğe Alma

Lua'da dosya G/Ç işlemleri arabelleğe alınır. f:write() ile yazılan veriler diske ulaşmadan önce bir arabellek içinde kalabilir. f:flush(), dosyayı kapatmadan arabelleği diske yazmaya zorlar. Verileri başka bir işlemin görmesi gerektiğinde her zaman önce arabelleği boşaltın.

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

İkili Veri Yazma

İkili yazma kipinde ("wb") ham baytları string.char() ile yazın. İkili dosya biçimleri, görüntüler veya protokol iletileri bu şekilde oluşturulur. Yapısal ikili veriler için string.pack (Lua 5.3+) kullanın.

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 ve f:write Karşılaştırması

io.write() geçerli varsayılan çıktıya (başlangıçta stdout) yazar. f:write() belirli bir dosya tutamacına yazar. print() işlevinin aksine, bu iki işlev de satır sonu veya sekme ayırıcıları eklemez; böylece çıktı biçimlendirmesi üzerinde tam denetim sağlarsınız.

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

Atomik Yazma Örüntüsü

Güvenlik için önce geçici bir dosyaya yazın, ardından bu dosyayı yeniden adlandırın. Böylece çıktı dosyasının kısmen yazıldığı bir zaman aralığı oluşmaz. İşlem yazma sırasında çökerse özgün dosya değişmeden kalır.

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

Tabloları CSV Olarak Yazma

Kayıtlar içeren bir tabloyu CSV biçimine dönüştürün: bir başlık satırı yazın, ardından her kayıt için bir satır yazın; tüm değerleri dizelere dönüştürüp virgüllerle birleştirin.

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

f:write() Dönüş Değeri

f:write() başarılı olduğunda dosya tutamacını döndürür ve yöntem çağrılarını zincirlemenizi sağlar. Başarısız olduğunda nil, bir hata iletisi ve bir hata kodu döndürür. Özellikle depolama alanı sınırlı sistemlerdeki yazma işlemlerinde, üretim kodunda hataları her zaman denetleyin.

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

Kısa Denetim

io.open içindeki "w" ve "a" kipleri arasındaki fark nedir?

Tekrar: Dosyaları Yazma

Özet:

  • f:write(...) — dizeleri/sayıları yazar; satır sonunu otomatik eklemez
  • "w" içeriği keser, "a" sona ekler
  • f:flush() arabelleği diske yazmaya zorlar
  • io.write() varsayılan çıktıya (stdout) yazar
  • Atomik yazma: geçici dosyaya yazın, ardından yeniden adlandırın
  • Üretim kodunda yazma dönüş değerlerini denetleyin
Başlamak ücretsiz

Yapay zeka eğitmeniyle Lua öğren — ücretsiz

Tarayıcında gerçek kod yaz ve çalıştır, 7/24 yapay zeka eğitmeninden anında yardım al; web'de ya da uygulamada kaldığın yerden devam et.

Kurslar
40
Dersler
159

Sıkça Sorulan Sorular

“Dosyalara Yazma ve Sona Ekleme” dersi ücretsiz mi?

Evet — “Dosyalara Yazma ve Sona Ekleme” dersin tüm metni burada web'de ücretsiz olarak okunabilir. Etkileşimli olarak pratik yapmak (yerleşik kod editörü ve 7/24 yapay zeka koçu) ve Lua Academy kursunun geri kalanını açmak için CoddyKit PRO'ya yükselt. Lua Academy kursu toplamda 4 dersten oluşur.

“Dosyalara Yazma ve Sona Ekleme” dersinde ne öğreneceğim?

Dizeleri dosyalara yazın ve üzerine yazmadan veri ekleyin. Lua Academy ile uygulamalı kodu tarayıcıda doğrudan çalıştırarak pratik yaparsın ve 7/24 yapay zeka koçu dersi çalışırken sorularını yanıtlar.

Lua Academy öğrenmeye başlamak için deneyim gerekli mi?

Önceden deneyim gerekmez. CoddyKit'te Lua Academy, başlangıçtan ileri seviyeye kadar yapılandırıldığı için buradan başlayabilir veya başından başlayıp kendi hızında ilerleme yapabilirsin. Bu, 4 dersinin 3. dersidir.

“Dosyalara Yazma ve Sona Ekleme” dersi ne kadar sürer?

Çoğu CoddyKit dersi yaklaşık 5–10 dakika sürer. Her biri kısa ve etkileşimli olduğu için sabit ilerleme yaparsın ve web ile uygulama arasında tam olarak bıraktığın yerden devam edebilirsin.

Bu Lua Academy dersinde kod yazıp çalıştırabilir miyim?

Evet. Her Lua Academy dersi yerleşik bir kod editörü içerir, bu sayede tarayıcıda gerçek kod yazıp çalıştırabilir ve anlık yapay zeka geri bildirimi alırsın — yerel kurulum gerekli değildir.

Bu kursun tüm dersleri

  1. io.open ile Dosya Açma
  2. Dosya İçeriğini Okuma
  3. Dosyalara Yazma ve Sona Ekleme
  4. Dosyaları Kapatma ve Hata İşleme
← Lua Academy Sayfasına Dön