Amiga Dünyası sayı 23, sayfa 84

Bu sayfadaki yazılar

Sayfanın metni

Sayfa 84

end if OPEN Son jsmi FOR OUTPUT AS 2 PRINT #2,numara CLOSE #2 Return

Biraz uzunca oldu. Gelecek sefere süsleme mahiyetinde olan satırları eklemeyeceğim. Dikkat ederseniz, arada tuş sormak için iki ayrı basit yöntem kullandım. Tabii ki bu verileri okumak ve soruları sormak için çok daha etkili yöntemler kullanabiliriz. Ne var ki, bunlar şu anda konumuz değil (gelecek sefere süsleme tekniklerini anlatırız olur biter). Önemli olan parametremizi, yani dosyanın kaçıncı numarasında olduğumuzu diskete kaydedebildik. Ufak bir sorunumuz var. Programı ilk çalıştırdığımızda diskette verilen isimde bir dosya olmalı ve 0 sayısını içermeli (Numara bir arttırılıp kullanılıyor). Biraz önce ilk kullanım değil, ileri kullanımlar sorun yarattı. Şimdi ise ilk kullanım sorun yaratıyor. Kurtulmak için iki seçeneğimiz var. Biri, başka bir programla bu dosyayı ilk kullanımdan önce hazırlamak. İkinci yöntem ise, bu başka programı asıl programımızın bir parçası yapmak. Asıl programa parça yapmak olayı daha şık çözümlese de, sadece bir kere kullanılacak bir program bölümü ile programı aşırı kabartacaktır. Her halükarda ilk kullanımdan önce (yani ilk isim girilmeden),

OPEN Sonjsim FOR OUTPUT AS # 2 8=0 print #2,a CLOSE #2

satırları çalıştırılmalıdır. Bu kısmı aslında sondan dosya silmek için de kullanabilirsiniz. Evet artık rahatça bilgi girebiliyoruz. Okuyamadığımız bilgiyi saklamanın anlamı yok. Hemen okuyabilecek bir düzen düşünelim.

İsim oku: get #1,numara

iisim$ =isim$ isoyisimS = soyisim$ itno$ = tno$ gosub isim_yaz return isimyaz: print numara;" Numaralı kayıt" print " İsim : ";iisim$ print " Soyisim : ";isoyisim$ print " Numara : ";CVL(itno$) return

Niye isimleri isim$'ten isim$'e kopyalıyorsun diye soracaksınız. Pek gerekli gözükmese de Field ile atanan değişkenler program içinde sabit kalmayan değişkenler. O yüzden mümkün olduğu kadar çabuk bu değerlerden asıl değerleri almak gerekir. Belki ileri aşamalarda bu okunan değerlere, ekrana yazmak dışında ihtiyacımız olur. Dikkat edin, isim okuma kısmımızın temelini numara oluşturuyor. Biz numarayı veriyoruz, o da bize isimleri veriyor. Anahtar olay numara. Şimdiki bilgimiz ve programımızla numaralarını hatırlamak suretiyle herkesin adını bulabiliriz. Ya da son numarayı bulabildiğimize göre tüm isimleri bir liste halinde ekrana (PRINT) veya printer'a (LPRINT) aktarabiliriz. Bu pek az insanı mutlu edecektir. Bizim girilen bir ismi aramamız şart. Birazcık burada kafa karıştırayım. Neleri bilip, neler isteyebiliriz? Mesela adamın soyismi aklımızda (Öğretmensek mesela), olur numarasını merak ederiz. Veya ismini biliyoruz numarayı merak ediyoruz. Olur ya, numarayı biliyoruz, numaranın kime ait olduğunu merak ediyoruz. Hatta adamın ismini biliyoruz, soyismini arıyoruz, soytarılığı bırakalım (daha doğrusu ben bırakayım). Kişi hakkındaki bilgilerimiz tam da olmayabilir. Bu kadar sıralamamın sebebi, aramamızı bu başlıkları kapsayacak şekilde yapmak. Gerçi örneğimizde en mantıklısı isimleri karşılaştırmak ancak bunu biraz genişletebiliriz.

Arama: Input "Aranan ismi girin ";a$ a$ = UCASE$(a$) if a$ ="" then goto arama_biter OPEN Son_isim FOR INPUT AS 2 INPUT #2,i CLOSE #2

For numara = 1 to i gosub İsim oku b$ = iisimS+soyisimS if INSTR (UCASE$(b$),a$) <> 0 then go- sub isim yaz next numara

arama biter: Return

Biraz önce fuzuli gibi gözüken satırların yararını şimdi gördük. İsim yazmak için aynı satırları kullanmamız gerekmedi. Burada dikkat ederseniz sadece isim değil, soyismi girilerek de aranan isim bulunabilir. En güzeli bu iş için arananın niteliğinin belirtilmemesi. UCASE$ fonksiyonu bugün ikinci kez karşımıza çıkıyor. Büyük ve küçük harflerin karışmaması için aramalarınızda bu emri kullanmaya dikkat edin. Sorunlarımız daha tam olarak çözülmedi. 10000 numara arasından bir numara bulabilmek için, tüm numaraları teker teker okumamız gerekiyor. Bu konu üzerinde biraz sonra tartışalım.

Şimdi bir diğer mesele, bir kayıt silmek istiyoruz. Bu konu biraz karışık. Size yardımcı olacak bir iki öneri getirmeye çalışayım. Eğer sondan silmek istiyorsak bu sorun değil. Yapacağımız tek şey Son_isim isimli dosyada bulunan değeri okuyup, düşürmek ve tekrar yazmak. Ancak programlarınız özel şartlar dışında da akıllıca davranabilmeli. Aşağıdaki harf sırasını göz önüne alalım.

A-B-C-D-E-F-G-H-I-J-K-L

Her harf, bir kaydı simgelesin. 12 adet kaydımız var. Ve Son_isim dosyasındaki sayı, yani numara değeri 12. İlk olarak sadece bir kayıt silmek isteyelim. Dosya sonda ise yapılacak tek şey Son_isim dosyasında bulunan sayıyı küçültmek. Bu silinmesi istenen kaydı silmeyecek, ancak yeni kayıt yapıldığı zaman silinmesi istenen kaydın üzerine kayıt yapılacaktır. Ama bizim kayıt sonda değil de, diyelim E harfi ile gösterilen kayıt olsun. Bu durumda yapabileceğimiz en basit ve etkili yol yine Son_isim dosyasında bulunan numarayı küçültmek, ne de olsa bir kayıt silince toplam kayıt sayısı düşecektir. Bunun ardından en son kaydımızı silinmesi istenen kaydın üzerine yazarız. Dizi şu şekli alır:

A-B-C-D-L-F-G-H-I-J-K

Klavyeyle gezinmek için ← ve → tuşları.