Dersler ve Temeller; web örnekleri PORT ortam değişkenini okur

- dersler/: 29 kısa ders (açıklama, çalıştırılabilir örnek, alıştırma). Her örneğin
  ve alıştırma çözümünün çıktısı Online IDE'nin hazırlık adımında gerçekten koşulup
  dosyadakiyle karşılaştırılır; biçim dersler/BICIM.md.
- temeller/: tek konulu 12 başlangıç programı.
- web/anket, web/kisalt, web/pano: port PORT ortam değişkeninden okunur (Online IDE
  önizlemesi 8080 verir), yoksa eski sabit port.
- README: öğrenme bölümü, Online IDE bağlantısı.
This commit is contained in:
2026-10-17 22:07:47 +03:00
parent c5468f5d0a
commit 494781e84f
47 changed files with 5942 additions and 4 deletions
+135
View File
@@ -0,0 +1,135 @@
---
baslik: Dosyalar
bolum: Hatalar ve dosyalar
ozet: Dosyaya yazmak, sonuna eklemek, geri okumak ve JSON ile saklamak
---
Program bittiğinde değişkenlerdeki her şey kaybolur. Bilgiyi saklamak için dosyaya yazarsın; program bir sonraki çalışmada onu geri okuyabilir. Dosya işlemleri `dosya` modülündedir; `kullan kaba.sistem` ile gelir.
> **Not:** Bu dersteki örnekler çalıştıkları klasörde dosya oluşturur. Her örnek önce yazar, sonra aynı programda geri okur.
## Yazmak ve okumak
`dosya.yaz(yol, metin)` dosyayı oluşturur; dosya varsa içeriğini **silip** yeniden yazar. `dosya.oku(yol)` bütün dosyayı tek bir metin olarak verir.
```kbl
kullan kaba.sistem
dosya.yaz("selam.txt", "Merhaba dosya!\n")
icerik = dosya.oku("selam.txt")
yazdir(icerik)
```
```cikti
Merhaba dosya!
```
Her satırın sonuna `\n` koyarsın; yoksa satırlar yan yana birleşir.
## Sonuna eklemek
`dosya.ekle(yol, metin)` var olan içeriğe dokunmadan sonuna ekler.
```kbl
kullan kaba.sistem
dosya.yaz("gunluk.txt", "Pazartesi: 5 km koştum\n")
dosya.ekle("gunluk.txt", "Salı: dinlendim\n")
dosya.ekle("gunluk.txt", "Çarşamba: 7 km koştum\n")
yazdir(dosya.oku("gunluk.txt"))
```
```cikti
Pazartesi: 5 km koştum
Salı: dinlendim
Çarşamba: 7 km koştum
```
> **Dikkat:** Bir kayıt eklemek istiyorken `dosya.yaz` kullanırsan dosyadaki eski her şey silinir. Eklemek için `dosya.ekle` kullan.
## Satır satır işlemek
Okuduğun metni `kirp()` ile sondaki `\n`'den arındırıp `bol("\n")` ile satırlara ayırırsın. Her satırı da `;` gibi bir ayraçla bölüp alanlara ulaşırsın.
```kbl
kullan kaba.sistem
dosya.yaz("alisveris.txt", "ekmek;2;12.50\n")
dosya.ekle("alisveris.txt", "süt;1;34.90\n")
dosya.ekle("alisveris.txt", "domates;3;18.75\n")
toplam = 0.0
dongu satir icinde dosya.oku("alisveris.txt").kirp().bol("\n"):
parca = satir.bol(";")
adet = sayi(parca[1])
tutar = adet * ondalik(parca[2])
toplam += tutar
yazdir(f"{parca[0]:<10}{adet:>3}{tutar:>9.2f}")
yazdir(f"{'Toplam':<13}{toplam:>9.2f} TL")
```
```cikti
ekmek 2 25.00
süt 1 34.90
domates 3 56.25
Toplam 116.15 TL
```
## Dosya var mı?
Olmayan bir dosyayı okumak hata vermez, boş metin döndürür. Bu yüzden önce `dosya.var_mi()` ile sorarsın. `dosya.sil()` dosyayı siler.
```kbl
kullan kaba.sistem
dosya.yaz("gecici.txt", "deneme\n")
yazdir(dosya.var_mi("gecici.txt"))
dosya.sil("gecici.txt")
yazdir(dosya.var_mi("gecici.txt"))
eger degil dosya.var_mi("ayarlar.txt"):
yazdir("ayarlar.txt yok, varsayılanlar kullanılacak.")
```
```cikti
doğru
yanlış
ayarlar.txt yok, varsayılanlar kullanılacak.
```
## JSON ile saklamak
JSON, sözlük ve listeleri metne çevirmenin yaygın bir biçimidir; başka programlar da okuyabilir. `json.uret()` bir sözlüğü metne çevirir, `json.coz()` metni geri çözer.
```kbl
kullan kaba.sistem
ayarlar = {"tema": "koyu", "yazi_boyutu": 14}
dosya.yaz("ayarlar.json", json.uret(ayarlar))
yazdir(dosya.oku("ayarlar.json"))
okunan = json.coz(dosya.oku("ayarlar.json"))
yazdir(f"Tema: {metin(okunan['tema'])}")
yazdir(f"Yazı boyutu + 2: {sayi(okunan['yazi_boyutu']) + 2}")
```
```cikti
{"tema":"koyu","yazi_boyutu":14}
Tema: koyu
Yazı boyutu + 2: 16
```
JSON'dan çözülen değerin türü derleme anında bilinmez; `metin()` ve `sayi()` ile hangi türde kullanacağını açıkça söylersin.
> **İpucu:** Bozuk olabilecek bir dosyayı çözmeden önce `json.gecerli_mi(metin)` ile denetle; geçerli değilse `yanlis` döner.
## Alıştırma
```alistirma
`notlar.txt` dosyasına üç satır yaz: `Ayşe;88`, `Can;47`, `Elif;92` (ilkini `yaz`, diğerlerini `ekle` ile). Sonra dosyayı okuyup her satırı bölerek notların ortalamasını 1 basamakla `Ortalama: 75.7` biçiminde yazdır.
%%%
kullan kaba.sistem
# buraya yaz
%%%
kullan kaba.sistem
dosya.yaz("notlar.txt", "Ayşe;88\n")
dosya.ekle("notlar.txt", "Can;47\n")
dosya.ekle("notlar.txt", "Elif;92\n")
toplam = 0
satirlar = dosya.oku("notlar.txt").kirp().bol("\n")
dongu satir icinde satirlar:
toplam += sayi(satir.bol(";")[1])
yazdir(f"Ortalama: {toplam / satirlar.uzunluk():.1f}")
%%%
Ortalama: 75.7
```