11.07.2015 Views

Amiga Dunyasi - Sayi 23 (Nisan 1992).pdf - Retro Dergi

Amiga Dunyasi - Sayi 23 (Nisan 1992).pdf - Retro Dergi

Amiga Dunyasi - Sayi 23 (Nisan 1992).pdf - Retro Dergi

SHOW MORE
SHOW LESS

You also want an ePaper? Increase the reach of your titles

YUMPU automatically turns print PDFs into web optimized ePapers that Google loves.

F.Kağan GürkaynakBasic'çiler sıkı durun başlıyoruz. Bu ayki konumuzdosyalamalar. Geç*en aydan takip edenler hatırlayacaklar,dosyalamalarda karşılaşılan bazı sorunlaradeğinmiştik. Çözüm yollarını aramak isebu aya kalmıştı. Kısaca tekrar edelim:<strong>Amiga</strong> Basic ile kullanılabilen iki tür dosyalamavar. Bunlardan birincisi ile dosyayı nasıl kaydetmişsekaynı şekil ve sırada geri alabiliyorduk. Sıralıveya Sequential adı verilen bu tür dosyalamanınhiç sorun çıkarmadan kullanılabildiğini anlatmışve örnek vermiştik. İkinci tür dosyalama ise, bizebazı imkanlar sunuyordu. Random Access, rasgeleerişim adı verilen bu dosyalama tekniği ile disketebelirli bir düzene (formata) uyan bilgi paketleriyerleştirebiliyor ve büyük bir dosya içerisinden istediğimizpakete kolayca (o kadar kolay mı değilmi göreceğiz daha!) erişebiliyorduk. Bilgisayarınızile basit programlar yapmak istiyorsanız, er veyageç bu tür dosyalama ile halledilebilecek programlaryazmak isteyeceksiniz. Bu tür ihtiyaçların enklasikleri: İsim listeleri, telefon defterleri veya stokdefterleri tutmaktır.Kağan iyi güzel de, geçen yazıda bize bir sürüsorun anlatmıştın diyeceksiniz. Doğru, ama sorunlarlakarşılaşabilmek için ilk önce programımızınçatısını oluşturalım. Her zaman yaptığım gibi uzundökümler vermekten kaçınmak istiyorum. Bu yüzdenprogramı bölüm bölüm oluşturacağız. Tüm işlemleriGOSUB ile çağrılan ve RETURN ile bitenbir altprogram şeklinde yazacağım.Programımızla bir telefon defteri yapmak isteyelim.Basit olması açısından defterde sadece telefonsahibinin ismi, soyismi ve telefon numarası bulunsun.İlk belirlememiz gereken, dosyamıza ait birbilginin ne şekilde ve ne büyüklükte temsil edileceği.Dosyamızda üç adet büyüklük var. Bunlarakarar verdik. İsim ve soyisim mecburen alfanümerikolmak zorundalar. İşte ilk sorun, acaba bunlarane büyüklük verelim. Yani isim ve soyisim kaçarharften oluşsun? Burada sorun bir şekil sorunu değil,bir yer sorunu. Örneğin isim 20, soyisim 40 karakterdenoluşsun derseniz, toplam olarak bir dosyanızınbir elemanı 60 byte edecektir (numara işiniçinde değil). Aynı eleman isim 8, soyisim 12 karakteralınırsa, 20 byte'lık yer kaplayacaktır. Burada40 byte'ın ne önemi var diyeceksiniz. Unutmayındefterlerinizde l'den çok fazla isim olmalı(yoksa niye defter tutuyorsunuz?). İlk bilgisayarım1 Kb'lıktı (1024 byte), dolayısı ile tasaruflu olanisim 8 ve soyisim 12 karakter büyüklüğünü kullanacağım.Numara ikinci konumuz. Telefon numarasınıbir sayı olarak alabilir veya isimler gibi karakterolarak tanımlayabiliriz, istanbul'u düşünerek338 08 95 olan numaramızı,a$ = "3380895"olarak 7 byte, veyaa =3380895LSET a$ = MKL$(a) olarak 4 byte yer kaplayacakşekilde saklayabiliriz. İkinci örnekte gördüğünüzyöntemi, tüm sayılan saklamak için kullanmamızgerekiyor. Yani rasgele erişimli dosyalara sayılaryazamıyor, onları MKL$, MKI$, MKS$,MKD$ ile alfanümerik değişkenlere dönüştürüyorve LSET veya RSET emirleri ile sola veya sağa bitiştiriyoruz.Bu tür bir sayıyı okumak için ise,a = CVL (a$)örneğinde olduğu gibi CVL, CVI, CVS ve CVDemirlerini kullanacağız. Ben tasarufa devam ediyorum.Artık dosyamızı tanımlayabiliriz.Dosya_ac:OPEN D_ismi AS 1 LEN=24FIELD #1,8 AS isim$, 12 AS soyisim$, 4AS tno$RETURNDosyamızın ismi D_ismi olarak tanımlandı. Bunuister INPUT yolu ile kullanıcıdan sorar, ister birsabit olarak kullanırsınız, size kalmış. Artık birimuzunluğu 24 olan ve bu 24 byte'ın 8'ini isim,12'sini soyisim, 4'ünü ise telefon numarası içinharcayan bir dosyaya sahibiz. Bu dosyalama türüile kaç dosya mı açabiliriz? 1024 isim olsa, 24 kilobyteedecek. Bu kadar ufak bir dosya, 512 KBaletlerde bile kolayca RAM: diske sığabilir. Dikkatedin, birim uzunluk 200 byte olsa, bu dosya 200KB tutacaktı!!!Artık bir dosyamız var. Amacımız bu dosyayaveriler yazmak. Bu dosyanın özelliği, tüm dosyayıokumadan doğrudan istenen yere ulaşabilmek idi.Bu amaçla rasgele erişim dosyalarında bir numaralamakullanılır. İlk kayıta 1 numarası verilir ve herbir kayıt kendi numarası ile erişilir bir hale gelir.Burada önemli bir durumla karşı karşıyayız. KA-YIT NUMARASINI BİLMEK ZORUNDAYIZ!!!Yani en azından son yazılan kayıtın numarasını bilmemizlazım ki, yeni bir şey ekleyebilelim. Programilk çalıştığında bu kolay. Dosya yeni olduğundan,doğrudan ilk dosyayı yazacağız. On gün sonrabir arkadaşınız daha olur ve numarasını eklemekistersek, en son nerede kaldığımızı bilmek zorundayızİki yol önerebilirim: ilki her kaydın başındadosya numarasını sormak, son yapılan kaydı isebir kenara not etmek. İkinci çözüm ise not etme işleminibir sıralı dosya yardımı ile diskete yapmakve gerektiğinde oradan okumak. İşte kayıt eklemekısmımız:Yeniisim:OPEN Sonjsmi FOR INPUT AS 2INPUT #2,numaraCLOSE #2numara = numara +1isimsor:Print:PrintPrint "Kayıt no : ", numaraPrintPrint "Telefon Sahibinin "Input "İsmi : ";iisim$Input "Soyismi : ";isoyisim$Input "Numarası : ";itnoLset isimŞ = iisim$Lset soyisim$ = isoyisim$Lset tno$ = MkI$ (itno)printprint "Bu bilgiler yanlışsa q tuşuna basın "a$="1"while a$= "" :a$=inkey$: wendif UCASE$ (a$) = "Q" then goto isim_sorput #1,numaraprintinput " Yeni kayıt (evet/hayır)";a$if Ucase$(Left$(a$,1)) "H" thennumara=numara+1goto isimsorAMIGA DÜNYASI 96

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!