Bu sayfadaki yazılar
Sayfanın metni
Sayfa 11
Bu yazımda sequential file kullanarak bir telefon rehberi yapacağız. Amacımız sizlere sequential file kullanmayı öğretmektir.
Osman Ambaroğlu
Dosyalama Nedir?
Birçoğumuz COMMODORE ile, programlarımızı tape ya da disk üstüne saklıyoruz. Bunu yapmamızın sebebi, programı yeniden yazmamak içindir. Tabii, işlem, bilhassa uzun programlarda çok önemlidir. Kullanıcı da iyi bir program geliştirmeye başlamışsa, her sefer aynı programı yazmamak için tape ya da disk üstüne programını saklayacaktır. Tape ve disk ünitesi, programları saklamaktan başka, programın çalışması esnasında eski verileri görmek için veya yeni verileri almak için de kullanılır. Bilhassa programımızda kullandığımız veriler çok fazla ise, bilgisayarın hafızasını gereğinden fazla data'larla doldurmaya gerek yoktur. Bunun için verilerimizi, tape ya da disk ünitesinde bir dosyada tutarak, gerektiği zaman o verileri okumak veya yeni veriler eklemek çok kullanışlı olacaktır. İşte biz bu işleme dosyalama diyoruz. Dosyalama çek, senet takibi, kelime işlem, muhasebe gibi hemen hemen her iş programının vazgeçilmez öğesidir.
Sequential File
Diskette bilgi saklamanın bir yolu da sequential file kullanmaktır. Sequential file sıralı olarak diskette bilgi saklar. Bu bilgiler sayısal veya alfasayısal olabilir. Sequential file kullanırken 3 noktaya dikkat etmek gereklidir.
1) Dosyanın açılması, 2) Bilgilerin yazılması veya okunması, 3) Dosyanın kapatılması.
Şimdi sequential file kullanırken gerekli deyimleri kısaca gözden geçirelim.
Open
Dosyayı açarken kullanacağımız deyimdir. Kullanma şekli aşağıdaki gibidir:
OPEN (DOSYA NO), (AYGIT NO), (KANAL İSMİ), S, (YAZMA VEYA OKUMA).
Dosya numarası 4 ile 127 arasında bir tam sayıdır.
Aygıt numarası bilindiği gibi (Disk sürücüsünün aygıt numarası “8”dir). Kanal numarasına ikinci adres de diyebiliriz. 2 ile 14 arasında bir rakam verebiliriz. Zaten kaset teyp kullananlar için bu adres “41” ya da “0” değerini almaktadır. “0” olursa okuma, “41” olursa yazma amacıyla dosya açılmaktadır. Dolayısıyla bu programın teyp ya da disk ünitesinde çalışması için tek fark bir deyimde yatmaktadır. Yani teyp ünitesi için bir deyim open (dosya no), (aygıt no), (yazma/okuma için 1 ya da 0)'dır. Daha sonra dosyanın sequential olduğunu göstermek için “S” harfi yazılır. Sonra da dosyanın okuma ya da yazma olduğunu göstermek için “R” veya “W” yazılır. Yalnız diskette okuma rutinini açarken sadece open (dosya no), (aygıt no), (kanal no), “(dosya ismi)” yazılabilir.
Diskten bilgi yazarken bunu kullanabilirsiniz. Kullanma şekli aşağıdaki gibidir: PRINT # (DOSYA NO), (DEĞİŞKENLERİN LİSTESİ)
Input #
Disketten bilgi okurken bunu kullanabilirsiniz. PRINT # gibi kullanmaktadır.
INPUT # (DOSYA NO), (DEĞİŞKENLERİN LİSTESİ)
Bu arada iki önemli kuralı hatırlatmakta fayda var. 1- Alfasayısal bilgilerde dikkat maximum 255 karakter yazabilir. 2- Büyük alfasayısal bilgilerde disketten input ile 88 karakter kadar bilgi alınabilir. Daha büyük bilgi almak için deyiminin kullanılması gereklidir. Şimdi ekte örnek olarak verdiğimiz programın açıklamasını yapalım.
45-80. satırlar
Bu satırlar ekrana menüyü yazmak için yazılmıştır.
Klavyeyle gezinmek için ← ve → tuşları.
Sayfa 10
Geçişli Bağımlılıklar
Farzedelim ki, Şekil 4., Help dosyanızdaki tüm bağımlılıkları liste halinde gösteriyor. Ürün'den Bağlantı'ya ve Bağlantı'dan Telefon'a olan geçişli bağımlılığa dikkat buyurunuz. Geçişli bağımlılık A, B ve C alanları iki bağımlılığa sahip olduğu durumlarda ortaya çıkar: A -> B ve B -> C'de (bu bağımlılıklar Ürün -> Bağlantı ve Bağlantı -> Telefon biçimindedir) Ve, B ile A arasında hiç bağımlılık yoktur. Herhangi bir geçişli bağımlılık tehlikeli bir dosyalama yapısına işaret eder. Esin'in telefon numarasının Help dosyasında gereksiz yere tekrar edilişi gibi, A -> B -> C şeklinde bir geçişli bağımlılık her zaman, A'nın farklı değerleri için C değerleriyle birlikte düzenlenen B değerlerinin tekrarlanması sonucunu verecektir. Ve bu tekrarlanış, sırası geldiğinde, eğer tutar bir de database'inizi değiştirirseniz biribirini hiç tutmayan, yanlış bilgilere de yol açabilir. Esin'in telefon numarasının yanlış kaydı meselesinde olduğu gibi. Aynı zamanda, yer israfına da sebep olabilir, bunun örneğini, Esin'in telefon numarasının 100 defa kaydedilmesi olayında gördük. Geçişli bağımlılıklar, dosyaların düzenlenmesinde daimi olarak yapısal sorunlara sebebiyet verirler. Eğer bu tür geçişli bağımlılıklara dikkat ederseniz, yukarıda izah ettiğim güçlüklerden kendinizi korumuş olursunuz.
Ne Yapmalı?
Bu makalenin sizi, database dosyalarınızı yeniden bir göz gezdirmeye ve içerdikleri bağımlılıkların bir dökümünü çıkarmaya ve sonra da geçişli bağımlılıkları bir daha incelemeye sevkedeceğini ümit ediyorum. Ama, öyle uzun boylu büyüleneyim demeyin. Yapılanmış programlamanın gerektiğinde GOTO ifadelerinden istifa etmesi gibi, verilerin düzenlenmesi teorisi de, düzenleyiciye yönelik bir dizi uyarı olarak düşünülmelidir. Help dosyasının tehlikeli olabileceğinde gösterdiğim gibi, çeşitli nedenler onu kendi haline bırakmayı da haklı gösterebilir. Mesela, bir dosyadaki geçişli bağımlılıktan kurtulmanın olağan yolu, dosyayı iki yeni dosyaya bölmektir. Sizin sahip olduğunuz database sistemi bir seferde iki dosyaya bölünmeye müsait olmayabilir. Bu nedenle, eğer dosyalarınızda geçişli ya da gömülü bağımlılıklar keşfederseniz, dosya yapısını değiştirmeye kalkışmadan önce, işin daha da çatallaşabileceğini de hesaba katın. En azından iki önemli soru kalıyor geriye: Bir geçişli veya gömülü bağımlılık keşfettiğinizde, bunu nasıl düzelteceksiniz? Ve database'leri daha işin en başından bu türden bağımlılıklar yaratmamaları için, nasıl düzenlemek gerekiyor? Bu soruların cevaplarını daha ilerki sayılarımızda bulacaksınız. Ayrıca, aşağıda adları verilen kitapların incelenmesi, bu soruların cevaplarını kendi başınıza bulmanızı sağlayacaktır.
Ürün Bağlantı — Telefon no: Spread...... Esin 568-6588 Comm....... Esin 937-8194 Comm....... Doğan 485-0898 Procmail.... Esin 237-8194 Procbase...Esin 237-8194
Şekil 1. Help. Bilgisayar ürünlerinin bir dosya database'i.
Ürün Bağlantı — Telefon no: Procword...Doğan....... 263-2900 Spread...... Sama 568-6588 Ece 237-8194 Comm....... 485-0898 Procmail ... Ece 237-8194 Procbase... 237-8194
Şekil 2. Help'e yeni bir bağlantı ilave ediyor. Doğan eklendi.
Ürün Bağlantı Telefon no: Procword...Doğan....... 525-5793 Spread...... Sn 332-3208 520-1453 Comm....:.. 485-0898 Procmail .... Verm 237-8194 237-8194
Şekil 3. Help'de bir bağlantı için tutarsız, yanlış telefon numaraları, Esin
Bağımlılık > Bağlantı
Database'de her Ürün için yalnızca bir bağlantı mevcut demektir (Bu bağımlılık esası Şekil 2'nin örneğinde geçerli değildir. Çünkü, Procword ürünü için birden fazla bağlantı gösterilmiştir.)
Bağımlılık > Telefon
Database'de bir bağlantı verilmiş ve bu bağlantı ile yalnızca bir tek telefon numarası bağlantılı demektir. (Bu bağımlılık esası, Şekil 1'deki örnek için geçerli ama, Şekil 3 için geçerli değildir.)
Şekil 4. Help'te muhtemel bağımlılıklar.