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:
@@ -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
|
||||
```
|
||||
Reference in New Issue
Block a user