0Pricing
Lua Academy · Ders

Dosya İçeriğini Okuma

file:read() yöntemleriyle satırları, baytları ve tüm içeriği okuyun.

Dosya İçeriğini Okuma, CoddyKit'te ücretsiz bir Lua Academy dersidir. Bu, 4 dersinin 2. 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.

Dosyanın Tamamını Okuma

Dosyanın tamamını bir dizeye okumak için f:read("a") (veya "*a") kullanın. Bu yöntem küçük ve orta boyutlu dosyalar için basit ve uygundur. Çok büyük dosyalarda bellek sorunlarını önlemek için parçalar hâlinde veya satır satır okuyun.

local f = io.open("config.txt", "r")
if f then
  local content = f:read("a")
  f:close()
  print("Size:", #content, "bytes")
  print(content)
end

Satır Satır Okuma

f:read("l") bir sonraki satırı okur ve satır sonunu kaldırır. EOF konumunda nil döndürür. Her satırı işlemek için while ile döngü kurun. f:lines() aynı işlemi yapan, deyimsel olarak tercih edilen kısa yoldur.

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

Sabit Sayıda Bayt Okuma

Tam olarak n bayt okumak için f:read(n) çağrısına bir sayı geçirin. Bu çağrı, en fazla n baytlık bir dize döndürür (EOF'a ulaşılırsa daha az olabilir) veya EOF konumunda nil döndürür. İkili protokoller ya da yapısal dosya biçimleri için kullanın.

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

Sayı Okuma

f:read("n") dosyadaki bir sonraki sayıyı, boşlukları atlayarak okur. Bir Lua sayısı döndürür; sonraki belirteç sayı değilse nil döndürür. Yapısal sayısal veri dosyalarını okumak için kullanışlıdır.

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

Dosyalarda Konum Değiştirme

f:seek(whence, offset) dosya konumunu değiştirir. whence, "set" (başlangıçtan), "cur" (geçerli konumdan) veya "end" (sondan) olabilir. Yeni mutlak konumu döndürür. Dosyalarda yeniden okuma yapmak veya farklı konumlara geçmek için kullanın.

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

CSV Dosyalarını Okuma

CSV verilerini satır satır ayrıştırın: her satırı okuyun, ardından string.gmatch kullanarak virgüllere göre ayırın. Üretim kullanımı için tırnak içine alınmış alanları ve tırnak içindeki virgülleri ele alın; basit veriler için temel ayırma işlemi yeterlidir.

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

Yapılandırma Dosyalarını Okuma

Basit bir anahtar=değer yapılandırma biçimi kullanabilirsiniz: satır satır okuyun, yorumları ve boş satırları atlayın, string.match ile anahtar=değer çiftlerini ayrıştırın.

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)

Parçalar Hâlinde Okuma

Büyük dosyalarda her şeyi belleğe yüklemekten kaçınmak için sabit boyutlu parçalar hâlinde okuyun. Her parçayı gelir gelmez işleyin. Bu yöntem, kullanılabilir RAM'den büyük dosyalar için zorunludur.

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

Satır Başına Birden Çok Değer Okuma

Her satırda boşlukla veya sekmeyle ayrılmış birden çok değer bulunduğunda, bunları çıkarmak için string.match veya string.gmatch kullanın. Bu örüntü, basit yapısal metin dosyalarını işler.

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

io.lines Kısa Yolu

io.lines(filename) dosyayı açar, bir satır yineleyicisi döndürür ve işlem bittiğinde dosyayı kapatır. Tutamacı açıkça yönetmeden dosyayı satır satır okumanın en kısa yoludur.

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

Kısa Denetim

Dosya işaretçisi zaten EOF konumundaysa f:read("a") ne döndürür?

Tekrar: Dosyaları Okuma

Özet:

  • f:read("a") — dosyanın tamamını dize olarak döndürür
  • f:read("l") — satır sonu olmadan bir satır döndürür
  • f:read(n) — tam olarak n bayt döndürür
  • f:read("n") — sonraki sayıyı döndürür
  • io.lines(path) — satır yineleyicisi, otomatik kapatma
  • f:seek() — konuma geçer

Sıkça Sorulan Sorular

“Dosya İçeriğini Okuma” dersi ücretsiz mi?

Evet — “Dosya İçeriğini Okuma” 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.

“Dosya İçeriğini Okuma” dersinde ne öğreneceğim?

file:read() yöntemleriyle satırları, baytları ve tüm içeriği okuyun. 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 2. dersidir.

“Dosya İçeriğini Okuma” 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