VERI ve DOSYA ISLEME
Transkript
VERI ve DOSYA ISLEME
VERI ve DOSYA ISLEME (DERS NOTLARI) Doç. Dr. Ata ÖNAL Ege Üniversitesi Mühendislik Fakültesi Bilgisayar Mühendisligi Bölümü Bornova - Izmir, 2004 ÖNSÖZ Bilindigi üzere, günümüzde görsel ve nesne tabanli yazilim teknolojilerinin oldukça gelismesi nedeniyle, son kullanicilarin bilgisayar yazilimlarindan yararlanabilmeleri orani bir hayli yüksek düzeylere ulasmistir. Bununla beraber, yazilim teknolojilerindeki uç kullanicilarin daha kolay ve görsel arayüzlere sahip ortamlara ulasabilmelerini saglayan gelismeler, bilgisayar mühendisligi alaninda da o ölçüde karmasiklasan bir yazilim dünyasinin ortaya çikmasina neden olmustur. Bu sebeple de, bilgisayar mühendisligi egitiminde, bu gelisen yazilim teknolojileri için en temel nedeni olusturan unsur olan ve her geçen gün miktari ve hacmi daha da artan “veri” ve “bilgi”nin, son kullaniciya daha hizli ve anlamli olarak ulasmasini saglayan veri ve dosya yönetimi tekniklerinin daha fazla önem kazanmis oldugu gözlenmektedir. Bu kitap, bu temel gerekçeye dayali olarak ve uzun yillardir E.Ü. Meslek Yüksekokulu Bilgisayar Programciligi Bölümünde verilen dersin müfredatina uygun olarak hazirlanmistir. Bu kapsamda, kitapta öncelikle dosya yönetimine iliskin tekniklere yer verilmekte ve ilgili kisimlarda da küçük örnekler sunulmaktadir. Bu arada, bilgisayar mühendisligi bölümü ögrencilerinin, kütüphane ve özellikle de Internet ortaminda sürekli literatür izleme olanaklari bulundugundan, kitaptaki konularla, ögrencilerin literatürde izledikleri kaynaklar arasinda iliski kurabilmelerini saglayabilmek bakimindan, bazi kavramlarin evrensel terminolojideki karsiliklari da yazilmistir. Kitabin ögrencilere yararli olmasini dilerim. Doç.Dr. Ata ÖNAL IÇINDEKILER BÖLÜM 1............................................................................................................................................ 1 1 Dosya Yönetimi............................................................................................................................ 1 BÖLÜM 2............................................................................................................................................ 3 2 Siradan Erisimli Dosyalar ............................................................................................................ 3 2.1 Günleme Islemi .................................................................................................................... 3 2.2 Ekleme Islemi....................................................................................................................... 5 2.3 Silme Islemi.......................................................................................................................... 6 2.4 Sirali Dosya Islemleri Ödev-1.............................................................................................. 8 2.5 Yazilim Tasarimi.................................................................................................................. 9 2.6 Sirali Dosya Kullanici Dökümantasyon Örnegi.................................................................10 2.7 Pascal Program Örnegi.......................................................................................................21 2.7.1 Pascal Program Örnegi Dosyalari ..............................................................................25 2.8 Diger Örnek Programlar .....................................................................................................26 2.8.1 Örnek QBasic Programlari .........................................................................................26 2.8.2 Örne k Pascal Programlari...........................................................................................28 BÖLÜM 3..........................................................................................................................................31 3 Dogrudan Erisimli Dosyalar.......................................................................................................31 3.1 Anahtar-adres dönüsüm algoritmalari................................................................................31 3.1.1 Bölme Yöntemi (Dividing yöntemi) ..........................................................................31 3.1.2 Mid-Square yöntemi...................................................................................................31 3.1.3 Radix Conversion yöntemi.........................................................................................31 3.1.4 Shifting yöntemi.........................................................................................................32 3.1.5 Folding yöntemi .........................................................................................................32 3.2 Anahtar-adres dönüsüm örnek programlari........................................................................32 3.3 Dogrudan Erisimli Dosya Modelleri ..................................................................................37 3.3.1 Sifirlama Modeli (Silme: Sifirlama, Ekleme: Tasmaya)............................................38 3.3.2 Sifirlama Modeli (Silme: Sifirlama, Ekleme: Son sifira yoksa tasmaya)..................40 3.3.3 Sifirlama Modeli (Silme: Sifirlama, Ekleme: Ilk sifira yoksa tasmaya)....................41 3.3.4 Bag Degistirme Modeli (Silme: Bag Degistirme, Ekleme: Tasmaya).......................41 3.3.5 Bag Degistirme Modeli (Silme: Bag Degistirme, Ekleme: Son silinene (pasife) yoksa tasmaya) 44 3.3.6 Bag Degistirme Modeli (Silme: Bag Degistirme, Ekleme: Ilk silinene (pasife), yoksa tasmaya) 47 3.3.7 Bag Degistirme Modeli (Silme: Bag Degistirme, Ekleme: Son sifira, yoksa son silinene (pasife), yoksa tasmaya) ...............................................................................................47 3.3.8 Bag Degistirme Modeli (Silme: Bag Degistirme, Ekleme: Ilk sifira, yoksa ilk silinene (pasife), yoksa tasmaya) ...............................................................................................48 3.3.9 Sifirlama Modeli (Satir Eleman Kapasitesi 2) (Silme: Sifirlama, Ekleme: Tasmaya) 48 3.3.10 Sifirlama Modeli (Satir Eleman Kapasitesi 2) (Silme: Sifirlama, Ekleme: Son sifira yoksa tasmaya) ...........................................................................................................................48 3.3.11 Sifirlama Modeli (Satir Eleman Kapasitesi 2) (Silme: Sifirlama, Ekleme: Ilk sifira yoksa tasmaya) ...........................................................................................................................49 3.3.12 Bag Degistirme Modeli (Satir Eleman Kapasitesi 2) (Silme: Bag Degistirme, Ekleme: Tasmaya) ......................................................................................................................49 3.3.13 Bag Degistirme Modeli (Satir Eleman Kapasitesi 2) (Silme: Bag Degistirme, Ekleme: Son sifira, yoksa tasmaya) ...........................................................................................50 II Veri ve Dosya Isleme 3.3.14 Bag Degistirme Modeli (Satir Eleman Kapasitesi 2) (Silme: Bag Degistirme, Ekleme: Ilk sifira, yoksa tasmaya)..............................................................................................50 3.3.15 Bag Degistirme Modeli (Satir Eleman Kapasitesi 2) (Silme: Bag Degistirme, Ekleme: Son sifira, yoksa son silinene (pasife), yoksa tasmaya) ...............................................51 3.3.16 Bag Degistirme Modeli (Satir Eleman Kapasitesi 2) (Silme: Bag Degistirme, Ekleme: Ilk sifira, yoksa ilk silinene (pasife), yoksa tasmaya) ..................................................51 3.4 Dogrudan Erisimli Dosya algoritmasi (Silme: Sifirlama, Ekleme: Tasmaya) ...................52 3.5 Dogrudan Erisimli Dosya Pascal Programi (Silme: Sifirlama, Ekleme: Tasmaya) ..........53 3.5.1 Dogrudan Erisimli Dosya Pascal Programinin kullandigi dosyalar (Silme: Sifirlama, Ekleme: Tasmaya) ......................................................................................................................58 3.6 Dogrudan Dosya Program Örnekleri..................................................................................59 3.6.1 QBasic Program Örnekleri .........................................................................................59 3.7 Turbo Pascal Program Örnekleri ........................................................................................60 3.7.1 Turbo Pascal Yazma Örnegi:......................................................................................60 3.7.2 Turbo Pascal Günleme Örnegi: ..................................................................................62 3.8 Anahtar alfabetik ise;..........................................................................................................63 BÖLÜM 4...........................................................................................................................................67 4 Indeks Sirali Dosyalar .................................................................................................................67 4.1 Indeks Sirali Erisim Yöntemi .............................................................................................67 4.1.1 ISAM (Prime Area'ya Ekleme Algoritmasi) ...............................................................69 4.1.2 ISAM ilk yükleme Pascal programi ...........................................................................71 4.2 Scope Monitor ....................................................................................................................73 4.2.1 Scope Monitör Pascal Programi (Örnek-1): ...............................................................77 4.2.2 Scope Monitor Pascal Programi (Örnek-2): ...............................................................86 BÖLÜM 5...........................................................................................................................................93 5 Görüntü Bellek Erisimli Dosyalar..............................................................................................93 5.1 Data Bloklar ........................................................................................................................93 5.2 Data Blok Satir Doluluk Orani ...........................................................................................93 5.3 Data Blok Sütün Doluluk Orani .........................................................................................93 5.4 Data Blok Satir ve Sütün Doluluk Orani ............................................................................93 5.5 Data Bloka Ilk Yükleme Islemi..........................................................................................94 5.6 Data Blok Indeksi ...............................................................................................................94 5.7 Data Blok Indekslerin Indeksi ............................................................................................95 5.7.1 Data Blok Ekleme Islemleri........................................................................................96 5.7.2 Satir Bölme Islemi......................................................................................................96 5.8 Vsam ilk yükleme Pascal programi...................................................................................99 BÖLÜM 6.........................................................................................................................................103 6 Çoklu Anahtarli Erisimli Dosyalar ...........................................................................................103 6.1 Çoklu Liste (Uzunluklu) ...................................................................................................103 6.2 Degistirilmis Liste (Uzunluklu)........................................................................................104 KAYNAKLAR .................................................................................................................................109 Ata Önal BÖLÜM 1 1 Dosya Yönetimi Bilgisayarlar, çok hizli islem yapilabilme, veri isleme ve veri depolama özellikleri nedeniyle, günümüzün en teknolojik araçlarindan birisi sayilmaktadir. Verilerin bilgisayarlarda saklanma ortamlarindan birisi de dosyalardir. Dosyalardaki verilere erisebilmek için çesitli erisim yöntemleri bulunmaktadir. Bu bölümde, gelisim süreçlerine göre kisaca bu yöntemler tanitilacaktir. 2. bölümde siradan erisimli dosyalar için gelistirilen, siradan erisimli dosya mantigi, algoritmasi ve programi verilecektir. 3.bölümde dosyadaki verilere dogrudan erisim olanagi veren dogrudan dosya yapisi yöntemleri ele alinacak ve bu konunun önemli bir bölümü olan anahtar – adres dönüs algoritmalari incelenecektir. 4.bölümde indeks sirali erisim yöntemleri olan ISAM ve SCOPE MONITOR konulari incelenecek, ilk yükleme algoritmalari ve program örnekleri verilecektir. 5.bölümde VSAM dosya yapisi ele alinacak, satir ve blok bölme islemleri incelenecek, ilk yükleme algoritmasi ve programi verilecektir. Son bölüm olan 6.bölümde ise dosyalardaki verilere ikinci anahtarla erisim yöntemleri olan çoklu liste ve degistirilmis liste konulari üzerinde durulacaktir. 2 Veri ve Dosya Isleme Ata Önal BÖLÜM 2 2 Siradan Erisimli Dosyalar Siradan erisimli dosyalar, en basit dosya tipi olarak kabul edilmektedir. Siradan erisimli dosyalarda kayitlar belirli bir anahtara göre küçükten büyüge sirali ve tektir. Bu anahtarlara birinci anahtar adi verilir ve birinci anahtarlar günlenemez. Siradan erisimli dosyalarda kayitlar sirayla okunur. Herhangi bir kayda erisebilmek için o kayda gelinceye kadar olan tüm kayitlarin okunmasi gerekir. 50 kaydi olan bir sirali dosyada, birinci kayda erismek için 1 kez , 24'üncü kayda erismek için 24 kez, 50'nci kayda erismek için 50 kez okuma islemi yapilir (Tablo 2-1). Tablo 2-1 Siradan Erisimli Dosya Okuma Mantigi Sirano 1 . . . 24 . . . 50 1.Anahtar 1 500 1500 Siradan erisimli dosyalarda bir kayit, birinci anahtar degerine göre kayit aranmalidir. Önce birinci kayit okunur. Aranan kaydin anahtari, okunan kaydin anahtarindan küçük oldugu sürece sirali dosyadan yeni bir kayit okunur. Aranan kaydin anahtari, okunan kaydin anahtarina esit ise aranan kayit bulunmus olur. Aranan kaydin anahtari okunan kaydin anahtarindan büyükse, aranan kayit sirali dosyada yok demektir ve okuma islemine son verilir. Siradan erisimli Dosyalarda kayit arama (okuma) islemi disinda; günleme, ekleme ve silme islemleri de yapilabilir. Tablo 2-2'de Siradan Erisimli Dosya Islemlerini içeren Kod, Islem Adi ve Açiklama bilgileri bulunmaktadir. Tablo 2-2 Siradan Erisimli Dosya Islem Tablosu Kod 1 2 3 Islem Adi Günleme Ekleme Silme Açiklama Olmayan kayit günlenemez. Olan kayit eklenemez. Olmayan kayit silinemez. Tablo 2-2'deki islemleri sirasiyla inceleyelim. 2.1 Günleme Islemi Günleme isleminin gerçeklesebilmesi için günlenecek kaydin sira dan erisimli dosyada olmasi gereklidir. Olmayan kayit günlenemez. Tablo 2-3'de Islem ve Master Dosya kayitlari verilmistir. Her iki Dosyada birinci anahtar No olarak verilmistir. Islem dosyasindaki kayitlarin tümünde Kod=1 oldugundan yapilacak islemler günleme islemidir. Siradan Erisimli Dosya islemlerine Islem ve Master Dosyalarinden birer kayit okunarak baslanir. 4 Veri ve Dosya Isleme Tablo 2-3 Siradan Erisimli Dosyada Günleme Islemi Islem IslNo Master Kod,No,Not No,Not 1, 10, 75 12, 53 1, 12, 77 15, 85 1, 24, 79 EOF EOF Sonuç Hata IslNo,No,Not IslNo,Kod,No,Not Tablo 2-3'deki Siradan Erisimli Dosya islemleri adim adim incelenecek olursa; Islem Dosyasindan 1,10,75 bilgileri olan birinci kayit ile Master dosyasindan 12,53 bilgilerini içeren birinci kayit okunarak 1 numarali islem baslatilir (Tablo 2-4). Tablo 2-4 Siradan Erisimli Dosyada 1 Numarali Günleme Islemi Islem Kod,No,Not 1, 10, 75 1, 12, 77 1, 24, 79 EOF IslNo 1 Master No,Not 12, 53 15, 85 EOF Sonuç Hata IslNo,No,Not IslNo,Kod,No,Not 1,1,10,75 10 küçük 12 oldugundan, 10 numarali islem kaydi master dosyasinda yok demektir. Master dosyasinda olmayan bir kayit günlenemeyeceginden islem dosyasindaki kayit hata dosyasina yazilir ve islem dosyasindan 12 numarali kayit okunarak 2 nolu isleme devam edilir (Tablo 2-5). Tablo 2-5 Siradan Erisimli Dosyada 2 numarali Günleme Is lemi Islem Kod,No,Not 1, 10, 75 1, 12, 77 1, 24, 79 EOF IslNo 1,2 2 Master No,Not 12, 53 15, 85 EOF Sonuç Hata IslNo,No,Not IslNo,Kod,No,Not 2,12,77 1,1,10,75 Islem dosyasindan okunan 12 numarali kayit ile master dosyasindan 1 numarali islem ile okutulmus olan fakat islemi tamamlanmamis olan 12 numarali kayit 2 numara ile isleme girerler. Iki anahtar birbirine esittir. Anahtarlar esit oldugundan günleme islemi yapilabilir. Islem dosyasindaki not bilgisi 77, master dosyasindaki not bilgisi 53 ile günlenir ve sonuç dosyasina 77 olarak yazilir. Islem dosyasindan 24 numarali kayit, master dosyasindan 15 numarali kayit 3. Islem olarak okunur (Tablo 2-6). Tablo 2-6 Siradan Erisimli Dosyada 3 numarali Günleme Islemi Islem Kod,No,Not 1, 10, 75 1, 12, 77 1, 24, 79 EOF IslNo 1,2 2,3 3 Master No,Not 12, 53 15, 85 EOF Sonuç Hata IslNo,No,Not IslNo,Kod,No,Not 2,12,77 1,1,10,75 3,15,85 Islem dosyasindan okunan 24 numarali kayit, master dosyasindan okunan 15 numarali kayittan büyüktür. 24 numarali islem kaydi, master dosyasindaki sonraki kayitlar içinde olabilir düsüncesiyle master dosyasindaki kayit yeni master Dosya kaydi olarak sonuç dosyasina yazilir. Master Dosyasindan yeni bir kayit okunarak 4. isleme devam edilir (Tablo 2-7). Ata Önal Veri ve Dosya Isleme 5 Tablo 2-7 Siradan Erisimli Dosyada 4 numarali Günleme Islemi Islem Kod,No,Not 1, 10, 75 1, 12, 77 1, 24, 79 EOF IslNo 1,2 2,3 3,4 5 Master No,Not 12, 53 15, 85 EOF Sonuç IslNo,No,Not 2,12,77 3,15,85 Hata IslNo,Kod,No,Not 1,1,10,75 4,1,24,79 Master dosyasi EOF oldugu için Islem Dosyasindan daha önce okunan 24 numarali kayit yalniz olarak isleme alinir. Günleme islemi olmasi nedeniyle ve olmayan kayit günlenemeyecegi için Hata dosyasina 4 numarali islem olarak yazilir. Islem Dosyasindan yeni bir kayit okunarak 5. isleme devam edilir. Islem Dosyasi EOF oldugu için islem sona erer. 2.2 Ekleme Islemi Ekleme isleminin gerçeklesebilmesi için eklenecek kaydin master dosyasinda olmamasi gereklidir. Tablo 2-8 Siradan Erisimli Dosyada Ekleme Islemi Islem IslNo Master Sonuç Hata Kod,No,Not No,Not IslNo,No,Not IslNo,Kod,No,Not 2, 10, 75 12, 53 2, 12, 77 15, 85 2, 24, 79 EOF EOF Tablo 2-8'deki Islem ve Master Dosyalarindeki kayitlarin islemi adim adim incelenirse; 10 anahtarli islem kaydi ile 12 anahtarli master kaydi 1 islem numarasi ile ekleme islemine girer (Tablo 2-9). Tablo 2-9 Siradan Erisimli Dosyada 1 numarali Ekleme Islemi Islem IslNo Master Kod,No,Not No,Not 2, 10, 75 1 12, 53 2, 12, 77 15, 85 2, 24, 79 EOF EOF Sonuç Hata IslNo,No,Not IslNo,Kod,No,Not 1,2,10,75 10 küçük 12 oldugundan, 10 numarali islem kaydi master dosyasinda yok demektir. Ekleme islemi yapilabilir. Eklenecek islem kaydi sonuç dosyasina yazilir ve islem dosyasindan 12 numarali kayit okunarak 2. isleme devam edilir (Tablo 2-10). Tablo 2-10 Siradan Erisimli Dosyada 2 numarali Ekleme Islemi Islem IslNo Master Kod,No,Not No,Not 2, 10, 75 1,2 12, 53 2, 12, 77 2 15, 85 2, 24, 79 EOF EOF Sonuç Hata IslNo,No,Not IslNo,Kod,No,Not 1,10,75 2,2,12,77 2,12,53 Islem dosyasindan okunan 12 numarali kayit ile master dosyasindaki 12 numarali kayit esittir. Kayitlar esit oldugundan ekleme islemi yapilamaz. Islem dosyasindaki kayit Hata Dosyasina, Master Dosyasindaki kayit Sonuç Dosyasina yazilir. Islem dosyasindan 24 numarali kayit, master Ata Önal 6 Veri ve Dosya Isleme dosyasindan 15 numarali kayit 3. islem olarak okunur (Tablo 2-11). Tablo 2-11 Siradan Erisimli Dosyada 3 numarali Ekleme Islemi Islem Kod,No,Not 2, 10, 75 2, 12, 77 2, 24, 79 EOF IslNo 1,2 2,3 3 Mas ter No,Not 12, 53 15, 85 EOF Sonuç Hata IslNo,No,Not IslNo,Kod,No,Not 1,10,75 2,2,12,77 2,12,53 3,15,85 Islem dosyasindan okunan 24 numarali kayit master dosyasindan okunan 15 numarali kayittan büyüktür. 24 numarali kayit master dosyasindaki sonraki kayitlar içinde olabilir düsüncesiyle master dosyasindaki kayit yeni master kaydi olarak sonuç dosyasina yazilir. Master Dosyasindan yeni bir kayit okunarak isleme devam edilir (Tablo 2-12). Tablo 2-12 Siradan Erisimli Dosyada 4 numarali Ekleme Islemi Islem Kod,No,Not 2, 10, 75 2, 12, 77 2, 24, 79 EOF IslNo 1,2 2,3 3,4 Master No,Not 12, 53 15, 85 EOF Sonuç Hata IslNo,No,Not IslNo,Kod,No,Not 1,10,75 2,2,12,77 2,12,53 3,15,85 4,2,24,79 Master Dosyasi EOF oldugundan Islem Dosyasindan daha önce okunan 24 anahtar numarali kayit isleme alinir. Ekleme islemi oldugundan Sonuç dosyasina 4 numarali islem olarak yazilir. Islem Dosyasindan yeni bir kayit okunarak isleme devam edilir. Islem Dosyasi EOF oldugundan islem sona erer. 2.3 Silme Islemi Silme isleminin gerçeklesebilmesi için silinecek kaydin master dosyasinda olmasi gereklidir. Olmayan kayit silinemez. Tablo 2-13 Siradan Erisimli Dosyada Silme Islemi Islem Kod,No,Not 3, 10, 75 3, 12, 77 3, 24, 79 EOF IslNo Master No,Not 12, 53 15, 85 EOF Sonuç Hata IslNo,No,Not IslNo,Kod,No,Not Tablo 2-13’de, 3 kodu ile temsil edilen silme isleminin 1 nolu islemi, Islem ve Master Dosyalarindan ilk kayitlar okunarak baslanir (Tablo 2-14). Tablo 2-14 Siradan Erisimli Dosyada 1 numarali Silme Islemi Islem Kod,No,Not 3, 10, 75 3, 12, 77 3, 24, 79 EOF IslNo 1 Master No,Not 12, 53 15, 85 EOF Sonuç Hata IslNo,No,Not IslNo,Kod,No,Not 1,3,10,75 10 küçük 12 oldugundan, 10 numarali islem kaydi master dosyasinda yok demektir. Olmayan Ata Önal Veri ve Dosya Isleme 7 kayit silinemeyecegi için silinecek islem kaydi hata dosyasina yazilir ve islem dosyasindan yeni bir kayit okunur ve islem dosyasindan 12 numarali kayit okunarak 2. isleme devam edilir (Tablo 2-15). Tablo 2-15 Siradan Erisimli Dosyada 2 numarali Silme Islemi Islem Kod,No,Not 3, 10, 75 3, 12, 77 3, 24, 79 EOF IslNo 1,2 2 Master No,Not 12, 53 15, 85 EOF Sonuç Hata IslNo,No,Not IslNo,Kod,No,Not 1,3,10,75 Islem dosyasindan okunan 12 numarali kayit ile master dosyasindan daha önce okunan 12 numarali kayit esittir. Kayitlar esit oldugundan silme islemi yapilabilir. Silme islemi Islem Dosyasindan ve Master dosyasindan yeni kayitlar okunarak gerçeklestirilir (Tablo 2-16). Tablo 2-16 Siradan Erisimli Dosyada 3 numarali Silme Islemi Islem Kod,No,Not 3, 10, 75 3, 12, 77 3, 24, 79 EOF IslNo 1,2 2,3 3 Master No,Not 12, 53 15, 85 EOF Sonuç Hata IslNo,No,Not IslNo,Kod,No,Not 3,15,85 1,3,10,75 Islem dosyasindan 24 numarali kayit, master dosyasindan 15 numarali kayit 3. islem olarak okunur. Islem dosyasindan okunan 24 numarali kayit master dosyasindan okunan 15 numarali kayittan büyüktür. Islem dosyasindan okunan 24 numarali kayit master dos yasindaki sonraki kayitlar içinde olabilir düsüncesiyle master dosyasindaki kayit yeni master kaydi olarak sonuç dosyasina yazilir. Master Dosyasindan yeni bir kayit okunarak 4. isleme devam edilir (Tablo 2-17). Tablo 2-17 Siradan Erisimli Dosyada 4 numarali Silme Islemi Islem Kod,No,Not 3, 10, 75 3, 12, 77 3, 24, 79 EOF IslNo 1,2 2,3 3,4 Master No,Not 12, 53 15, 85 EOF Sonuç Hata IslNo,No,Not IslNo,Kod,No,Not 3,15,85 1,3,10,75 4,3,24,79 Master Dosya EOF oldugu için, 4 numarali isleme Islem Dosyasindan daha önce okunmus olan 24 anahtar numarali kayit ile devam edilir. Silme islemi yapilacagindan ve olmayan kayit silinemeyeceginden 24 anahtar numarali kayit Hata Dosyasina yazilir. Islem Dosyasindan yeni bir kayit okunarak isleme devam edilir. Islem Dosyasin EOF oldugu için islem sona erer. Ata Önal 8 Veri ve Dosya Isleme 2.4 Sirali Dosya Islemleri Ödev-1 Tablo 2-18’deki ISLEM (Kod,No,Not) ve MASTER (No,Not) dosyalarina, siradan erisimli Dosya islemi uygulandiktan sonra, SO NUÇ (IslNo,No,Not) ve HATA (IslNo,Kod,No,Not) dosyalari olusmustur. IslNo sütununda eksik olanlari tamamlayiniz. Tablo 2-18 IslNo sütunundaki eksikleri tamamla Islem Kod,No,Not 1, 15, 75 2, 25, 77 3, 35, 79 1, 45, 81 2, 55, 83 3, 65, 85 1, 75, 86 2, 85, 93 3, 95, 90 EOF Ata Önal IslNo 1,2 2, Master No,No t 12, 53 15, 85 22, 57 25, 64 30, 42 35, 47 55, 46 70, 63 85, 60 90, 94 EOF Sonuç IslNo,No,Not 1,12,53 2,15,75 3,22,57 4,25,64 5,30,42 8,55,46 10,70,63 12,85,60 13,90,94 Hata IslNo,Kod,No,Not 4,2,25,77 7,1,45,81 8,2,55,83 9,3,65,85 11,1,75,86 12,2,85,93 14,3,95,90 Veri ve Dosya Isleme 2.5 Yazilim Tasarimi Oku ( islem ) ( kod,ino,inot ) Oku ( master ) ( mno,mnot ) Kod=1 Ino<Mno Ino=Mno Ino>Mno Yaz(Hata)(Kod,Ino,Inot) Oku(Islem)(Kod,Ino,Inot) Yaz(Sonuç)(Ino,Inot) Oku(Islem)(Kod,Ino,Inot) Oku(Master)(Mno,Mnot) Yaz(Sonuç)(Ino,Inot) Oku(Master)(Mno,Mnot) Kod=2 Ino<Mno Ino=Mno Ino>Mno Yaz(Sonuç)(Ino,Inot) Oku(Islem)(Kod,I no,Inot) Yaz(Sonuç)(Mno,Mnot) Yaz(Hata)(Kod,Ino,Inot) Oku(Islem)(Kod,Ino,Inot) Oku(Master)(Mno,Mnot) Yaz(Sonuç)(Mno,Mnot) Oku(Master)(Mno,Mnot) Kod=3 Ino<Mno Ino=Mno Ino>Mno Master EOF ise Kod=1 Kod=2 Kod=3 Islem EOF ise Master EOF olana kadar Islem ve Master EOF ise Yaz(Hata)(Kod,Ino,Inot) Oku(Islem)(Kod,I no,Inot) Oku(Islem)(Kod,Ino,Inot) Oku(Master)(Mno,Mnot) Yaz(Sonuç)(Mno,Mnot) Oku(Master)(Mno,Mnot) Yaz(Hata)(Kod,Ino,Inot) Oku(Islem)(Kod,Ino,Inot) Yaz(Sonuç)(Ino,Inot) Oku(Islem)(Kod,Ino,Inot) Yaz(Hata)(Kod,Ino,Inot) Oku(Islem)(Kod,Ino,Inot) Oku ( Master ) ( Mno, Mnot ) Yaz ( Sonuç ) ( Mno, Mnot ) ( Program isletimi sona erer.) Ata Önal 9 10 Veri ve Dosya Isleme 2.6 Sirali Dosya Kullanici Dökümantasyon Örnegi T.C. EGE ÜNIVERSITESI MÜHENDISLIK FAKÜLTESI BILGISAYAR MÜHENDISLIGI BÖLÜMÜ DOSYA YÖNETIMI ÖDEV 1 SIRADAN ERISIMLI DOSYALAR (PASCAL 7.0) HAZIRLAYAN Ögrenci Numarasi AD SOYAD SUNULAN Ünvan Ad Soyad Ögretim Üyesinin Bilgisi KASIM 2002 05.11.2002 BORNOVA / IZMIR Ata Önal Veri ve Dosya Isleme 11 1. DENEY Disk veya disket ortaminda sayisal veya alfa sayisal veri gruplarinin derlenmesi için olusturulan yerler, dosya diye ifade edilirler. Dosyalar birkaç parçadan olusur. Bunlardan en önemlileri kayit ve alandir. Birbiri ile baglantili olan bilgi topluluguna kayit denir. Bir kayit pek çok parametreden olusabilir. Bunlardan birini 1. anahtar olarak seçebiliriz. Bu parçalardan bir digeri ise alandir. Bir bilginin bellekte kapladigi yere ise alan denir En basit dosya tipi ‘Sirali Dosyalar’ dir. Herhangi bir dosyada bir bilgi veya bilgiler toplulugunu bulmak için diger bilgilerle karsilastirma yapiliyorsa buna ‘Siradan Erisimli Dosya Yapisi’ denir. ?? Siradan erisimli dosyalar için yapilacak islemler sunlardir: ISLEM KODU ISLEM ADI AÇIKLAMA (YORUM) 1 GÜNCELLEME Kayit varsa Güncelleme yapilabilir. Kayit yoksa Hata ortaya çikar . 2 EKLEME Kayit yoksa Eklenir. Kayit varsa Hata ortaya çikar. 3 SILME Kayit varsa Silinebilir. Kayit yoksa Hata ortaya çikar. 1.1. Hangi dosya siradan erisimli kabul edilecek? a) Birinci anahtar tek olmali. Bir tane olmali. b) Birinci anahtar küçükten büyüge sirali olmali. 1 2 3 4 5 6 1.Anahtar 3 5 25 80 500 15000 Ata Önal 12 Veri ve Dosya Isleme 1.2. Sirali dosyadaki kayitlara erisim nasil olur? SiraNo 1 2 3 4 5 . . . 2500 . . . 70000 1.3. 1. Anahtar 20 500 12000 28000 100000 ?? 1. Anahtar 20 olan kayit için 1 kez oku islemi uygulanmali. Oku 20 mi? ?? 1. Anahtar 100.000 olan kayit için 5 kez oku islemi uygulanir. Oku 100000 mi? ?? 1. Anahtar 750.000 olan kayit için 70000 kez oku islemi uygulanir. Oku 750000 mi? 250000 750000 Sirali Erisimli Dosyalarin Avantajlari – Dezavantajlari Avantaj Çoklu islemlere uygundur. Örnek:Bodro Dezavantaj Seyrek, rasgele islemlere uygun degildir. Sorgulama islemlerine uygun degildir. Örnek:Ögrenci Transkript’i 2. KULLANICI DÖKÜMANTASYONU Sirali dosya algoritmasini programla dili olarak PASCAL 7.0 da DYxxxx01.PAS ad iyla hazirladim. Programi çalistirmadan önce PASCAL da (veya DOS EDIT editöründe de olabilir) ISLEM ve MASTER dosyalarini derste verilen örnek rakam ve kodlari kullanarak olusturdum. DYxxxx01.PAS (Turbo Pascal 6.0 ile olusturulmus ve programin kaynak kodlarinin bulundugu dosya) DYxxxxO1.ISL (Dos’un Edit (Pascal editörü de olabilir) editöründe kullanici tarafindan olusturulacak Islem dosyasi) DYxxxxO1.MAS ((Dos’un Edit (Pascal editörü de olabilir) editöründe kullanici tarafindan olusturulacak Master dosyasi) DYxxxxO1.HAT (Program tarafindan olusturulacak Hata dosyasi) DYxxxxO1.SON (Program tarafindan olusturulacak Sonuç dosyasi) Bu program Turbo Pascal 7.0 editöründe DYxxxxO1.PAS dosyasinin açilmasi ve ardindan Ctrl+F9 tus kombinasyonu ile veya run menüsünden çalistirilabilir. ***Sonuç olarak DYxxxxO1.SON ve DYxxxxO1.MAS Dosyalari elde edilir.*** Ata Önal Veri ve Dosya Isleme 13 3. VERI GIRIS ORTAMI Veri girisi DYxxxxO1.ISL (KOD INO INOT) ve DYxxxxO1.MAS (MNO MNOT) dosyalarindan yapilmalidir. Bu dosyalar DOS’ta Edit (C:\Edit yazip Enter tusuna basarak ulasa bilirsiniz.) editöründe, windows Notepad(yani basit text ortamlarinda) veya pascal editöründe veriler arasinda bosluk birakmak sarti ile dosya uzantilarinida belirterek Enter tusuna basilip kaydedilmelidir . ***Yani master ve islem dosyalari belirtdigimiz ortamlarda kullanici tarafindan girilmelidir.*** Dosya içerikleri asagidaki gibidir. ISLEM KOD INO INOT 1 1 1 2 2 2 3 3 3 10 15 20 22 25 30 32 35 40 EOF 50 60 70 80 90 100 52 62 72 1.1.1.3.1 MASTER MNO MNO T 15 55 18 65 25 75 28 85 35 95 38 57 *** kod 1 =Güncelleme / kod 2 = Ekle / kod 3 = Sil *** 4. VERI ÇIKIS ORTAMI Bu program çalistirildiktan sonra, program tarafindan DYxxxx O1.SON (MNO MNOT) ve DYxxxxO1.HAT (KOD INO INOT) dosyalari olusturulur. DOS’un Edit editöründen veya her hangi bir text editöründen bu dosyalari açip inceleye bilirsiniz. Ayrica program tarafindan, program sonunda Bu dosyalarin bir görüntüsü ekranda görüntülenmektedir. Dosya içerikleri Asagida belirtildigi gibidir. SONUÇ INO INOT 15 60 18 65 22 80 25 75 28 85 30 100 38 57 1.1.1.3 HATA KOD INO 1 1 2 10 20 25 *** kod 1 =Güncelleme / kod 2 = Ekle / INO T 50 70 90 kod 3 = Sil *** 5. KISITLAMALAR Ata Önal 14 Veri ve Dosya Isleme DY xxxxO1.MAS (Master Dosyasi) ve DYxxxxO1.ISL (islem Dosyasi) olusturulurken asagidaki kurallara uyulmalidir: ?? Master ve islem dosyalari olusturulmadan program çalistirilirsa programda (‘File Not Found gibi bir hata görülür’ ve program çalismaz) ?? Her iki dosyada kayit girerken, Ka yitlar sirali olmalidir. ?? Kodlar 1, 2 ve 3 (1- Günleme, 2- Ekleme, 3-Silme) olmalidir. Baska bir kod girilirse sonuç hatali olabilir. ?? Her dosyadan bir tane kayit bulunmalidir. ?? Veriler arasinda bosluk birakilmalidir. ?? Son veri girildikten sonra Enter tusuna b asilip kaydedilmelidir bos satir birakilirsa eger program bunuda bir veri olarak alir ve sonucumuz hatali olur. ?? Yazdiginiz Master ve islem dosyalarini çalistirdiginiz turbonun dizinine atmalisiniz(ör: c:\tp\bin\ master.dat ) 6. YAZILIM TASARIM ÖZELLIKLERI Bu programda; 1. alt sirasiz degiskenler 2. While Do döngüsü 3. Sirali Dosya yapisi 4. If sarti kullanmaktadir. Kisaca Sistem Akis Semasi; ISLEM.DAT SONUC.DAT MASTER.DAT EKRAN 7. YAZILIM ALGORITMASI B: C: A: islem oku (kod, ino, inot) master oku (mno, mnot) Kod = 1 ise ino < imno ise hata yaz (kod,ino,inot) islem oku (kod,ino,inot) Goto A ino = mno ise sonuc yaz (ino,inot) Goto B ino > mno ise sonuc yaz (mno,mnot) Goto C Kod = 2 ise Ata Önal HATA.DAT Veri ve Dosya Isleme ino < mno sonuc yaz islem oku Goto A ino = mno ise hata yaz (kod,ino,inot sonuc yaz (mno,mnot) Goto C ino > mno ise sonuc yaz (mno,mnot) Goto C islem EOF ise master EOF oluncaya kadar sonuc yaz (master oku, sonuc yaz) master EOF ise islem EOF oluncaya kadar Kod = 1 veya Kod=3 ise hata yaz Kod = 2 ise sonuc yaz 8. VERI YAPILARI Bu programda basit veri tipleri kullanilmistir. 9. PROGRAMLAMA ZAMANI Tasarim : 4 Saat Kodlama : 8 Saat Test : 2 Saat Dökümantasyon : 4.5 Saat Toplam : 18.5 Saat 10. PROGRAMIN KAYNAK KODU { ogrno Ad Soyad EGE ÜNIVERSITESI MÜHENDISLIK FAKÜLTESI BILGISAYAR MÜHENDISLIGI BÖLÜMÜ VERI ve DOSYA ISLEME DERSI ÖDEV-1 SIRADAN ERISIMLI DOSYALAR 16.03.2004 BU PROGRAM MASTER VE ISLEM DOSYALARINI OKUR , SONUC VE HATA DOSYALARINI OLUSTURUR VE BUNLARI EKRANDA GÖSTERIR.} uses crt; var dosya,dosya1,dosya2,dosya3:text; kod,ino,inot,mno,mnot:integer; j,k,I,m,n:byte; Label A; begin clrscr; assign(dosya,'A:\dyxxxxO1.isl'); assign(dosya1,'A:\dyxxxxO1.hat'); Ata Önal 15 16 Veri ve Dosya Isleme assign(dosya2,'A:\dyxxxxO1.son'); assign(dosya3,'A:\dyxxxxO1.mas'); rewrite(dosya1); rewrite(dosya2); reset(dosya); append(dosya1); append(dosya2); reset(dosya3); readln(dosya,kod,ino,inot); readln(dosya3,mno,mnot); m:=0; n:=0; A: While (Not EOF(dosya)) And (Not EOF(dosya3)) do Begin if kod=1 then begin if ino<mno then begin writeln (dosya1,kod,' ',ino,' ',inot); readln(dosya,kod,ino,inot); Goto A; end; if ino>mno then begin writeln (dosya2,mno,' ',mnot); readln(dosya3,mno,mnot); end; if ino=mno then begin writeln (dosya2,ino,' ',inot); readln (dosya,kod,ino,inot); readln (dosya3,mno,mnot); Goto A; end; End; if kod=2 then begin if ino<mno then begin writeln (dosya2,ino,' ',inot); readln (dosya,kod,ino,inot); Goto A; end; if ino>mno then begin writeln (dosya2,mno,' ',mnot); readln (dosya3,mno,mnot); end; if ino=mno then begin writeln (dosya1,kod,' ',ino,' ',inot); writeln (dosya2,mno,' ',mnot); readln (dosya,kod,ino,inot); readln (dosya3,mno,mnot); Goto A; end; End; if kod=3 then begin if ino<mno then begin writeln (dosya1,kod,' ',ino,' ',inot); Ata Önal Veri ve Dosya Isleme readln (dosya,kod,ino,inot); Goto A; end; if ino>mno then begin writeln(dosya2,mno,' ',mnot); readln(dosya3,mno,mnot); end; if ino=mno then begin readln (dosya,kod,ino,inot); readln (dosya3,mno,mnot); Goto A; end; End; End; if (eof(dosya)) and (not eof(dosya3)) then begin if m=1 then begin writeln(dosya2,mno,' ',mnot); readln(dosya3,mno,mnot);Goto A; end; if ino<mno then begin if kod=2 then begin writeln (dosya2,ino,' ',inot); m:=1; end else begin writeln (dosya1,kod,' ',ino,' ',inot); m:=1; end; end; if ino>mno then begin writeln (dosya2,mno,' ',mnot); readln (dosya3,mno,mnot); end; if ino=mno then begin m:=0; if kod=3 then begin m:=1; readln(dosya3,mno,mnot); Goto A; end; if kod=2 then begin writeln(dosya1,kod,' ',ino,' ',inot);m:=1; writeln(dosya2,mno,' ',mnot); readln(dosya3,mno,mnot); Goto A; end; if kod=1 then begin writeln(dosya2,ino,' ',inot);m:=1; readln(dosya3,mno,mnot); Goto A; end; end; end; if (eof(dosya3)) and (not eof(dosya)) then begin if n=1 then begin if kod=2 then writeln(dosya2,ino,' ',inot); if kod<>2 then writeln(dosya1,kod,' ',ino,' ',inot); readln(dosya,kod,ino,inot);Goto A; end; if (kod=1) or (kod=3) then begin if ino>mno then begin writeln (dosya1,kod,' ',ino,' ',inot); writeln (dosya2,mno,' ',mnot);n:=1; readln (dosya,kod,ino,inot); Goto A; Ata Önal 17 18 Veri ve Dosya Isleme end; if ino<mno then begin writeln (dosya1,kod,' ',ino,' ',inot); readln (dosya,kod,ino,inot); Goto A; end; if ino=mno then begin if kod=1 then begin writeln (dosya2,ino,' ',inot); readln (dosya,kod,ino,inot); n:=1;Goto A; end; if kod=3 then begin readln (dosya,kod,ino,inot); n:=1;Goto A; end; End; End; if kod=2 then begin if ino=mno then begin writeln (dosya1,ino,' ',inot); writeln (dosya2,mno,' ',mnot);n:=1; readln (dosya,kod,ino,inot);Goto A; end; if ino>mno then begin writeln (dosya2,ino,' ',inot);n:=1; readln (dosya,kod,ino,inot);Goto A; end; if ino<mno then begin writeln (dosya2,ino,' ',inot); readln (dosya,kod,ino,inot);Goto A; end; End; End; if (eof(dosya)) and (eof(dosya3)) then begin if (m<>1) and (n<>1) then begin if kod=1 then begin if ino=mno then writeln (dosya2,ino,' ',inot); writeln (dosya1,kod,' ',ino,' ',inot); writeln(dosya2,mno,' ',mnot); End; if kod=2 then begin if ino=mno then begin writeln(dosya1,kod,' ',ino,' ',inot); writeln(dosya2,mno,' ',mnot); end; if ino<mno then begin writeln(dosya2,ino,' ',inot); writeln(dosya2,mno,' ',mnot); end; if ino>mno then begin writeln(dosya2,mno,' ',mnot); writeln(dosya2,ino,' ',inot); end; End; if kod=3 then begin if ino<>mno then begin Ata Önal Veri ve Dosya Isleme writeln (dosya1,kod,' ',ino,' ',inot); writeln(dosya2,mno,' ',mnot); end; End; End; if m=1 then writeln(dosya2,mno,' ',mnot); if n=1 then begin if (kod=1) or (kod=3) then writeln(dosya1,kod,' ',ino,' ',inot); if kod=2 then writeln(dosya2,ino,' ',inot); end; End; close(dosya1); close(dosya2); close(dosya); close(dosya3); assign(dosya,'A:\dyxxxxO1.isl'); assign(dosya1,'A:\dyxxxxO1.hat'); assign(dosya2,'A:\dyxxxxO1.son'); assign(dosya3,'A:\dyxxxxO1.mas'); reset(dosya); reset(dosya1); reset(dosya2); reset(dosya3); clrscr; I:=2; j:=1; Writeln(' I S L E M M A S T E R '); Writeln('KOD INO INOT MNO MNOT'); While Not EOF(dosya) Do Begin Readln(dosya,kod,ino,inot); If Not(Ino=0) Then Begin J:=J+1; Writeln('',Kod,' ',Ino,' ',Inot); End; End; While Not EOF(dosya3) Do Begin Readln(dosya3,mno,mnot); If Not(Mno=0) Then Begin I:=I+1; Gotoxy(22,I);Writeln(' ',Mno,' ',Mnot); End; End; I:=3; Gotoxy(40,1);Writeln(' S O N U € H A T A '); Gotoxy(40,2);Writeln(' MNO MNOT KOD INO INOT '); While Not EOF(dosya2) Do Begin Readln (dosya2,mno,mnot); Gotoxy(42,I);Writeln(' ',Mno,' ',Mnot); I:=I+1; End; J:=3; While Not EOF(dosya1) Do Begin Readln(dosya1,kod,ino,inot); Gotoxy(56,J);Writeln(' ',Kod,' ',Ino,' ',Inot); J:=J+1; End; k:=I+J-11; Ata Önal 19 20 Veri ve Dosya Isleme if k<0 then k:=5; While k<>0 do Begin Gotoxy(38,k);Writeln('º'); k:=k-1; End; Readln; Halt; End. 10. PROGRAMDA KULLANILAN DOSYALAR ISLEM KOD INO INOT 1 1 1 2 2 2 3 3 3 10 15 20 22 25 30 32 35 40 EOF 50 60 70 80 90 100 52 62 72 1.1.1.1.1 MASTER MNO MNO T 15 55 18 65 25 75 28 85 35 95 38 57 *** Yukaridaki dosyalardaki verilere göre program derlendiginde program tarafindan asagidaki dosyalar olusturulur. *** SONUÇ INO INOT 15 60 18 65 22 80 25 75 28 85 30 100 38 57 Ata Önal 1.1.1.1 HATA KOD INO 1 1 10 20 INO T 50 70 Veri ve Dosya Isleme 21 2.7 Pascal Program Örnegi Siradan Erisimli Dosyalar üzerinde gerçeklestirilen saglamak için tasarlanmis örnek Pascal programi. islemlerin daha iyi kavranmasini Uses Crt; Label A,B,C,D; Var Islem,M aster,Sonuc,Hata:Text; Kod,Inot,Mnot:Byte; Ino,Mno:Integer; Procedure Kontrol3; { Master ve islem dosyalari ayni anda biterse} Begin If EOF(Master) And EOF(Islem) Then Begin If Kod=1 Then Begin Writeln(Sonuc,Mno,' ',Inot); Readln(Islem,Kod,Ino,Inot); Readln(Master,Mno,Mnot); End; If Kod=2 Then Begin Writeln(Hata,Kod,' ',Ino,' ',Inot); Writeln(Sonuc,Mno,' ',Mnot); Readln(Islem,Kod,Ino,Inot); Readln(Master,Mno,Mnot); End; If Kod=3 Then Begin Readln(Islem,Kod,Ino,Inot); Readln(Master,Mno,Mnot); End; End; End; Procedure Kontrol2; { Islem dosyasi once biterse } Begin If (EOF(Islem)) And (Not EOF(Master)) Then Begin Writeln(Sonuc,Mno,' ',Mnot); Readln(Master,Mno,Mnot); While Not EOF(Master) Do Begin Writeln(Sonuc,Mno,' ',Mnot); Readln(Master,Mno,Mnot); End; End; Ata Önal 22 Veri ve Dosya Isleme End; Procedure Kontrol; { Master dosyasi once biterse } Begin If (EOF(Master)) And (Not EOF(Islem)) Then Begin If (Kod=1) Or (Kod=3) Then Begin Writeln(Hata,Kod,' ',Ino,' ',Inot); Readln(Islem,Kod,Ino,Inot); While Not EOF(Islem) Do Begin If Kod=2 Then Writeln(Sonuc,Ino,' ',Inot) Else Writeln(Hata,Kod,' ',Ino,' ',Inot); Readln(Islem,Kod,Ino,Inot); End; End; If Kod=2 Then Begin Writeln(Sonuc,Ino,' ',Inot); Readln(Islem,Kod,Ino,Inot); While Not EOF(Islem) Do Begin If (Kod=1) Or (Kod=3) Then Writeln(Hata,Kod,' ',Ino,' ',Inot) Else Writeln(Sonuc,Ino,' ',Inot); Readln(Islem,Kod,Ino,Inot); End; End; End; End; Begin Clrscr; Assign(Islem,'A:\DY6067O1.ISL'); Assign(Master,'A:\DY6067O1.MAS'); Assign(Sonuc,'A:\DY6067O1.SON'); Assign(Hata,'A:\DY6067O1.HAT'); Rewrite(Sonuc); Rewrite(Hata); Reset(Islem); Reset(Master); A:Readln(Islem,Kod,Ino,Inot);Kontrol3; C:Readln(Master,Mno,Mnot);Kontrol3;Kontrol2;Kontrol; B:If Kod=1 Then Begin If Ino=Mno Then Begin Writeln(Sonuc,Mno,' ',Inot);Kontrol3; Ata Önal Veri ve Dosya Isleme Goto A; End; If Ino<Mno Then Begin Writeln(Hata,Kod,' ',Ino,' ',Inot); D: Readln(Islem,Kod,Ino,Inot);Kontrol2;Kontrol; Goto B; End; If Ino>Mno Then Begin Writeln(Sonuc,Mno,' ',Mnot); Goto C; End; End; If Kod=2 Then Begin If Ino=Mno Then Begin Writeln(Sonuc,Mno,' ',Mnot); Writeln(Hata,Kod,' ',Ino,' ',Inot);Kontrol3; Goto A; End; If Ino<Mno Then Begin Writeln(Sonuc,Ino,' ',Inot); Goto D; End; If Ino>Mno Then Begin Writeln(Sonuc,Mno,' ',Mnot); Goto C; End; End; If Kod=3 Then Begin If Ino=Mno Then Begin Kontrol3; Goto A; End; If Ino<Mno Then Begin Writeln(Hata,Kod,' ',Ino,' ',Inot); Goto D; End; If Ino>Mno Then Begin Writeln(Sonuc,Mno,' ',Mnot); Goto C; End; Ata Önal 23 24 Veri ve Dosya Isleme End; Close(Master); Close(Islem); Close(Hata); Close(Sonuc); Assign(Islem,'A:\DY6067O1.ISL'); Assign(Master,'A:\DY6067O1.MAS'); Assign(Sonuc,'A:\DY6067O1.SON'); Assign(Hata,'A:\DY6067O1.HAT'); Reset(Sonuc); Reset(Hata); Reset(Islem); Reset(Master); Write('ISLEM':8);Writeln('MASTER':37); Write('Kod':4,'Ino':5,'Inot':6); Writeln('Mno':25,'Mnot':6); While Not (EOF(Islem) And EOF(Master)) Do Begin Readln(Islem,Kod,Ino,Inot); Readln(Master,Mno,Mnot); If EOF(Islem) Then Write('':4,'':5,'':6) Else Write(Kod:4,Ino:5,Inot:6); If EOF(Master) Then Writeln('':25,'':6) Else Writeln(Mno:25,Mnot:6); End; Writeln; Write('SONUC':8);Writeln('HATA':35); Write('Mno':4,'Mnot':6); Writeln('Kod':30,'Ino':4,'Inot':6); While Not (EOF(Sonuc) And EOF(Hata)) Do Begin Readln(HATA,Kod,Ino,Inot); Readln(SONUC,Mno,Mnot); If Mno>0 Then Write(Mno:4,Mnot:6) Else Write('':10); If Kod>0 Then Writeln(Kod:30,Ino:4,Inot:6) Else Writeln; End; Close(Master); Close(Islem); Close(Hata); Close(Sonuc); Ata Önal Veri ve Dosya Isleme Readln; End. 2.7.1 Pascal Program Örnegi Dosyalari 2.7.1.1 Giris Dosyalari ISLEM (DY6067O1.ISL) KOD INO INOT 1 10 55 1 15 65 1 25 75 2 30 85 2 35 95 2 45 57 3 50 67 3 55 77 3 65 87 MASTER (DY6067O1.MAS) MNO MNOT 10 50 20 60 30 70 40 80 50 90 60 100 2.7.1.2 Çikis Dosyalari SONUÇ (DY6067O1.SON) ISL-NO MNO MNOT 1 10 55 3 20 60 5 30 70 6 35 95 7 40 80 8 45 57 11 60 100 HATA (DY6067O1.HAT) ISL-NO KOD INO INOT 2 1 15 65 4 1 25 75 5 2 30 85 10 3 55 77 12 3 65 87 Ata Önal 25 26 Veri ve Dosya Isleme 2.8 Diger Örnek Programlar 2.8.1 Örnek QBasic Programlari 2.8.1.1 Ekran ? Dosya (For - Next) ornekqb1.bas CLS PRINT "ornekqb1.dat kutugunun olusturulmasi" PRINT "ekrandan 2 satir olarak girilen a,b degerleri" PRINT "ornekqb1.dat kutugune yazdirilir." PRINT " " ad$ = "ornekqb1.dat" OPEN ad$ FOR OUTPUT AS #1 FOR i = 1 TO 2 PRINT i; ". a ve b sayilarini (aralarina bos ya da virgul koyarak) giriniz. :": INPUT a, b PRINT i; ". a ve b saylari ornekqb1.dat kutugune yazildi." PRINT #1, a, b PRINT : PRINT NEXT i CLOSE PRINT "Ekrandan girilen sayilar ornekqb1.dat kutugune yazildi." 2.8.1.2 Dosya ? Dosya (For - Next) ornekqb2.bas CLS PRINT "ornekqb1.dat kutugunden a ve b degerlerini okur," PRINT "top = a+b islemi yapar," PRINT "a, b ve top degerlerini ornekqb2.dat kutugune yazar." PRINT " " ad1$ = "ORNEKQB1.DAT" ad2$ = "ORNEKQB2.DAT" OPEN ad1$ FOR INPUT AS #1 OPEN ad2$ FOR OUTPUT AS #2 FOR i = 1 TO 2 INPUT #1, a, b top = a + b PRINT #2, a, b, top NEXT i CLOSE #1 CLOSE #2 PRINT "ornekqb2.dat kutugu olusturuldu." END Ata Önal Veri ve Dosya Isleme 2.8.1.3 Dosya ? Dosya (Do While - Loop) ornekqb3.bas CLS PRINT "ornekqb2.dat kutugunden a, b ve top degerlerini okur," PRINT "top = a + b islemi yapar," PRINT "a, b ve top degerlerini ornekqb3.dat kutugune yazar." PRINT ad1$ = "ORNEKQB2.DAT" ad2$ = "ORNEKQB3.DAT" OPEN ad1$ FOR INPUT AS #1 OPEN ad2$ FOR OUTPUT AS #2 DO WHILE NOT EOF(1) INPUT #1, a, b, top top = a + b PRINT #2, a, b, top LOOP CLOSE #1 CLOSE #2 PRINT "ornekqb3.dat kutugu olusturuldu." END 2.8.1.4 Dosya ? Dosya (While - Wend) ornekqb4.bas PRINT "ornekqb2.dat kutugunden a, b ve top degerlerini okur," PRINT "top = a + b islemi yapar," PRINT "a, b ve top degerlerini ornekqb3.dat kutugune yazar." PRINT ad1$ = "ORNEKQB2.DAT" ad2$ = "ORNEKQB3.DAT" OPEN ad1$ FOR INPUT AS #1 OPEN ad2$ FOR OUTPUT AS #2 WHILE NOT EOF(1) INPUT #1, a, b, top top = a + b PRINT #2, a, b, top WEND CLOSE #1 CLOSE #2 PRINT "ornekqb3.dat kutugu olusturuldu." END Ata Önal 27 28 Veri ve Dosya Isleme 2.8.2 Örnek Pascal Programlari 2.8.2.1 Ekran ? Dosya (For) program ornektp1; {Içerik: Ekrandan iki satir olarak girilen a ve b sayilarini ornektp1.dat kutugune yazar. Ortam : PC Turbo pascal Tarih : 12/10/1994} var dosya:TEXT; a,b,i:integer; begin assign(dosya,'c:\ornektp1.dat'); rewrite(dosya); for i:=1 to 2 do begin write(i,'. a :'); readln(a); write(i,'. b :'); readln(b); writeln('a ve b sayilari ornektp1.dat dosyasina yazildi.'); writeln(' '); writeln(dosya,a,' ',b); end; close(dosya); writeln('ornektp1.dat dosyasi olusturuldu...'); end. 2.8.2.2 Dosya ? Dosya (For) program ornektp2; { Içerik: ornektp1.dat kutugunden okunan a ve b sayilarini ve toplamlarini ornektp2.dat dosyasina yazar. ortam : PC Turbo Pascal tarih : 12/10/1994 } var dosya1,dosya2:TEXT; a,b,i,top:byte; begin assign(dosya1,'c:\ornektp1.dat'); assign(dosya2,'c:\ornektp2.dat'); reset(dosya1); rewrite(dosya2); for i:=1 to 2 do begin readln(dosya1,a,b); top:=a+b; writeln(dosya2,a,' ',b,' ',top); end; Ata Önal Veri ve Dosya Isleme close(dosya1); close(dosya2); writeln('ornektp2.dat dosyasi olusturuldu.'); end. 2.8.2.3 Dosya ? Dosya (Repeat - Until) program ornektp3; {Içerik: ornektp1.dat kutugunden okunan a ve b saylarini ve toplamlarini ornektp2.dat kutugune yazar. Ortam : PC Turbo Pascal Tarih : 12/10/1994} var dosya1,dosya2:TEXT; a,b,i,top:byte; begin assign(dosya1,'ornektp1.dat'); assign(dosya2,'ornektp2.dat'); reset(dosya1); rewrite(dosya2); repeat readln(dosya1,a,b); top:=a+b; writeln(dosya2,a,' ',b,' ',top); until eof(dosya1); close(dosya1); close(dosya2); writeln('ornektp2.dat dosyasi olusturuldu.'); end. 2.8.2.4 Dosya ? Dosya (While Not EOF) program ornektp4; { Icerik: ornektp1.dat kutugunden okunan a ve b saylarini ve toplamlarini ornektp2.dat kutugune yazar. Ortam : PC Turbo Pascal Tarih : 12/10/1994 } var dosya1,dosya2:TEXT; a,b,i,top:byte; begin assign(dosya1,'ornekt p1.dat'); assign(dosya2,'ornektp2.dat'); reset(dosya1); rewrite(dosya2); while not eof (dosya1) do begin readln(dosya1,a,b); top:=a+b; writeln(dosya2,a,' ',b,' ',top); end; Ata Önal 29 30 Veri ve Dosya Isleme close(dosya1); close(dosya2); writeln('ornektp2.dat kutugu olusturuldu.'); end. Ata Önal BÖLÜM 3 3 Dogrudan Erisimli Dosyalar Kayitlara dogrudan erisim olanagi saglayan dosyalardir. Dogrudan erisimli dosyalarda de sirali dosyalarda oldugu gibi kayit ekleme, kayit silme ve kayit günleme islemleri yapilabilir. Dogrudan erisimli dosyalarda, herhangi bir kayda erisebilmek için o kaydin dosyada depolandigi yerin adresinin belirlenmesi gereklidir. Adres belirleme islemine, anahtar – adres dünüsüm islemi denilmektedir. Anahtar sahanin sayisal olmasi durumunda sayisal - adres dönüsüm islemi uygulanarak kaydin Dosyadaki yerlesim yeri numarasi ( YYN ) bulunur. Anahtar sahanin karakter olmasi durumunda ise önce karakter - sayisal dönüsümü yapilarak anahtar saha sayisala dönüstürülür. Daha sonra sayisal anahtar sahaya sayisal - adres dönüsüm islemi uygulanarak kaydin dogrudan Dosyada yerlesecegi yerin yerlesim yeri numarasi ( YYN ) yani adresi bulunur. Depolama yeri adresi bazi kayitlarda benzer çikabilir. Bu durumda, dogrudan Dosya yapisi tanimina bagli olarak, kayit tasma sahasina yerlestirilir. Dogrudan Dosya yapisi taniminda ayni adrese tek bir kayit yerlestirilebilecegi gibi birden çok kayit ta yerlestirilebilir. Tasma sahasi ise, yine dogrudan dosyasin tanimina bagli olarak, ayni Dosya içinde olabilecegi gibi ayri bir Dosyada de olabilir. Bir kaydin Dosyada depolandigi yerin adresinin belirlenmesi islemlerinde anahtar-adres dönüsüm algoritmalari kullanilir. 3.1 Anahtar-adres dönüsüm algoritmalari Anahtar-adres dönüsüm algoritmalarindan bazilari asagida verilmistir. 3.1.1 Bölme Yöntemi (Dividing yöntemi) Bölme yönteminde anahtar saha depolama sayisina en yakin asal sayi ile bölünür. Bölümkin asal sayi ile bölünür. Bölümn depolama yeri adresi olarak kullanilir. Eger anahtar degeri 172148 ve depolama yeri 7000 ise. 172148, 7000'e en yakin asalsayi olan 6997 ile bölünmelidir. Bölüm islemi sonucunda elde edilen kalan ( 4220 ), kaydin depolama yerinin adresi olarak kullanilacaktir. 3.1.2 Mid-Square yöntemi Mid-square yönteminde önce anahtar kendisi ile çarpilir, sonra çikan sayinin ortasindaki rakamlar alinarak depolama ye ri sayisi parametresiyle çarpimindan elde edilen sayi kullanilarak adresin yeri bulunur. Örnegin, kayitlarin anahtar saha uzunluklarinin 6 ve 7000 depolama yeri oldugunu varsayalim. Anahtar degeri 172148 ise, bu sayinin karesi 029634933904 ve ortasindaki 4 rakam ise 3493 dir. Bu sayi ile, depolama yeri sayisi parametresi olan 0.7 nin çarpimindan (3493*0.7=2445) elde edilen 2445 sayisi kaydin depolama yerinin adresi olarak kullanilir. 3.1.3 Radix Conversion yöntemi Yerlesim yeri eleman sayisi 7000, anahtar degeri 172148 ve taban 11 olsun. 1*115 + 7*114 + 2*113 + 1*112 + 4*111 + 8*110 = 266373 32 Veri ve Dosya Isleme Islem sonucunda yüksek seviyedeki rakamlar atilir. Kalan 6373 sayisinin 0.7 ile çarpimi olan 4461 sayisi yerlesim adresi olarak kullanilir. 3.1.4 Shifting yöntemi adres uzunlugu ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 1 7 2 0 ? ? 7 3 0 5 9 2 ? 7 ? 1 7 ? ? 3 ? 5 9 0 7 ? 9 9 3.1.5 Folding yöntemi adres uzunlugu ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 1 7 ? 2 7 ? 0 7 ? 3 ? ? 5 9 6 ? 7 0 Anahtar-adres dönüsüm örnek programlari 3.2.1.1 Mid-Square yöntemi Pascal program örnegi program midsquare; uses crt; var yensay:longint; anh,say,uz,yeryno,yeryes:integer; yerypar,temp: real; ort,s,s1:string; function usbul(taban,us:integer):integer; var say,sonuc:integer; Ata Önal 9 1 7 3 3.2 5 Veri ve Dosya Isleme begin sonuc:=1; if us=0 then usbul:=1; for say:=1 to us do begin sonuc:=sonuc*taban; end; usbul:=sonuc; end; begin clrscr; write ('anahtari giriniz');readln(anh); write ('yerlesim yeri eleman sayisi');readln(yeryes); str(yeryes,s); uz:=length(s); yerypar:=yeryes/usbul(10,uz); yensay:=anh*anh; str(yensay,s); str(anh,s1); ort:=(copy(s,(length(s1)-uz) DIV 2+1,uz)); val(ort,say,uz); temp:=(say*yerypar); yeryno:=trunc(temp); writeln(yeryno); readln;readln; end. 3.2.1.2 Radix Conversion yöntemi Pascal program örnegi Anahtar-adres donusum algoritmalari-Radix -conversion yontemi uses crt; var ksay1,anah1,anah:string; uz,uz1,taban,al,ksay,i,k,top,crp,crp1:longint; hata:integer; bol:real; begin clrscr; write('Depolama yeri..: ');readln(ksay1); write('Anahtar deger..: ');readln(anah1); write('Taban sayisi...: ');readln(taban); uz:=length(anah1); for i:=0 to uz-1 do begin anah:=copy(anah1,uz-i,1); val(anah,al,hata);crp:=1; if i<>0 then begin for k:=1 to i do crp:=crp*taban; end; Ata Önal 33 34 Veri ve Dosya Isleme top:=top+(crp*al); end; str(top,anah1); uz:=length(anah1);hata:=uz-3; anah:=copy(anah1,uz-hata,4); val(anah,al,hata); uz1:=length(ksay1);crp1:=1; val(ksay1,ksay,hata); for i:=1 to uz1 do crp1:=10*crp1; crp:=al*ksay; crp:=crp div crp1; writeln('YYN............: ',crp); readln; end. 3.2.1.3 Shifting Yöntemi Pascal Program Örnegi uses crt; var ksay1,anah1,anah,topla:string; uz,uz1,taban,al,ksay,i,top,top1,toplam:longint; hata,k,tut,m,kontrol:integer; bol:real; begin clrscr; write('Kayit sayisi...: ');readln(ksay1); write('Anahtar deger..: ');readln(anah1); uz:=length(anah1); uz1:=length(ksay1); bol:=uz / uz1; hata:=round(bol); if bol<hata then begin topla:=''; al:=trunc(bol); for i:=al downto 1 do begin anah:=copy(anah1,i,1); topla:=topla+anah; end; topla:=topla+copy(anah1,al+hata,1); val(topla,toplam,k); top1:=top1+toplam;kontrol:=1; end; tut:=2;top:=1;uz1:=hata; if kontrol=1 then begin tut:=1;uz1:=uz;top:=hata*2; end; for m:=1 to tut do begin topla:=''; if m=2 then begin top:=al+hata+1;uz1:=uz; end; for i:=uz1 downto top do begin Ata Önal Veri ve Dosya Isleme anah:=copy(anah1,i,1); topla:=topla+anah; end; val(topla,toplam,k); top1:=top1+toplam; end; write('YYN............: ',top1); readln; end. 3.2.1.4 Folding yöntemi Pascal Program örnegi uses crt; var sayi:array[1..8] of integer; sayi1:array[1..9,1..4] of integer; x,i,l,top,k:integer; son:real; begin clrscr; for i:=1 to 9 do begin for k:=1 to 4 do begin sayi1[i][k]:=0; end; end; writeln('8 tane tek basamakli sayi giriniz'); writeln('her rakamdan sonra enter tusuna basiniz'); for i:=1 to 8 do begin readln(sayi[i]); end; k:=2;l:=2; for i:=2 downto 1 do begin sayi1[k][l]:=sayi[i]; k:=k+1;l:=l+1; end; k:=4;l:=4; for i:=6 to 8 do begin sayi1[k][l]:=sayi[i]; k:=k+1;l:=l-1; end; sayi1[3][4]:=sayi[5]; for i:=2 to 4 do begin for k:=1 to 8 do begin sayi1[9][i]:=sayi1[9][i]+sayi1[k][i]; if sayi1[9][i]>=10 then begin sayi1[9][i]:=sayi1[9][i]-10; sayi1[9][i-1]:=sayi1[9][i-1]+1; end; Ata Önal 35 36 Veri ve Dosya Isleme end; end; writeln('sayilarin kayis sekli asagida matris olarak gösterilmistir'); for i:=1 to 9 do begin for k:=2 to 4 do begin write(sayi1[i][k],' '); end; writeln; end; writeln('bu progragramda cikan sayi yerlesim yeri parametresi ile carpilamiyor'); readln; end. Ata Önal Veri ve Dosya Isleme 37 3.3 Dogrudan Erisimli Dosya Modelleri Tablo 3-1’de dogrudan erisimli dosyalardaki silme, ekleme, günleme, ve bulma islemlerine uygulanmakta olan degisik modeller verilmistir. Tablo 3-1 Dogrudan Erisimli Dosya Modelleri MODEL SILME 1 2 3 2’ye benzer 4 5 6 5’e benzer 7 YORUM EKLEM SORGU E Sifirlama Silinecek kaydin anahtar Tasmaya Sayi mi? degeri sifirlanir. Devami var mi? “ “ Son Sayi mi? sifira, Son sifir yoksa mi? tasmaya Devami var mi? “ “ Ilk sifira, Sayi mi? yoksa Ilk sifir tasmaya mi? Devami var mi? Bag Silinecek kayit ana Tasmaya Sayi mi? Degistirme bölmede ise sifir yazilir Devami (sifir kayit). Sifir kayit var mi? sorgu sirasinda degiskene saklanir. Silinecek kayit tasmada ise, silinecek kaydin pointer’i bir önceki kaydin pointer’ine tasinir (pasif kayit). Pasif kayit silme islemi sirasinda diziye alinir. “ “ Son Sayi mi? sifira, Son sifir yoksa mi? tasmaya Devami var mi? “ “ Ilk sifira, Sayi mi? yoksa Ilk sifir tasmaya mi? Devami var mi? “ “ Son Sayi mi? pasife, Devami yoksa var mi? tasmaya YORUM Eklenecek kayit tasmaya yazilir. Eklenecek kayit önce son sifira, yoksa tasmaya yazilir. Eklenecek kayit önce ilk sifira, yoksa tasmaya yazilir. Eklenecek kayit tasmaya yazilir. Eklenecek kayit önce son sifira, yoksa tasmaya yazilir. Eklenecek kayit önce ilk sifira, yoksa tasmaya yazilir. Eklenecek kayit önce son pasife, yoksa tasmaya yazilir. Ata Önal 38 Veri ve Dosya Isleme 8 7’ye benzer “ “ 9 “ “ 10 9’a benzer “ “ Ilk pasife, yoksa tasmaya Son sifira, yoksa son pasife, yoksa tasmaya Ilk sifira, yoksa ilk pasife, yoksa tasmaya Sayi mi? Devami var mi? Sayi mi? Son sifir mi? Devami var mi? Sayi mi? Ilk sifir mi? Devami var mi? Eklenecek kayit önce ilk pasife, yoksa tasmaya yazilir. Eklenecek kayit önce son sifira, yoksa son pasife, yoksa tasmaya yazilir. Eklenecek kayit önce ilk sifira, yoksa ilk pasife, yoksa tasmaya yazilir. 3.3.1 Sifirlama Modeli (Silme: Sifirlama, Ekleme: Tasmaya) Yöntem: Silinecek kaydin anahtar degeri sifirlanir. Eklenecek kayit tasmaya yazilir. Ekleme islemi için; Sayi mi?, Devami var mi? sorgulamalari yapilir. Örnek: Islem Kaydi Tipi ve Içerigi: (Sirali Dosya) (Kod, No, Not) Sonuç Kaydi Tipi ve Içerigi: (Dogrudan) (No, Not, Pnt) Sonuç Kaydi Yapisi: Ilk 3 satiri Normal, Sonraki satirlari Tasma kayitlari. Islem Kodu: (1:Günle, 2:Ekle, 3:Sil) Anahtar-Adres Dönüsümü Yöntemi: (Bölme Yöntemi) Islem Yöntemi: Ekleme: Tasmaya, Silme: Sifirlama Tablo 3-2, ilk 3 satiri normal sonraki satirlari tasma kayitlarindan olusan, ve kayit içerigi NO (Anahtar) ve NOT parametrelerinden olusan dogrudan Dosya yapisi modelidir. Tablodaki YYN (Dosyadaki yerlesim yeri numarasini), PNT bir sonraki kaydin bulundugu satir numarasini, T ise tasma kaydinin yerlesecegi satir numarasini göstermektedir. Tablo 3-2 Dogrudan Dosya Modeli Model YYN 1 2 3 4 NO 0 0 0 0 NOT 0 0 0 0 T:4 PNT 0 0 0 0 Kullanilacak Yöntem: (Bölme Yöntemi) Dogrudan Dosyadaki normal satir sayisi 3 oldugundan anahtar degeri 3 e bölünür bölümden elde edilen kalan kaydin yerlesecegi satirin yerlesim yeri numarasi ( YYN ) dir. Kalan 0 ise 3 alinir. Ilk yükleme kayitlari Tablo 3-3’de verilmistir. Ata Önal Veri ve Dosya Isleme 39 Tablo 3-3 Dogrudan Dosya Ilk Yükleme Kayitlari NO 4 8 6 NOT 45 55 60 Ilk Yükleme Kayitlarindaki 1.kaydin anahtar degeri olan 4, bölme islemi sonucunda 1 kalanini, 2.kaydin anahtar degeri olan 8, bölme islemi sonunda 2 kalanini, 3.kaydin anahtar degeri olan 6 ise, bölme islemi sonucunda 0 kalanini verir. Dogrudan Dosyada 0 numarali satir olmadigi ve bölme sonucunda hiç bir anahtar degerinin 3 kalanini verememesi nedeniyle 0 kalanli kayitlar 3 olarak alinir. Bu duruma göre ilk yükleme sonucunda, anahtar degeri 4 olan 1.kayit 1 kalanini vermesi nedeniyle 1.satira, anahtar degeri 8 olan 2.kayit 2 kalanini vermesi nedeniyle 2.satira, anahtar degeri 6 olan 3.kayit da 3.satira yerlesir (Tablo 3-4 ). Tablo 3-4Ilk Yükleme Islemi Sonu Dogrudan Dosya Içerigi Ilk Yükleme YYN 1 2 3 4 NO 4 8 6 0 T:4 NOT 45 55 60 00 PNT 0 0 0 0 Ilk yükleme islemi sonunda olusan dogrudan kütüge asagida adimlar olarak verilen islemleri uygulayalim; 1.adimda 2:7,65 islemi uygulanirsa (Ekleme Islemi); Anahtar degeri 7 olan kayit ekle nmek istenmektedir. Anahtar degeri 7 olan kayit, bölme islemi sonunda 1 kalanini verir. 1.satirdaki kaydin anahtar degeri 7 olmadigi ve ayni satirdaki PNTdegeri 0 oldugu için eklenmek istenen kayit Tasma 4 oldugu için 4.satira yazilir. 1.satirin PNT'i 4 olarak, yeni tasma degeri ise 5 olarak degistirilir (Tablo 3-5). Tablo 3-5 1. Adim Sonu Dogrudan Dosya Içerigi 1.adim Yyn 1 2 3 4 No 4 8 6 7 Not 45 55 60 65 T:5 * Pnt 4* 0 0 0* 2.adimda 2:9,58 isle mi uygulanirsa (Ekleme Islemi); Anahtar degeri 9 olan kayit eklenmek istenmektedir. Anahtar degeri 9 olan kayit, bölme islemi sonunda 0 kalanini verir fakat tanim geregi 3 olarak alinir. 3.satirdaki anahtar degeri 9 olmadigi ve ayni satirdaki Pnt degeri 0 oldugu için eklenmek istenen kayit Tasma 5 oldugu için 5.satira yazilir. 3.satirin Pnt si ise 5 olarak, yeni tasma degeri ise 6 olurak degistirilir (Tablo 3-6). Ata Önal 40 Veri ve Dosya Isleme Tablo 3-6 2.Adim Sonu Dogrudan Dosya Içerigi 2.adim Yyn 1 2 3 4 5 No 4 8 6 7 9 T:6 * Pnt 4 0 5* 0 0* Not 45 55 60 65 58 3.adimda 3:6,60 islemi uygulanirsa (Silme Islemi); Anahtar degeri 6 olan kayit silinmek istenmektedir. Anahtar degeri 6 olan kayit, bölme islemi sonunda 0 kalanini ve rir fakat tanim geregi 3 olarak alinir. 3.satirdaki kaydin anahtar degeri 6 oldugu için aranan kayit bulunmus demektir. Bu nedenle silinebilir. 3.satirdaki kaydin numara ve not degerlerine sifir tasinarak silme islemi yapilir (Tablo 3-7). Tablo 3-7 3.Adim Sonu Dogrudan Dosya Içerigi 3.adim Yyn 1 2 3 4 5 No 4 8 0 7 9 Not 45 55 00 65 58 T:6 Pnt 4 0 5* 0 0 4.adimda 3:9,58 islemi uygulanirsa (Silme Islemi); Anahtar degeri 9 olan kayit silinmek istenmektedir. Anahtar degeri 9 olan kayit, bölme islemi sonunda 0 kalanini verir fakat tanim geregi 3 olarak alinir. Arama islemine 3.satir okunarak baslanir. 3.satirdaki kaydin anahtar degeri 0 oldugundan aranan kayit bulunamamistir. 3.satirin Pnt degeri 5 old ugundan, 5.kayit okunarak arama islemine devam edilir. 5.kaydin anahtar degeri 9 oldugundan aranan kayit bulunmustur. Silme islemi yapilabilir. Silme islemi 5.satirdaki kaydin numara ve not degerlerine sifir tasinarak yapilir (Tablo 3-7). Tablo 3-7 2.Adim Sonu Dogrudan Dosya Içerigi 3.adim Yyn 1 2 3 4 5 No 4 8 0 7 0 Not 45 55 00 65 00 T:6 Pnt 4 0 5 0 0* 3.3.2 Sifirlama Modeli (Silme: Sifirlama, Ekleme: Son sifira yoksa tasmaya) Yöntem: Silinecek kaydin anahtar degeri sifirlanir. Eklenecek kayit önce son sifira, yoksa tasmaya yazilir. Ekleme islemi için; Sayi mi?, Son sifir mi?, Devami var mi? sorgulamalari yapilir. 5.adimda 2:12,72 islemi uygulanirsa (Ekleme Islemi); Anahtar degeri 12 olan kayit eklenmek istenmektedir. Anahtar degeri 12 olan kayit, bölme islemi sonunda 0 kalanini verir fakat tanim geregi 3 olarak alinir. 3.satir okunarak isleme baslanir. Ata Önal Veri ve Dosya Isleme 41 3.satirdaki kaydin anahtar degeri 12 olmadigindan sayi mi? sorgulamasi hayir yanitini alir. Anahtar degeri 0 oldugundan 3.satir saklanir. Ayni satirin Pnt degeri olan 5 alinarak arama islemine 5.satir okunarak devam edilir. 5.satirdaki anahtar degeri 12 olmadigin için sayi mi? sorgulamasi hayir yanitini alir. Anahtar degeri 0 oldugu için sifir mi? sorgulamasi evet yanitini alir ve bu kez 5.satir saklanir. 5.satirin Pnt degeri 0 oldugu için yol üzerinde baska kayit yok demektir. Eklenme islemi yapilabilir. 12 anahtar numarali kayit son sifira yani 5.satira yazilir (Tablo 3-8). Tablo 3-8 2.Adim Sonu Dogrudan Dosya Içerigi 3.adim Yyn 1 2 3 4 5 No 4 8 0 7 12 Not 45 55 00 65 00 T:6 Pnt 4 0 5 0 0* 3.3.3 Sifirlama Modeli (Silme: Sifirlama, Ekleme: Ilk sifira yoksa tasmaya) Yöntem: Silinecek kaydin anahtar degeri sifirlanir. Eklenecek kayit önce ilk sifira, yoksa tasmaya yazilir. Ekleme islemi için; Sayi mi?, Ilk sifir mi?, Devami var mi? sorgulamalari yapilir. 3.3.4 Bag Degistirme Modeli (Silme: Bag Degistirme, Ekleme: Tasmaya) Yöntem: Silinecek kaydin pointer’i bir önceki kaydin pointer’ine tasinir. Eklenecek kayit tasmaya yazilir. Örnek: Islem Kaydi Tipi ve Içerigi: (Sirali Dosya) (Kod, No, Not) Sonuç Kaydi Tipi ve Içerigi: (Dogrudan) (No, Not, Pnt) Sonuç Kaydi Yapisi: Ilk 3 satiri Normal, Sonraki satirlari Tasma kayitlari. Islem Kodu: (1:Günle, 2:Ekle, 3:Sil) Anahtar-Adres Dönüsümü Yöntemi: (Bölme Yöntemi) Islem Yöntemi: Ekleme: Tasmaya, Silme: Sifirlama Tablo 3-8, ilk 3 satiri normal sonraki satirlari tasma kayitlarindan olusan, ve kayit içerigi No (Anahtar) ve Not parametrelerinden olusan dogrudan Dosya yapisi modelidir. Tablodaki Yyn (Dosyadaki yerlesim yeri numarasini), Pnt bir sonraki kaydin bulundugu satir numarasini, T ise tasma kaydinin yerlesecegi satir numarasini göstermektedir. Tablo 3-8 Bag Degistirmeli Dogrudan Dosya Modeli Model Yyn 1 2 3 4 No 0 0 0 0 Not 0 0 0 0 T:4 Pnt 0 0 0 0 Kullanilacak Yöntem: (Bölme Yöntemi) Dogrudan Dosyadaki normal satir sayisi 3 oldugundan anahtar degeri 3 e bölünür bölümden elde edilen kalan kaydin yerlesecegi satirin Ata Önal 42 Veri ve Dosya Isleme yerlesim yeri numarasi (Yyn) dir. Kalan 0 ise 3 alinir. Ilk yükleme olarak alttaki 3 kayit verilirse; Tablo 3-9 elde edilir. Söyle ki; Tablo 3-9 Ilk Yükleme Tablosu No 4 8 6 Not 45 55 60 1.kaydin anahtar degeri olan 4, bölme islemi sonucunda 1 kalanini, 2.kaydin anahtar degeri olan 8, bölme islemi sonunda 2 kalanini, 3.kaydin anahtar degeri olan 6 ise, bölme islemi sonucunda 0 kalanini verir. Dogrudan Dosyada 0 numarali satir olmadigi ve bölme sonucunda hiç bir anahtar degerinin 3 kalanini verememesi nedeniyle 0 kalanli kayitlar 3 olarak alinir. Bu duruma göre ilk yükleme sonucunda, anahtar degeri 4 olan 1.kayit 1 kalanini vermesi nedeniyle 1.satira, anahtar degeri 8 olan 2.kayit 2 kalanini vermesi nedeniyle 2.satira, anahtar degeri 6 olan 3.kayit da 3.satira yerlesir (Tablo 3-10). Tablo 3-10 Ilk Yükleme Sonucu Dogrudan Dosya Ilk Yükleme Yyn 1 2 3 4 No 4 8 6 0 T:4 Not 45 55 60 00 Pnt 0 0 0 0 Tablo 3-10’daki dogrudan dosyaya asagidaki islemler uygulanirsa. 1.adimda 2:7,65 islemi uygulanirsa; Anahtar degeri 7 olan kayit eklenmek istenmektedir. Anahtar degeri 7 olan kayit, bölme islemi sonunda 1 kalanini verir. 1.satirdaki anahtar degeri 7 olmadigi ve ayni satirdaki Pnt degeri 0 oldugu için eklenmek istenen kayit Tasma 4 oldugu için 4.satira yazilir. 1.satirin Pnt si 4 olarak, yeni tasma degeri ise 5 olarak degistirilir (Tablo 3-11). Tablo 3-11 1.Adim Sonu 1.adim Yyn 1 2 3 4 No 4 8 6 7 Not 45 55 60 65 T:5 * Pnt 4* 0 0 0* 2.adimda 2:9,58 islemi uygulanirsa; Anahtar degeri 9 olan kayit eklenmek istenmektedir. Anahtar degeri 9 olan kayit, bölme islemi sonunda 0 kalanini verir fakat tanim geregi 3 olarak alinir. 3.satirdaki anahtar degeri 9 olmadigi ve ayni satirdaki Pnt degeri 0 oldugu için eklenmek istenen kayit Tasma 5 oldugu için 5.satira yazilir. 3.satirin Pnt si ise 5 olarak, yeni tasma degeri ise 6 olarak degistirilir (Tablo 3-12). Tablo 3-12 2.Adim Sonu 2.adim Yyn 1 Ata Önal No 4 Not 45 T:6 * Pnt 4 Veri ve Dosya Isleme 2 3 4 5 8 6 7 9 55 60 65 58 43 0 5* 0 0* 3.adimda 3:6,60 islemi uygulanirsa; Anahtar degeri 6 olan kayit silinmek istenmektedir. Anahtar degeri 6 olan kayit, bölme islemi sonunda 0 kalanini verir fakat tanim geregi 3 olarak alinir. 3.satirdaki anahtar degeri 6 oldugu için aranan kayit bulunmus demektir. Bu nedenle silinebilir. Silme islemi için numara ve not degerlerine sifir tasinarak kayit yeniden yazilir (Tablo 3-13). Tablo 3-13 3. Adim Sonu 3.adim Yyn 1 2 3 4 5 No 4 8 0 7 9 Not 45 55 00 65 58 T:6 Pnt 4 0 5* 0 0 4.adimda 3:9,58 islemi uygulanirsa; Anahtar degeri 9 olan kayit silinmek is tenmektedir. Anahtar degeri 9 olan kayit, bölme islemi sonunda 0 kalanini verir fakat tanim geregi 3 olarak alinir. 3.satirdaki anahtar degeri 0 oldugu için Pnt degerine bakilir. Pnt degeri 5 oldugu için 5.satira gidilir. 5.satirin anahtar degeri 9 oldugundan kayit bulunmus olur. Bulunan kaydin Pnt'i bir önceki kaydin Pnt'ne tasinir. Bu islem sonunda 5.kaydin Pnt'i olan 0, 3.kaydin Pnt'i olan 5 in yerine tasinir. 5.satir pasif konuma düstügü için aynen kalabilir (Tablo 3-14). Tablo 3-14 4.Adim Sonu 4.adim Yyn 1 2 3 4 5 No 4 8 0 7 9 Not 45 55 00 65 58 T:6 Pnt 4 0 0* 0 0 pasif 5.adimda 2:9,58 islemi uygulanirsa; Anahtar degeri 9 olan kayit eklenmek istenmektedir. Anahtar degeri 9 olan kayit, bölme islemi sonunda 0 kalanini verir fakat tanim geregi 3 olarak alinir. 3.satirdaki anahtar degeri 0 oldugu için Pnt degerine bakilir. Pnt degeri 0 oldugu için bu kayit eklenebilir. Tasma degeri 6 oldugundan 6.satira eklenir. 6.satirin Pnt'i 0, 3.satirin Pnt'i 6 ve tasma degeri 7 olarak degistirilir (Tablo 3-15). Ata Önal 44 Veri ve Dosya Isleme Tablo 3-15 5.Adim Sonu 5.adim Yyn 1 2 3 4 5 6 No 4 8 0 7 9 9 Not 45 55 00 65 58 58 T:7 * Pnt 4 0 6* 0 0 pasif 0* 6.adimda 2:12,72 islemi uygulanirsa; Anahtar degeri 12 olan kayit eklenmek istenmektedir. Anahtar degeri 12 olan kayit, bölme islemi sonunda 0 kalanini verir fakat tanim geregi 3 olarak alinir. 3.satirdaki anahtar degeri 0 oldugu için Pnt degerine bakilir. Pnt degeri 6 oldugu için isleme 6.satirdan devam edilir. 6.satirdaki anahtar degeri 12 olmadigi için bu kez 6.satirin Pnt'na bakilir. Bu deger 0 oldugu için kayit eklenebilir özelliktedir. Tasma degeri 7 oldugu için 7.satira eklenir. 7.satirin Pnt'i 0, 6.satirin Pnt'i 6 ve Tasma degeri 8 olarak degistirilir (Tablo 3-16). Tablo 3-16 6. Adim Sonu 6.adim Yyn 1 2 3 4 5 6 7 No 4 8 0 7 9 9 12 Not 45 55 00 65 58 58 72 T:8 * Pnt 4 0 6 0 0 pasif 7* 0 3.3.5 Bag Degistirme Modeli (Silme: Bag Degistirme, Ekleme: Son silinene (pasife) yoksa tasmaya) Yöntem: Silinecek kaydin pointer’i bir önceki kaydin pointer’ine tasinir. Eklenecek kayit önce son silinene, yoksa tasmaya yazilir. Örnek: Islem Kaydi Tipi ve Içerigi: (Sirali Dosya) (Kod, No, Not) Sonuç Kaydi Tipi ve Içerigi: (Dogrudan) (No, Not, Pnt) Sonuç Kaydi Yapisi: Ilk 3 satiri Normal, Sonraki satirlari Tasma kayitlari. Islem Kodu: (1:Günle, 2:Ekle, 3:Sil) Anahtar-Adres Dönüsümü Yöntemi: (Bölme Yöntemi) Islem Yöntemi: Ekleme: Tasmaya, Silme: Sifirlama Tablo 3-17, ilk 3 satiri normal sonraki satirlari tasma kayitlarindan olusan, ve kayit içerigi No (Anahtar) ve Not parametrelerinden olusan dogrudan Dosya yapisi modelidir. Tablodaki Yyn (Dosyadaki yerlesim yeri numarasini), Pnt bir sonraki kaydin bulundugu satir numarasini, T ise tasma kaydinin yerlesecegi satir numarasini göstermektedir. Ata Önal Veri ve Dosya Isleme 45 Tablo 3-17 Dogrudan Dosya Yapisi Modeli Model Yyn 1 2 3 4 S:0 No 0 0 0 0 Not 0 0 0 0 T:4 Pnt 0 0 0 0 Kullanilacak Yöntem: (Bölme Yöntemi) Dogrudan Dosyadaki normal satir sayisi 3 oldugundan anahtar degeri 3 e bölünür bölümden elde edilen kalan kaydin yerlesecegi satirin yerlesim yeri numarasi (Yyn) dir. Kalan 0 ise 3 alinir. Ilk yükleme olarak ya ndaki 3 kayit verilirse; Tablo 3-18 elde edilir. Söyle ki; Tablo 3-18 Ilk Yükleme Kayitlari No 4 8 6 Not 45 55 60 1.kaydin anahtar degeri olan 4, bölme islemi sonucunda 1 kalanini, 2.kaydin anahtar degeri olan 8, bölme islemi sonunda 2 kalanini, 3.kaydin anahtar degeri olan 6 ise, bölme islemi sonucunda 0 kalanini verir. Dogrudan Dosyada 0 numarali satir olmadigi ve bölme sonucunda hiç bir anahtar degerinin 3 kalanini verememesi nedeniyle 0 kalanli kayitlar 3 olarak alinir. Bu duruma göre ilk yükleme sonucunda, anahtar degeri 4 olan 1.kayit 1 kalanini vermesi nedeniyle 1.satira, anahtar degeri 8 olan 2.kayit 2 kalanini vermesi nedeniyle 2.satira, anahtar degeri 6 olan 3.kayit da 3.satira yerlesir (Tablo 3-19). Tablo 3-19 Ilk Yükleme Sonuç Dosyasi Ilk Yükleme Yyn 1 2 3 4 S:0 No 4 8 6 0 T:4 Not 45 55 60 00 Pnt 0 0 0 0 Ilk Yükleme isleminden sonra asagidaki islemleri adimlar olarak izleyelim; 1.adimda 2:7,65 islemi uygulanirsa; Anahtar degeri 7 olan kayit eklenmek istenmektedir. Anahtar degeri 7 olan kayit, bölme islemi sonunda 1 kalanini verir. 1.satirdaki anahtar degeri 7 olmadigi ve ayni satirdaki Pnt degeri 0 oldugu için eklenmek istenen kayit Tasma 4 oldugu için 4.satira yazilir. 1.satirin Pnt si 4 olarak, yeni tasma degeri ise 5 olarak degistirilir (Tablo 3-20). Tablo 3-20 1.Adim Sonu 1.adim Yyn 1 2 3 4 S:0 No 4 8 6 7 Not 45 55 60 65 T:5 * Pnt 4* 0 0 0* Ata Önal 46 Veri ve Dosya Isleme 2.adimda 2:9,58 islemi uygulanirsa; Anahtar degeri 9 olan kayit eklenmek istenmektedir. Anahtar degeri 9 olan kayit, bölme islemi sonunda 0 kalanini verir fakat tanim geregi 3 olarak alinir. 3.satirdaki anahtar degeri 9 olmadigi ve ayni satirda ki Pnt degeri 0 oldugu için eklenmek istenen kayit Tasma 5 oldugu için 5.satira yazilir. 3.satirin Pnt si ise 5 olarak, yeni tasma degeri ise 6 olarak degistirilir (3-21). Tablo 3-21 2.Adim Sonu 2.adim Yyn 1 2 3 4 5 S:0 Not 45 55 60 65 58 No 4 8 6 7 9 T:6 * Pnt 4 0 5* 0 0* 3.adimda 3:6,60 islemi uygulanirsa; Anahtar degeri 6 olan kayit silinmek istenmektedir. Anahtar degeri 6 olan kayit, bölme islemi sonunda 0 kalanini verir fakat tanim geregi 3 olarak alinir. 3.satirdaki anahtar degeri 6 oldugu için aranan kayit bulunmus demektir. Bu nedenle silinebilir. Silme islemi için numara ve not degerlerine sifir tasinarak kayit yeniden yazilir. S dizininin 2.elemanina silinen kaydin satir numarasi olan 3, 1.elemanina ise dizin eleman sayisi olan 1 tasinir (3-22). Tablo 3-22 3.Adim Sonu 3.adim Yyn 1 2 3 4 5 S:1,3 * No 4 8 0 7 9 Not 45 55 00 65 58 T:6 Pnt 4 0 5* 0 0 4.adimda 3:9,58 islemi uygulanirsa; Anahtar degeri 9 olan kayit silinmek istenmektedir. Anahtar degeri 9 olan kayit, bölme islemi sonunda 0 kalanini verir fakat tanim geregi 3 olarak alinir. 3.satirdaki anahtar degeri 0 oldugu için Pnt degerine bakilir. Pnt degeri 5 oldugu için 5.satira gidilir. 5.satirin anahtar degeri 9 oldugundan kayit bulunmus olur. Bulunan kaydin Pnt'i olan 0, bir önceki kaydin Pnt'i olan 5 yerine tasinir. 5.satir pasif konuma düstügü için aynen kalabilir. S dizininin 3.elemanina silinen kaydin satir numarasi olan 5, 1.elemanina ise dizin eleman sayisi olan 2 tasinir (Tablo 3-23). Tablo 3-23 4.Adim Sonu 4.adim Yyn 1 2 3 4 5 Ata Önal S:2,3,5 * No 4 8 0 7 ? Not 45 55 00 65 58 T:6 Pnt 4 0 0* 0 0* Veri ve Dosya Isleme 47 5.adimda 2:9,58 islemi uygulanirsa; Anahtar degeri 9 olan kayit eklenmek istenmektedir. Anahtar degeri 9 olan kayit, bölme islemi sonunda 0 kalanini verir fakat tanim geregi 3 olarak alinir. 3.satirdaki anahtar degeri 0 oldugu için Pnt degerine bakilir. Pnt degeri 0 oldugu için bu kayit eklenebilir özelliktedir. S dizininin 2.elemani olan 5, bu kaydin eklenebilecegi satir numarasidir. 5.satirin Pnt'ne 3.satirin Pnt'i olan 0, 3.satirin Pnt'ne ise eklenen kaydin satir numarasi olan 5 tasinir. S dizinin 1.elemaninin degeri yani eleman sayisi 1 azaltilir. S:1,3 olur (Tablo 3-24). Tablo 3-24 5.Adim Sonu 5.adim Yyn 1 2 3 4 5 S:1,3 * No 4 8 0 7 9 Not 45 55 00 65 58 T:6 Pnt 4 0 5* 0 0* 6.adimda 2:12,72 islemi uygulanirsa; Anahtar degeri 12 olan kayit eklenmek istenmektedir. Anahtar degeri 12 olan kayit, bölme islemi sonunda 0 kalanini verir fakat tanim geregi 3 olarak alinir. 3.satirdaki anahtar degeri 0 oldugu için Pnt degerine bakilir. Pnt degeri 5 oldugu için arama islemine 5.satirdan devam edilir. 5.satirin anahtar degeri 9 dur. Bu kez 5.satirin Pnt degerine bakilir. 5.satirin Pnt degeri 0 oldugundan kayit eklenebilir özelliktedir. S dizinine bakilir. S dizinininden 3.kaydin yazim için uygun oldugu görülmektedir. Eklenmek istenen kayit 3.satira yazilir. 3.satir dogrudan dosyasin normal kaydi oldugu için Pnt degeri degistirilmez. S dizininin eleman saysi 1 azaltilir. S:0 olur (Tablo 3-25). Tablo 3-25 6.Adim Sonu 6.adim Yyn 1 2 3 4 5 S:0 * No 4 8 12 7 9 Not 45 55 72 65 58 T:6 Pnt 4 0 5* 0 0 3.3.6 Bag Degistirme Modeli (Silme: Bag Degistirme, Ekleme: Ilk silinene (pasife), yoksa tasmaya) Yöntem: Silinecek kaydin pointer’i bir önceki kaydin pointer’ine tasinir. Eklenecek kayit önce ilk silinene, yoksa tasmaya yazilir. 3.3.7 Bag Degistirme Modeli (Silme: Bag Degistirme, Ekleme: Son sifira, yoksa son silinene (pasife), yoksa tasmaya) Yöntem: Silinecek kaydin pointer’i bir önceki kaydin pointer’ine tasinir. Eklenecek kayit önce son sifira, yoksa son silinene, yoksa tasmaya yazilir. Ata Önal 48 Veri ve Dosya Isleme 3.3.8 Bag Degistirme Modeli (Silme: Bag Degistirme, Ekleme: Ilk sifira, yoksa ilk silinene (pasife), yoksa tasmaya) Yöntem: Silinecek kaydin pointer’i bir önceki kaydin pointer’ine tasinir. Eklenecek kayit önce ilk sif ira, yoksa ilk silinene, yoksa tasmaya yazilir. 3.3.9 Sifirlama Modeli (Satir Eleman Kapasitesi 2) (Silme: Sifirlama, Ekleme: Tasmaya) Yöntem: Silinecek kaydin anahtar degeri sifirlanir. Eklenecek kayit tasmaya yazilir. Ekleme islemi için; Sayi mi?, Devami var mi? sorgulamalari yapilir. Örnek: Islem Kaydi Tipi ve Içerigi: (Sirali Dosya) (Kod, No) Sonuç Kaydi Tipi ve Içerigi: (Dogrudan) (No, No, Pnt) Sonuç Kaydi Yapisi: Ilk 3 satiri Normal, Satir eleman kapasitesi 2, Sonraki satirlari Tasma kayitlari. Islem Kodu: (1:Günle, 2:Ekle, 3:Sil) Anahtar-Adres Dönüsümü Yöntemi: (Bölme Yöntemi) Islem Yöntemi: Ekleme: Tasmaya, Silme: Sifirlama Tablo 3-26, ilk 3 satiri normal, satir eleman kapasitesi 2, sonraki satirlari tasma kayitlarindan olusan, ve kayit içerigi NO (Anahtar) parametresinden olusan dogrudan Dosya yapisi modelidir. Tablodaki YYN (Dosyadaki yerlesim yeri numarasini), PNT bir sonraki kaydin bulundugu satir numarasini, Tasma ise tasma kaydinin yerlesecegi satir numarasini göstermektedir. Ilk Yükleme Yöntemi: Satir eleman kapasitesi 2 oldugundan her satira 2 kayit yüklenir. Tasma pointeri tek paremetrelidir. 4, 5, 6, ... seklinde artar. Tasan kaydin YYN’na bakilir. Ikinci dilim bossa kayit oraya yazilir. Örnek-1: Ilk Yükleme: 4,5,6,7,8,9,10,11,12,13 (Tablo 3-26) Tablo 3-26 Ilk Yükleme, Tasma: 7 YYN 1 2 3 4 5 6 No 4 5 6 10 11 12 No 7 8 9 13 Pnt 4 5 6 3.3.10 Sifirlama Modeli (Satir Eleman Kapasitesi 2) (Silme: Sifirlama, Ekleme: Son sifira yoksa tasmaya) Yöntem: Silinecek kaydin anahtar degeri sifirlanir. Eklenecek kayit önce son sifira yoksa tasmaya yazilir. Ekleme islemi için; Sayi mi?, son sifir mi? devami var mi? sorgulamalari yapilir. Ata Önal Veri ve Dosya Isleme 49 3.3.11 Sifirlama Modeli (Satir Eleman Kapasitesi 2) (Silme: Sifirlama, Ekleme: Ilk sifira yoksa tasmaya) Islem mantigi: Silinecek kaydin anahtar degeri sifirlanir. Eklenecek kayit önce ilk sifira yoksa tasmaya yazilir. Ekleme islemi için; Sayi mi?, ilk sifir mi? devami var mi? sorgulamalari yapilir. 3.3.12 Bag Degistirme Modeli (Satir Eleman Kapasitesi 2) (Silme: Bag Degistirme, Ekleme: Tasmaya) Ilk yükleme mantigi: Kayitlar gelis sirasina göre her satira 2 kayit olmak üzere yüklenir. Tasmaya giden kayitlar Pnt ile birbirlerine baglanir. Islem Mantigi: Silme islemi mantigi: Önce silinecek kayit bulunur. Silinecek kayit yoksa hata mesaji verdirilir. Silinecek kayit normal bölümde ise anahtar degeri sifirlanir, tasma bölümünde ise Pnt degeri bir önceki kaydin Pnt’na tasinir. Ekleme islemi mantigi: Ekleme islemi için; Sayi mi?, Devami var mi? sorgulamalari yapilarak, eklenecek kayit Dosyada var mi? diye kontrol edilir. Eklenecek kayit Dosyada varsa hata mesaji verdirilir. Eklenecek kayit Dosyada yoksa eklenebilir demektir. Eklenecek kayit tasmaya yazilir ve Pnt degeri sifirlanir. Tasma degeri bir önceki kaydin Pnt’ne tasinir ve tasma degeri 1 arttirilir. Günleme islemi mantigi: Önce günlenecek kayit bulunur. Günlenecek kayit yoksa hata mesaji verdirilir. Günlenecek kayit bulunduysa günleme islemi yapilir. Örnek: Islem Kaydi Tipi ve Içerigi: (Sirali Dosya) (Kod, No) Sonuç Kaydi Tipi ve Içerigi: (Dogrudan) (No, Pnt, No, Pnt) Sonuç Kaydi Yapisi: Ilk 3 satiri Normal, Satir eleman kapasitesi 2, Sonraki satirlari Tasma kayitlari. Islem Kodu: (1:Günle, 2:Ekle, 3:Sil) Anahtar-Adres Dönüsümü Yöntemi: (Bölme Yöntemi) Islem Yöntemi: Ekleme: Tasmaya, Silme: Bag Degistirme Tablo 3-27, ilk 3 satiri normal, satir eleman kapasitesi 2, sonraki satirlari tasma kayitlarindan olusan, ve kayit içerigi NO (Anahtar) parametresinden olusan dogrudan Dosya yapisi modelidir. Tablodaki YYN (Dosyadaki yerlesim yeri numarasini), PNT bir sonraki kaydin bulundugu satir numarasini, Tasma ise tasma kaydinin yerlesecegi satir numarasini göstermektedir. Ilk Yükleme Yöntemi: Satir eleman kapasitesi 2 oldugundan her satira 2 kayit yüklenir. Tasma pointeri çift paremetrelidir. 4,1 ; 4,2 ; 5,1 ; 5,2 ; ... seklinde artar. Tasan kaydin YYN’na bakilmaz. Ata Önal 50 Veri ve Dosya Isleme Örnek: Ilk Yükleme: 4,5,6,7,8,9,10,11,12,13 (Tablo 3 -27) Tablo 3-27 Ilk Yükleme, Tasma: 6-1 YYN 1 2 3 4 5 No 4 5 6 10 12 Pnt 1,2 2,2 3,2 5,2 0 No 7 8 9 11 13 Pnt 4,1 4,2 5,1 0 0 3.3.13 Bag Degistirme Modeli (Satir Eleman Kapasitesi 2) (Silme: Bag Degistirme, Ekleme: Son sifira, yoksa tasmaya) Ilk yükleme mantigi: Kayitlar gelis sirasina göre her satira 2 kayit olmak üzere yüklenir. Tasmaya giden kayitlar Pnt ile birbirlerine baglanir. Tasma islem mantigi: 3 elemanli bir Dosya için 4,1 ; 4,2 : 5,1 : 5,2 : ... olarak artar. Islem Mantigi: Silme islemi mantigi: Önce silinecek kayit bulunur. Silinecek kayit yoksa hata mesaji verdirilir. Silinecek kayit normal bölümde ise anahtar degeri sifirlanir, tasma bölümünde ise Pnt degeri bir önceki kaydin Pnt’na tasinir. Ekleme islemi mantigi: Ekleme islemi için; Sayi mi?, Sifir mi? , Devami var mi? sorgulamalari yapilarak, eklenecek kayit Dosyada var mi? diye kontrol edilir. Sifir mi? sorgulamalari evet ise sifir anahtarli kayitlarin Dosyada bulundugu yerler saklanir. Eklenecek kayit Dosyada varsa hata mesaji verdirilir. Eklenecek kayit Dosyada yoksa eklenebilir demektir. Eklenecek kayit önce son sifira yoksa tasmaya yazilir. Eklenecek kaydin Pnt degerine 0 tasinir. Tasma degeri bir önceki kaydin Pnt’ne tasinir ve tasma degeri 1 arttirilir. Günleme islemi mantigi: Önce günlenecek kayit bulunur. Günlenecek kayit yoksa hata mesaji verdirilir. Günlenecek kayit bulunduysa günleme islemi yapilir. 3.3.14 Bag Degistirme Modeli (Satir Eleman Kapasitesi 2) (Silme: Bag Degistirme, Ekleme: Ilk sifira, yoksa tasmaya) Ilk yükleme mantigi: Kayitlar gelis sirasina göre her satira 2 kayit olmak üzere yüklenir. Tasmaya giden kayitlar Pnt ile birbirlerine baglanir. Tasma islem mantigi: 3 elemanli bir Dosya için 4,1 ; 4,2 : 5,1 : 5,2 : ... olarak artar. Islem Mantigi: Silme islemi mantigi: Önce silinecek kayit bulunur. Silinecek kayit yoksa hata mesaji verdirilir. Silinecek kayit normal bölümde ise anahtar degeri sifirlanir, tasma bölümünde ise Pnt degeri bir önceki kaydin Pnt’na tasinir. Ekleme islemi mantigi: Ekleme islemi için; Sayi mi?, Ilk sifir mi?, Devami var mi? sorgulamalari yapilarak, eklenecek kayit Dosyada var mi? diye kontrol edilir. Ilk sifir mi? sorgulamasi evet ise sifir anahtarli kaydin Dosyada bulundugu yer saklanir. Eklenecek kayit Ata Önal Veri ve Dosya Isleme 51 Dosyada varsa hata mesaji verdirilir. Eklenecek kayit D osyada yoksa eklenebilir demektir. Eklenecek kayit önce ilk sifira yoksa tasmaya yazilir. Eklenecek kaydin Pnt degerine 0 tasinir. Tasma degeri bir önceki kaydin Pnt’ne tasinir ve tasma degeri 1 arttirilir. Günleme islemi mantigi: Önce günlenecek kayit bulunur. Günlenecek kayit yoksa hata mesaji verdirilir. Günlenecek kayit bulunduysa günleme islemi yapilir. 3.3.15 Bag Degistirme Modeli (Satir Eleman Kapasitesi 2) (Silme: Bag Degistirme, Ekleme: Son sifira, yoksa son silinene (pasife), yoksa tasmaya) Ilk yükle me mantigi: Kayitlar gelis sirasina göre her satira 2 kayit olmak üzere yüklenir. Tasmaya giden kayitlar Pnt ile birbirlerine baglanir. Tasma islem mantigi: 3 elemanli bir Dosya için 4,1 ; 4,2 : 5,1 : 5,2 : ... olarak artar. Islem Mantigi: Silme islemi mantigi: Önce silinecek kayit bulunur. Silinecek kayit yoksa hata mesaji verdirilir. Silinecek kayit normal bölümde ise anahtar degeri sifirlanir, tasma bölümünde ise Pnt degeri bir önceki kaydin Pnt’na tasinir. Silinen kaydin YYN si saklanir. Ekleme islemi mantigi: Ekleme islemi için; Sayi mi?, son sifir mi?, Devami var mi? sorgulamalari yapilarak, eklenecek kayit Dosyada var mi? diye kontrol edilir. son sifir mi? sorgulamasi evet ise sifir anahtarli kaydin Dosyada bulundugu yer saklanir. Eklenecek kayit Dosyada varsa hata mesaji verdirilir. Eklenecek kayit Dosyada yoksa eklenebilir demektir. Eklenecek kayit önce son sifira yoksa, son silinene, yoksa tasmaya yazilir. Eklenecek kaydin Pnt degerine 0 tasinir. Eklenecek kayit son sifira yazildiysa baska bir islem yapilmaz. Eklenecek kayit son silinene yazildiysa, son silinendeki YYN bir önceki kaydin Pnt’ne tasinir ve son silinenin sayaci bir eksiltilir. Eklenecek kayit tasmaya yazildiysa, tasma degeri bir önceki kaydin Pnt’ne tasinir ve tasma degeri 1 arttirilir.. Günleme islemi mantigi: Önce günlenecek kayit bulunur. Günlenecek kayit yoksa hata mesaji verdirilir. Günlenecek kayit bulunduysa günleme islemi yapilir. 3.3.16 Bag Degistirme Modeli (Satir Eleman Kapasitesi 2) (Silme: Bag Degistirme, Ekleme: Ilk sifira, yoksa ilk silinene (pasife), yoksa tasmaya) Ilk yükleme mantigi: Kayitlar gelis sirasina göre her satira 2 kayit olmak üzere yüklenir. Tasmaya giden kayitlar Pnt ile birbirlerine baglanir. Tasma islem mantigi: 3 elemanli bir Dosya için 4,1 ; 4,2 : 5,1 : 5,2 : ... olarak artar. Islem Mantigi: Silme islemi mantigi: Önce silinecek kayit bulunur. Silinecek kayit yoksa hata mesaji verdirilir. Silinecek kayit normal bölümde ise anahtar degeri sifirlanir, tasma bölümünde ise Pnt degeri bir önceki kaydin Pnt’na tasinir. Silinen kaydin YYN si saklanir. Ekleme islemi mantigi: Ekleme islemi için; Sayi mi?, ilk sifir mi?, Devami var mi? sorgulamalari yapilarak, eklenecek kayit Dosyada var mi? diye kontrol edilir. ilk sifir mi? sorgulamasi evet ise sifir anahtarli kaydin Dosyada bulundugu yer saklanir. Eklenecek kayit Dosyada varsa hata mesaji verdirilir. Eklenecek kayit Dosyada yoksa eklenebilir demektir. Eklenecek kayit önce ilk sifira yoksa, ilk silinene, yoksa tasmaya yazilir. Eklenecek kaydin Pnt Ata Önal 52 Veri ve Dosya Isleme degerine 0 tasinir. Eklenecek kayit ilk sifira yazildiysa baska bir islem yapilmaz. Eklenecek kayit ilk silinene yazildiysa, ilk silinendeki YYN bir önceki kaydin Pnt’ne tasinir ve ilk silinenin sayaci bir arttirilir. Eklenecek kayit tasmaya yazildiysa, tasma degeri bir önceki kaydin Pnt’ne tasinir ve tasma degeri 1 arttirilir.. Günleme islemi mantigi: Önce günlenecek kayit bulunur. Günlenecek kayit yoksa hata mesaji verdirilir. Günlenecek kayit bulunduysa günleme islemi yapilir. 3.4 Dogrudan Erisimli Dosya algoritmasi (Silme: Sifirlama, Ekleme: Tasmaya) Algoritma: Silme: Sifirlama, Ekleme: Tasmaya, Normal: 3 satir, Tasma: 4, Yöntem: Bölme Yöntemi SOKU(Skod,Sno,Snot) CALL YYNBUL(Sno,YYN) Skod=1 ise7 1.1 DOKU(YYN)Dno,Dnot,Dpnt Dno=Sno ise DYAZ(YYN)(Sno,Snot,Dpnt) SOKU(Skod,Sno,Snot) Dno<>Sno ise Dpnt=0 ise HATAYAZ(Skod,Sno,Snot) SOKU(Skod,Sno,Snot) Dpnt <>0 ise YYN?Dpnt GIT 1.1 Skod=2 ise 2.1 DOKU(YYN)Dno,Dnot,Dpnt Dno=0 Dpnt=0 ise DYAZ(TASMA)Sno,Snot,Dpnt DYAZ(YYN)Dno,Dnot,TASMA TASMA ? TASMA + 1 SOKU(Skod,Sno,Snot) Dpnt^=0 ise YYN ? Dpnt GIT 2.1 Dno<>0 ise Dno=Sno ise HATAYAZ(Skod,Sno,Snot) SOKU(Skod,Sno,Snot) Dno<>Sno ise Dpnt=0 ise DYAZ(TASMA)Sno,Snot,Dpnt DYAZ(YYN)Dno,Dnot,TASMA TASMA ? TASMA + 1 SOKU(Skod,Sno,Snot) Dpnt<>0 ise YYN ? Dpnt GIT 2.1 Ata Önal Veri ve Dosya Isleme 53 Skod=3 ise 3.1 DOKU(YYN)Dno,Dnot,Dpnt Dno=Sno ise Dno ?0 Dnot? 0 DYAZ(YYN)Dno,Dnot,Dpnt SOKU(Skod,Sno,Snot) Dno<>Sno Dpnt=0 ise HATAYAZ(Skod,Sno,Snot) SOKU(Skod,Sno,Snot) Dpnt<>0 ise YYN?Dpnt GIT 3.1 3.5 Dogrudan Erisimli Dosya Pascal Programi (Silme: Sifirlama, Ekleme: Tasmaya) Bu program dogrudan dosyalar uzerinde silme sifirlama ekleme tasmaya yönteminde gerceklestirilen islemlerin daha iyi kavranmasini saglamak icin yapilmistir. uses crt; type kay=record dno,dnot,dpnt:integer; end; label a,b,c,d,e; var dogru:file of kay; kayit:kay; hata,sakla:text; ino,inot,kod,ddnbes,i,yeddno,yeddnot,yyn,tasma:integer; say:byte; sec:char; procedure yynbul; begin yyn:=ino mod ddnbes; if yyn=0 then yyn:=ddnbes; end; {***************************} begin clrscr; assign(dogru,'DY6067O2.DIR'); assign(hata,'DY6067O2.HAT'); assign(sakla,'DY6067O2.DDN'); with kayit do begin write('Eski dosyaya mi yazilacak E/H:'); readln(sec); Ata Önal 54 A: Veri ve Dosya Isleme if (sec='h') or (sec='H') then begin rewrite(dogru);close(dogru); rewrite(hata);close(hata); rewrite(sakla); write('ddnbes giriniz:'); readln(ddnbes); writeln(sakla,ddnbes); close(sakla); reset(dogru); for i:=1 to ddnbes do begin seek(dogru,i); dno:=0;dnot:=0;dpnt:=0; write(dogru,kayit); end; tasma:=ddnbes+1; close(dogru); end else begin reset(sakla); readln(sakla,ddnbes); close(sakla); reset(dogru); tasma:=filesize(dogru); close(dogru); end; reset(dogru); append(hata); gotoxy(1,6); writeln('DOGRUDAN DOSYA':16); gotoxy(1,7); say:=7; writeln('YYN':4,'NO':6,'NOT':6,'PNT':6); for i:=1 to filesize(dogru) -1 do begin seek(dogru,i); read(dogru,kayit); gotoxy(1,say+i); writeln(i:4,dno:6,dnot:6,dpnt:6); if ddnbes=i then begin say:=8; writeln(' end; end; close(hata); reset(hata); gotoxy(50,6);writeln('HATA DOSYASI':15); Ata Önal '); Veri ve Dosya Isleme B: gotoxy(50,7);writeln('KOD':4,'INO':5,'INOT':6); i:=0; readln(hata,kod,ino,inot); While not eof(hata) do begin i:=i+1; gotoxy(50,7+i);writeln(kod:4,ino:5,inot:6); readln(hata,kod,ino,inot); end; i:=i+1; gotoxy(50,7+i); writeln(kod:4,ino:5,inot:6); close(hata); append(hata); gotoxy(1,2);clreol; gotoxy(1,3);clreol; gotoxy(1,4);clreol; gotoxy(1,2);write('iŸlem giriniz(kod,ino,inot):'); readln(kod,ino,inot); while ((kod<>-1) or (ino<>-1) or (inot<>-1)) do begin yynbul; if kod=1 then begin seek(dogru,yyn); read(dogru,kayit); if dno=ino then begin yeddnot:=dnot; dnot:=inot; seek(dogru,yyn); write(dogru,kayit); dnot:=yeddnot; goto A; end; if dno<>ino then begin if dpnt=0 then begin writeln(hata,kod,' ',ino,' ',inot); goto A; end; if dpnt<>0 then begin yyn:=dpnt; goto B; end; end; end; if kod=2 then Ata Önal 55 56 Veri ve Dosya Isleme C: D: E: Ata Önal begin seek(dogru,yyn); read(dogru,kayit); if dno=0 then begin if dpnt=0 then begin yeddno:=dno; yeddnot:=dnot; dno:=ino; dnot:=inot; seek(dogru,tasma); write(dogru,kayit); dpnt:=tasma; dno:=yeddno; dnot:=yeddnot; seek(dogru,yyn); write(dogru,kayit); tasma:=tasma+1; goto a; end; if dpnt<>0 then begin yyn:=dpnt; goto c; end; end; if dno<>0 then begin if dno=ino then begin writeln(hata,kod,' ',ino,' ',inot); goto a; end; if dno<>ino then begin if dpnt=0 then goto d; if dpnt<>0 then begin yyn:=dpnt; goto c; end; end; end; end; if kod=3 then begin seek(dogru,yyn); read(dogru,kayit); Veri ve Dosya Isleme if dno=ino then begin dno:=0;dnot:=0; seek(dogru,yyn); write(dogru,kayit); goto a; end; if dno<>ino then begin if dpnt=0 then begin writeln(hata,kod,' ',ino,' ',inot); goto a; end; if dpnt<>0 then begin yyn:=dpnt; goto e; end; end; end; gotoxy(1,2);clreol; gotoxy(1,3);clreol; gotoxy(1,4);clreol; gotoxy(1,2);write('iŸlem giriniz(kod,ino,inot):'); readln(kod,ino,inot); end; close(hata); close(dogru); end; end. Ata Önal 57 58 Veri ve Dosya Isleme 3.5.1 Dogrudan Erisimli Dosya Pascal Programinin kullandigi dosyalar (Silme: Sifirlama, Ekleme: Tasmaya) 3 ISLEM KOD 3 2 2 1 2 3 2 1 INO 10 13 14 13 16 14 17 16 INOT 55 60 50 100 25 50 100 100 2 DOGRUDAN DOSYA YYN 1 2 3 4 5 6 7 1.2 HATA DOSYASI KOD 3 Ata Önal INO 10 INOT 55 DNO 0 0 0 13 0 16 17 DNOT 0 0 0 100 0 100 100 DPNT 4 5 0 6 7 0 0 Veri ve Dosya Isleme 3.6 Dogrudan Dosya Program Örnekleri 3.6.1 QBasic Program Örnekleri 3.6.1.1 QBasic Yazma Örnegi: REM Dosya yönetimi dersi dogrudan erisimli Dosyalar için örnek qbasic programi REM Ortam: PC ortami qbasic 4.5 REM Amaç : Ekrandan okunan a ve b sayilarini a kayit numarasi olmak üzere REM dogrudan erisimli olarak dirokub.dat dosyasina yazar. REM 3.11.1994 OPEN "RANOKUB.DAT" FOR RANDOM AS #1 LEN = 40 TYPE yapi a AS INTEGER b AS INTEGER END TYPE DO CLS LOCATE 5, 1 COLOR 14, 1 INPUT "a ve b sayilarini yaziniz..(islem sonu 99,99) ", yapi.a, yapi.b PRINT yapi.a, yapi.b PUT #1, yapi.a, yapi.b LOOP UNTIL yapi.a = 99 CLOSE END 3.6.1.2 QBASIC Okuma Örnegi: REM Dosya yönetimi dersi dogrudan erisimli Dosyalar için örnek qbasic programi REM Ortam: PC ortami qbasic 4.5 REM Ama‡ : Ekrandan okunan kayit numarasina göre dogrudan erisimli ranokub.dat REM dosyasindan kayit bulup ekrana yazar. REM 3.11.1994 OPEN "RANOKUB.DAT" FOR RANDOM AS #1 LEN = 40 TYPE yapi a AS INTEGER b AS INTEGER END TYPE DO INPUT "Kayit numarasini giriniz (islem sonu 99) "; yapi.a PRINT yapi.a GET #1, yapi.a, yapi.b PRINT yapi.a, yapi.b LOOP UNTIL yapi.a = 99 CLOSE END Ata Önal 59 60 Veri ve Dosya Isleme 3.6.1.3 QBASIC Günleme Örnegi: REM Dos ya yönetimi dersi dogrudan erisimli Dosyalar için örnek qbasic programi REM Ortam: PC ortami qbasic 4.5 REM Ama‡ : Ekrandan okunan a ve b sayilarini a kayit numarasi olmak üzere REM dogrudan erisimli olarak ranokub.dat dosyasina yazar. REM 3.11.1994 OPEN "RANOKUB.DAT" FOR RANDOM AS #1 LEN = 40 TYPE yapi1 a AS INTEGER b AS INTEGER END TYPE TYPE yapi2 a AS INTEGER b AS INTEGER END TYPE DO CLS LOCATE 5, 1 COLOR 14, 1 INPUT " a ve b sayilarini yaziniz..(islem sonu 99,99) ", yapi1.a, yapi1.b P RINT "ekrana yazdiginiz sayilar( no, not )", yapi1.a, yapi1.b INPUT "DEVAM için ENTER LÜTFEN", c yapi2.a = yapi1.a GET #1, yapi2.a, yapi2.b PRINT "Dosyada bulunan sayilar( no, not )", yapi2.a, yapi2.b INPUT "not'un günlenebilmesi için ENTER LüTFEN", c yapi2.b = yapi1.b PUT #1, yapi2.a, yapi2.b GET #1, yapi2.a, yapi2.b PRINT "gunleme islemi sonucu( no, not )", yapi2.a, yapi2.b INPUT "devam için ENTER LÜTFEN", c LOOP UNTIL yapi1.a = 99 CLOSE END 3.7 Turbo Pascal Program Örnekleri 3.7.1 Turbo Pascal Y azma Örnegi: { RANYAZ.PAS Dosya yönetimi dersi dogrudan erisimli Dosyalar için örnek pascal programi Ortam: PC ortami turbo pascal 7.00 Ama‡ : Ekrandan okunan a ve b sayilarini a kayit numarasi olmak üzere dogrudan erisimli olarak ranokup.dat dosyasina yazar. 3.11.1994 } uses crt; Ata Önal Veri ve Dosya Isleme TYPE yapi = record a :byte; b :byte; END; var dosya : file of yapi; kayit : yapi; begin clrscr; gotoxy(1,5); assign(dosya,'ranokup.dat'); rewrite(dosya); writeln('a ve b sayilarini yaziniz..(islem sonu 99 99) '); readln(kayit.a,kayit.b); while kayit.a <> 99 do begin seek(dosya,kayit.a); write(dosya,kayit); writeln('a ve b sayilarini yaziniz..(islem sonu 99 99) '); readln(kayit.a,kayit.b); end; close(dosya); end. Turbo Pascal Okuma Örnegi: { RANOKU.PAS Dosya yönetimi dersi dogrudan erisimli Dosyalar için örnek pascal programi Ortam: PC ortami turbo pascal 7.00 Amaç : Ekrandan okunan kayit numarasina göre dogrudan erisimli ranokup.dat dosyasindan kayit bulup ekrana yazar. 3.11.1994 } uses crt; TYPE yapi =record a :byte; b :byte; END; var dosya : file of yapi; kayit : yapi; begin assign(dosya,'ranokup.dat'); reset(dosya); clrscr; gotoxy(1,5); TextAttr := yellow; highvideo; Ata Önal 61 62 Veri ve Dosya Isleme writeln('kayit numarasini giriniz (islem sonu 99) '); read(kayit.a); while kayit.a <> 99 do begin seek(dosya,kayit.a); if not eof(dosya) then begin read(dosya,kayit); writeln(kayit.a,' ',kayit.b); end else writeln('kayit numarasi siniri geçti'); writeln('kayit numarasini giriniz..(islem sonu 99) '); read(kayit.a); end; close(dosya); end. 3.7.2 Turbo Pascal Günleme Örnegi: { RANUPD.PAS Dosya yönetimi dersi dogrudan erisimli Dosyalar için örnek pascal programi Ortam: PC ortami turbo pascal 7.00 Ama‡ : Ekrandan okunan kayit numarasina göre dogrudan erisimli ranokup.dat dosyasindan kayit bulup ekrana yazar. 3.11.1994 } uses crt; TYPE yapi =record a :byte; b :byte; END; var dosya : file of yapi; kayit : yapi; begin assign(dosya,'ranokup.dat'); reset(dosya); c lrscr; gotoxy(1,5); TextAttr := yellow; highvideo; writeln('kayit numarasini giriniz (islem sonu 99) '); readln(kayit.a); while kayit.a <> 99 do begin seek(dosya,kayit.a); read(dosya,kayit); writeln('Su anki kayit:',kayit.a,' ',ka yit.b); writeln('Lütfen güncellenecek sayiyi giriniz:'); Ata Önal Veri ve Dosya Isleme 63 readln(kayit.b); seek(dosya,kayit.a); write(dosya,kayit); writeln(kayit.a,' ',kayit.b); writeln('kayit numarasini giriniz (islem sonu 99) '); readln(kayit.a); end; close(dosya); end. 3.8 Anahtar alfabetik ise; A B C D E F G H I J K L M N O P Q R S T U V W X Y Z a b c d e f g h i j k l m n o p q r s t u v w x y z s S I i ö Ö ü Ü g G ç Ç ‘ . : ; “ ? ! = + * / 1 2 3 4 5 6 7 8 9 Tablosunu kullanarak ekrandan girilen alfabetik bilgiyi sayisala çeviren ve yyn türeten, ekrandan –1 girilmesi durumunda sonlanacak ve sayisal bilgiye göre STRTOINT.DIR dosyasina ve ekrana yazan PASCAL programi. uses crt; type ogr=record sira,say,git:longint; alf:string; end; var dosya:file of ogr; kayit:ogr; a: array[1..9,1..9] of string; tut,kont:array [1..20] of integer; sayi,dd,kal,anah,sa,si,ptr,kont1,i,k,s,d,uz,ddnbes: integer; harfler,al,al1,ke,kel,top:string; ki:longint; label son,ic; begin CLRSCR; {harfler bir dizine aktariliyor.} harfler:='ABCDEFGHIJKLMNOPQR STUVWXYZabcdefghijklmnopqr stuvwxyzsSgGüÜçÇöÖ,.:;"?!=-+*/'; uz:=length(harfler); s:=1;k:=0; for i:=1 to uz do begin Ata Önal 64 Veri ve Dosya Isleme al:=copy(harfler,i,1); k:=k+1; a[k,s]:=al; if k=9 then begin k:=0;s:=s+1; end; end; write('Genel DDNBESyi giriniz...: ');readln(ddnbes); assign(dosya,'strtoint.dir'); rewrite(dosya); kayit.say:=0;kayit.alf:='';kayit.git:=0; for i:=1 to ddnbes do begin kayit.sira:=i; seek(dosya,i); write(dosya,kayit); end; ptr:=ddnbes; while 1=1 do begin top:=''; {bir kelime ve dogrudan dosya normal bolum elemen sayisi girmeniz isteniyor.} write('Kelimeyi giriniz...: ');readln(kel); write('DDNBESyi giriniz...: ');readln(dd); if (kel='-1') then goto son; uz:=length(kel); for i:=1 to uz do begin al:=copy(kel,i,1); kont1:=0; for k:=1 to 9 do begin for s:=1 to 9 do begin al1:=a[k,s]; {girdi§niz kelimeden alinan bir harf dizideki harfe eŸitse o harfe karsilik gelen rakam stringe çevrilip toplaniyor.} if (al1=al) then begin kont1:=1; str(k,ke); top:=top+ke;goto ic; end; end; end; ic:end; val(top,ki,si); kal:=(ki mod dd); if kal=0 then kal:=dd; writeln(' Alfabetik ',' DDNBES ',' Say•sal ',' YYN'); writeln('----------- ',' -------- ',' ---------',' -----'); writeln(' ',kel,' ',dd,' ',ki,' ',kal); writeln; kayit.say:=ki;kayit.alf:=kel; anah:=(kayit.say mod ddnbes); Ata Önal Veri ve Dosya Isleme if anah=0 then anah:=ddnbes; for i:= 1 to ddnbes do begin if (anah=i) and (kont[i]<2) then begin if kont[i]=0 then begin kayit.sira:=anah;kont[i]:=kont[i]+1;kayit.git:=0; seek(dosya,anah); write(dosya,kayit); tut[i]:=anah; end else begin ptr:=ptr+1; kayit.sira:=ptr; kayit.git:=0; seek(dosya,ptr); write(dosya,kayit); seek(dosya,tut[i]); read(dosya,kayit); kayit.git:=ptr; seek(dosya,tut[i]); write(dosya,kayit); tut[i]:=ptr; end; end; end;end; son: close(dosya); assign(dosya,'strtoint.dir'); reset(dosya); clrscr; writeln('Ilk girdiginiz DDNBES numarasina göre siralanmis sekli.'); i:=0; s:=4; writeln(' SIRA ALFABETIK SAYISAL PTR'); Writeln('---------------- -------------'); while not eof(dosya) do begin i:=i+1; seek(dosya,i); read(dosya,kayit); gotoxy(3,s);writeln(kayit.sira);gotoxy(15,s);writeln(kayit.alf); gotoxy(32,s);writeln(kayit.say);gotoxy(50,s);writeln(kayit.git); s:=s+1; if s=ddnbes+4 then begin gotoxy(1,s); writeln('-----------------------------------------------------'); s:=s+1; end; end; close(dosya); readln; end. Ata Önal 65 66 Veri ve Dosya Isleme Ata Önal Veri ve Dosya Isleme 67 BÖLÜM 4 4 Indeks Sirali Dosyalar Dosyadaki kayitlara indeks kullanarak erisim saglayan dosya türlerine indeks sirali dosyalar adi verilmektedir. Bu bölümde, indeks sirali dosyalardan ISAM ve SCOPE MONITOR incelenecektir. 4.1 Indeks Sirali Eris im Yöntemi Indeks Sirali Erisim Yöntemi (Index Sequential Access Method (ISAM)) PRIME AREA'lar ve PRIME AREA INDEX ve PRIME AREA’lar INDEX'den olusan bir yapidir. Ilk yükleme isleminde kayitlar 1.anahtara göre küçükten büyüge sirali olmali ve satir sayis i ve satir elaman kapasitesi verilmelidir. Tasma kayitlari satir sayisindan bir sonraki satirin birinci sütunundan baslar. Satir sayisi: 2 Satir eleman kapasitesi 3 olan bir ISAM yapisi için tasma kayitlari: 3,1 : 3,2 : 3,3 : 4,1 : 4,2 : 4,3 : ... seklinde artar. Asagidaki örnekler ilk yükleme islemleri için verilmistir. ÖRNEK-1: Ilk Yükleme sayilari: 1,2,3,4,5,6 Satir sayisi: 2 Satir eleman kapasitesi: 3 BLOK INDEKS’lerin INDEKS’i 6,1 1.BLOK INDEKS N 3,1 T 3,1 1.BLOK Tasma: 3,1 1 4 N 6,2 2 5 T 6,2 3 6 ÖRNEK-2: Ilk Yükleme Sayilari: 1,2,3,4,5,6,7,8,9,10,11,12 Satir sayisi: 2 Satir eleman kapasitesi: 3 BLOK INDEKS’lerin INDEKS’i 6,1 12,2 1.BLOK INDEKS N 3,1 N 6,2 T 3,1 T 6,2 Ata Önal 68 Veri ve Dosya Isleme 1.BLOK Tasma: 3,1 1 4 2.BLOK INDEKS N 9,1 2 5 3 6 N T N 9,1 12,2 12,2 2.BLOK Tasma: 3,1 7 10 8 11 T 9 12 ÖRNEK-3: Ilk Yükleme Sayilari: 1,2,3,4,5,6,7,8,9,10,11,12 Satir sayisi: 3 Satir eleman kapasitesi: 3 BLOK INDEKS’lerin INDEKS’i 9,1 12,2 1.BLOK INDEKS Tasma: 3,1 N T 3,1 3,1 T 6,2 N 6,2 N 9,3 T 9,3 1.BLOK 1 4 7 2.BLOK INDEKS N 12,1 2.BLOK Tasma: 3,1 10 Ata Önal 2 5 8 T 12,1 11 3 6 9 N T 12 Veri ve Dosya Isleme 4.1.1 ISAM (Prime Area'ya Ekleme Algoritmasi) IS-PRIME-INSERT Repeat for j <- 1,2,...,m; If key of prime-rec(addr,j) = key of trans -rec Then Print 'Same key' and EXIT. If key of prime-rec(addr,j) > key of trans -rec Then save < - key of prime-rec(addr,j) key of prime-rec(addr,j) < - key of trans -rec key of trans-rec <- save Set addr to beginning of the next prime-track record. normal key of trk-index(addr) <- key of prime-rec(addr,j-1) newloc < - ovflow-avail and update ovflow -avail pointer. write key and info of trans -rec on master file at location newloc. ovflow -addr of trk-index(addr) <- newloc link of ovflow-rec(newloc) <- addr. Ata Önal 69 70 Veri ve Dosya Isleme 4.1.1.1 ISAM (PRIME AREA'ya EKLEME ALGORITMASI'nin TEST edilmesi) IS-PRIME-INSERT algoritmasini kullanarak asagidaki ISAM yapisina 15 eklenmesi durumunu adim adim inceliyelim. ISAM yapisi. 30,1 30,1 60,2 60,2 <- track index ; 3,1 <- ovflow-avail 10 20 30 40 50 60 <- prime area ISAM yapisina 15 eklenmesi durumunda IS-PRIME-INSERT algoritmasinin adim adim incelenmesi. addr j ****1***** key of prime-rec(addr,j) ? key of trans -rec *2* save <- key of prime-rec(addr,j) *3* key of prime-rec(addr,j) <- key of trans -rec *4* key of trans-rec <- save ---- - ---------- --- --- --1 1 10 = 15 H 10 > 15 H 1 2 20 = 15 H 20 > 15 E 20 15 20 1 3 30 = 20 H 30 > 20 E 30 20 30 *5* normal key of trk-index(addr) <- key of prime-rec(addr,j-1) *6* newloc <- ovflow-avail *7* and update ovflow -avail pointer *8* write key and info of trans -rec on master at loc.newloc *9* ovflow -addr of trk-index(addr) <- newloc *10* link of ovflow-rec(newloc) <- addr. --- --- --- --- --- ---25 3,1 3,2 30 3,1 1 ISAM yapisina 15 eklendikten sonraki görünüm. 20,1 30,3,1 60,2 60,2 <- track index ; 3,2 <- ovflow -avail 10 15 20 40 50 60 30,1 Ata Önal <- prime area Veri ve Dosya Isleme 4.1.2 ISAM ilk yükleme Pascal programi uses crt; var dizi:array [1..20,1..20,1..20] of integer; a,paii: array [1..50] of integer; pai: array[1..9,1..10] of integer; sa,su,s1,s2,z,k,l,kont,say,asay,pasay,sayi,x,i,j:integer; label ara,yeni,son; begin clrscr; write('Satir eleman sayisini giriniz...: ');readln(sa); write('Sutun eleman sayisini giriniz...: ');readln(su); writeln(‘Durmak icin –1 girin’); {-1 girilinceye kadar sayilari ekrandan okuturuz.} while 1=1 do begin yeni:write('Sayiyi giriniz...: ');readln(sayi); for i:=1 to say do begin if a[i]=sayi then goto yeni; end; if sayi= -1 then break; say:=say+1; a[say]:=sayi; end; {Sayilar küçükten büyüge siralanir.} for i:=1 to say-1 do begin for j:=i+1 to say do begin if a[j]<a[i] then begin x:=a[i]; a[i]:=a[j]; a[j]:=x end; end; end; while 1=1 do begin pasay:=pasay+1;z:=0; for i:=1 to sa do begin for j:=1 to su do begin asay:=asay+1; dizi[pasay,i,j]:=a[asay]; if asay=say then begin kont:=1;goto ara; end; end; end; ara:for i:=1 to sa do begin for k:=1 to 2 do begin z:=z+1; for j:=su downto 1 do begin Ata Önal 71 72 Veri ve Dosya Isleme if dizi[pasay,i,j]<>0 then begin pai[pasay,z]:=dizi[pasay,i,j]; paii[pasay]:=dizi[pasay,i,j]; break; end; end; z:=z+1;pai[pasay,z]:=i; end; end; if kont=1 then goto son; end; son:clrscr; write('Prime Area Ust Indexi: '); for i:=1 to pasay do write(paii[i],',',i,' ');s1:=3; for i:=1 to pasay do begin gotoxy(1,s1);write(i,'. Prime Area Indexi'); s1:=s1+1; s2:=0; for j:=1 to z do begin s2:=s2+3; gotoxy(s2,s1);write(pai[i,j]); end; s1:=s1+2;gotoxy(1,s1);write(i,'. Prime Area'); for k:=1 to sa do begin s1:=s1+1;s2:=0; for l:=1 to su do begin s2:=s2+5;gotoxy(s2,s1);write(dizi[i,k,l],' '); end; end; s1:=s1+2; end; readln; end. Ata Önal Veri ve Dosya Isleme 4.2 Scope Monitor Data Blok (DB), S ilindir Indeks Blok (SIB) ve Master Blok (MB) dan olusan bir yapidir. DB, SIB ve MB Doluluk Oranlari (DO) belirtilmelidir. DBDO (M/N)'ün anlami, her DB, N elemandan olusmakta olup ilk yükleme ve bölme islemlerinde sadece M tane kayit yüklenebilir demektir. Ilk Yükleme isleminde kayitlar 1.anahtara göre küçükten büyüge sirali olmali, DBDO, SIBDO verilmelidir. MBDO n/n kabul edilir. Scope Monitor genel yapisi asagidaki gibidir. 1.MODEL MB 1,SIB1 . . . N-1,SIBN SIB1 1,DB1 3,DB2 . . . SIBN N-1 X DB1 1 2 DB2 3 4 . . . DBN N-1 N Ata Önal 73 74 Veri ve Dosya Isleme - ÖRNEK-1: (1.MODEL) DB doluluk orani 2/3, SIB doluluk orani 2/3, MB doluluk orani n/n. Ilk yükleme sayilari: 1,2,3,4,5,6 olduguna göre; SCOPE MONITOR Dosya yapisini olusturunuz. Scope Monitor DB, SIB ve MB modelleri asagidaki gibi dir. 1,2,3,4,5,6 sayilarinin yüklenmesi durumunda asagidaki tablolar olusur. Ata Önal Veri ve Dosya Isleme 75 ÖRNEK-2 (2.MODEL) DB doluluk orani 2/3, SIB doluluk orani 2/3, MB doluluk orani n/n. Ilk yükleme sayilari: 1,2,3,4,5,6 olduguna göre; SCOPE MONITOR Dosya yapisini olusturunuz. MB SiraNo 1 1,SIB1 2 5,SIB2 SIB SiraNo 1 2 SiraNo 1 2 3 1,DB1 5,DB3 3,DB2 X IlkSira 1 3 5 DB IkinciSira 2 4 6 - ÜçüncüSira - ÖRNEK-3: (1.MODEL) DB doluluk orani 3/4, SIB doluluk orani 2/3, MB doluluk orani n/n. Ilk yükleme sayilari: 1,2,3,4,5,6 olduguna göre; SCOPE MONITOR Dosya yapisini olusturunuz. MB SIB1,1 SIB1 DB1,1 DB2,4 DB1 1 2 3 DB2 4 5 6 - Ata Önal 76 Veri ve Dosya Isleme ÖRNEK-4: (2.MODEL) DB doluluk orani 3/4, SIB doluluk orani 2/3, MB doluluk orani n/n. Ilk yükleme sayilari: 1,2,3,4,5,6 olduguna göre; SCOPE MONITOR Dosya yapisini olusturunuz. MB 1 1,SIB1 SIB 4,DB2 1 1,DB1 1 1 2 4 Ata Önal 2 5 DB 3 6 - - Veri ve Dosya Isleme 4.2.1 Scope Monitör Pascal Programi (Örnek-1): uses crt; label a,b,c; type tip=array[1..10,1..2] of integer; tipmb=array[1..25,1..2] of integer; var ddz,ekdz,sdz:tip; mdz:tipmb; db,sib:file of tip; mb:file of tipmb; bul,sut,ilk,ilknt,enk,enknt,ds,dxs,ss,sxs,i,j,no,nt,k,gitdb,gitsib,ydno,ydnt,islem,skon:integer; dur:char; procedure gunle; begin reset(db);rewrite(sib); sut:=0; for i:=1 to ss do sdz[i,1]:= -9; for i:=1 to sxs do sdz[i,1]:= -8; for j:=0 to filesize(db) -1 do begin seek(db,j); read(db,ddz); if (ddz[1,1]=-8) or (ddz[1,1]=-9) then enk:=500 else enk:=ddz[1,1]; for k:=1 to ds do begin if (ddz[k,1]<enk) and (ddz[k,1]<>-8) and (ddz[k,1]<>-9) then begin enk:=ddz[k,1]; enknt:=ddz[k,2]; end; end; if enk<>500 then begin sut:=sut+1; sdz[sut,1]:=enk; sdz[sut,2]:=filepos(db); if sut=sxs then begin write(sib,sdz); for i:=1 to ss do sdz[i,1]:= -9; for i:=1 to sxs do sdz[i,1]:= -8; sut:=0; end else begin if j=filesize(db) -1 then write(sib,sdz); end; end; Ata Önal 77 78 Veri ve Dosya Isleme end; close(sib); reset(sib);rewrite(mb); for i:=0 to 25 do mdz[i,1]:=0; for i:=0 to filesize(sib)-1 do begin seek(sib,i); read(sib,sdz); enk:=sdz[1,1]; enknt:=sdz[1,2]; for k:=1 to ss do begin if (sdz[k,1]<enk) and (sdz[k,1]< >-8) and (sdz[k,1]<>-9) then enk:=sdz[k,1]; end; mdz[i+1,1]:=enk; mdz[i+1,2]:=filepos(sib); end; write(mb,mdz); close(mb); reset(mb); end; procedure siralasib; label h; begin reset(sib); for i:=1 to filesize(sib) do begin read(sib,sdz); for j:=1 to 10 do begin if (sdz[j,1]=0) or (sdz[j,1]=-8) or (sdz[j,1]= -9) then goto h; ilk:=sdz[j,1]; enk:=ilk; ilknt:=sdz[j,2]; enknt:=sdz[j,2]; for k:=j+1 to 10 do begin if (sdz[k,1]<enk) and (sdz[k,1]<>0) and (sdz[k,1]<>-8) and (sdz[k,1]<>-9) then begin enk:=sdz[k,1]; sdz[k,1]:=ilk; ilk:=sdz[k,1]; enknt:=sdz[k,2]; sdz[k,2]:=ilknt; ilknt:=sdz[k,2]; end; end; sdz[j,1]:=enk; Ata Önal Veri ve Dosya Isleme h: sdz[j,2]:=enknt; end; seek(sib,filepos(sib) -1); write(sib,sdz); end; end; procedure siralamb; label h; begin reset(mb); read(mb,mdz); for j:=1 to 25 do begin if (mdz[i,1]=0) or (mdz[i,1]=-5) or (mdz[i,1]=-8) or (mdz[i,1]=-9) then goto h; ilk:=mdz[j,1]; enk:=ilk; ilknt:=mdz[j,2]; enknt:=mdz[j,2]; for k:=j+1 to 10 do begin if (mdz[k,1]<enk) and (mdz[k,1]<>0) and (mdz[k,1]<>-8) and (mdz[k,1]<>-9) then begin enk:=mdz[k,1]; mdz[k,1]:=ilk; ilk:=mdz[k,1]; enknt:=mdz[k,2]; mdz[k,2]:=ilknt; ilknt:=mdz[k,2]; end; end; mdz[j,1]:=enk; mdz[j,2]:=enknt; end; h: seek(mb,filepos(mb)-1); write(mb,mdz); end; procedure gosterdb; begin writeln; for i:=0 to filesize(db)-1 do begin writeln('_____',i+1,'.DB_____'); seek(db,i); read(db,ddz); for j:=1 to 10 do begin if ddz[j,1]<>0 then begin Ata Önal 79 80 Veri ve Dosya Isleme case ddz[j,1] of -8:writeln('sayi..:','*',' notu...:','*'); -9:writeln('sayi..:','-',' notu...:',' -'); else writeln('sayi..:',ddz[j,1],' notu...:',ddz[j,2]); end; end; end; dur:=readkey; end; end; procedure gostersib; begin writeln; for i:=0 to filesize(sib)-1 do begin writeln('_____',i+1,'.SIB_____'); seek(sib,i); read(sib,sdz); for j:=1 to 10 do begin if sdz[j,1]<>0 then begin case sdz[j,1] of -8:writeln('sib sayi..:','*',' Db...:','*'); -9:writeln('sib sayi..:',' -',' Db...:','-'); else writeln('sib sayi..:',sdz[j,1],' Db...:',sdz[j,2]); end; end; end; dur:=readkey; end; end; procedure gostermb; begin writeln('_____MB_____'); reset(mb);read(mb,mdz); for i:=1 to 25 do begin if mdz[i,1]<>0 then writeln('mb sayi..:',mdz[i,1],' sib...:',mdz[i,2]); end; dur:=readkey; end; procedure gunleme; label c; begin Ata Önal Veri ve Dosya Isleme bul:=0; reset(db); for i:=1 to filesize(db) do begin read(db,ddz); for j:=1 to 10 do begin if ddz[j,1]=no then begin bul:=1; ddz[j,2]:=nt; seek(db,filepos(db) -1); write(db,ddz); goto c; end; end; end; c:if bul=0 then begin writeln('Kayit bulunamadi...!'); dur:=readkey; end; end; procedure ekleme; label e,d,f,g,h; begin reset(mb); read(mb,mdz); if mdz[1,1]=no then begin writeln('Kayit var eklenemez !'); exit; end; if mdz[1,1]>no then begin gitdb:=1; goto e; end; for i:=25 downto 1 do begin if mdz[i,1]<>0 then begin if mdz[i,1]=no then begin writeln('Kayit var eklenemez !'); exit; end; if no>mdz[i,1] then begin gitsib:=mdz[i,2]; goto d; end; end; end; d: seek(sib,gitsib-1); read(sib,sdz); for i:=10 downto 1 do begin if (sdz[i,1]<>0) and (sdz[i,1]<>-8) and (sdz[i,1]<>-9) then begin if sdz[i,1]=no then begin writeln('Kayit var eklenemez !'); exit; end; if no>sdz[i,1] then begin gitdb:=sdz[i,2]; goto e; end; Ata Önal 81 82 Veri ve Dosya Isleme end; end; e: seek(db,gitdb-1); read(db,ddz); for sut:=1 to 10 do begin if ddz[sut,1]=no then begin writeln('Kayit var eklenemez !'); exit; end; if no>ddz[sut,1] then begin ekdz[sut,1]:=ddz[sut,1]; ekdz[sut,2]:=ddz[sut,2]; end; if (no<ddz[sut,1]) or (ddz[sut,1]= -8) or (ddz[sut,1]=-9) or (ddz[sut,1]=0) then begin ekdz[sut,1]:=no; ekdz[sut,2]:=nt; ekdz[sut+1,1]:=ddz[sut,1]; ekdz[sut+1,2]:=ddz[sut,2]; for j:=sut+1 to 10 do begin ekdz[j+1,1]:=ddz[j,1]; ekdz[j+1,2]:=ddz[j,2]; end; goto f; end; end; f: g: if (ekdz[ds+1,1]=0) or (ekdz[ds+1,1]= -8) or (ekdz[ds+1,1]=-9) then begin for k:=1 to ds do ddz[k,1]:= -9; for k:=1 to dxs do ddz[k,2]:=-8; for k:=1 to ds do begin if (ekdz[k,1]=0) or (ekdz[k,1]=-8) or (ekdz[k,1]= -9) then break; ddz[k,1]:=ekdz[k,1]; ddz[k,2]:=ekdz[k,2]; end; seek(db,filepos(db) -1); write(db,ddz); exit; end else begin sut:=0; for k:=1 to ds do ddz[k,1]:=-9; for k:=1 to dxs do ddz[k,2]:=-8; for k:=1 to dxs do begin sut:=sut+1; Ata Önal Veri ve Dosya Isleme h: if (ekdz[sut,1]=0) or (ekdz[sut,1]=-8) or (ekdz[sut,1]=-9) then goto h; ddz[k,1]:=ekdz[sut,1]; ddz[k,2]:=ekdz[sut,2]; end; if sut=dxs then begin seek(db,filepos(db)-1); write(db,ddz); goto g; end; seek(db,filesize(db)); write(db,ddz); goto g; if k<>1 then begin seek(db,filesize(db)); write(db,ddz); end; end; end; procedure silme; label c; begin bul:=0; reset(db); for i:=1 to filesize(db) do begin read(db,ddz); for j:=1 to 10 do begin if ddz[j,1]=no then begin bul:=1; if j<=dxs then ddz[j,1]:= -8 else ddz[j,1]:= -9; seek(db,filepos(db) -1); write(db,ddz); goto c; end; end; end; c: if bul=0 then begin writeln('Kayit bulunamadi...!'); dur:=readkey; end; end; begin assign(db,'dy6051o3.db'); assign(sib,'dy6051o3.sib'); assign(mb,’dy6051o3.mb'); clrscr; Ata Önal 83 84 Veri ve Dosya Isleme write('data blok satir sayisi...:');readln(ds); write('data blok x sayisi.......:');readln(dxs); write('silindir index satir sayisi...:');readln(ss); write('silindir index x sayisi.......:');readln(sxs); rewrite(db); b: for i:=1 to ds do ddz[i,1]:=-9; for i:=1 to dxs do ddz[i,1]:= -8; for i:=1 to dxs do begin write('Ilk yukleme sayilarini girin..(cikis=-1).:');readln(no) ; if no=-1 then begin if (i<>1) then write(db,ddz); goto a; end; ddz[i,1]:=no; end; if i<>1 then write(db,ddz); goto b; a: close(db); reset(db);rewrite(sib); for i:=1 to ss do sdz[i,1]:= -9; for i:=1 to sxs do sdz[i,1]:= -8; skon:=1; for j:=0 to filesize(db) -1 do begin seek(db,j); read(db,ddz); sdz[skon,1]:=ddz[1,1]; sdz[skon,2]:=filepos(db); skon:=skon+1; if j=filesize(db) -1 then begin goto c; end; if skon=sxs+1 then begin write(sib,sdz); for i:=1 to ss do sdz[i,1]:= -9; for i:=1 to sxs do sdz[i,1]:= -8; skon:=1; end; end; c: write(sib,sdz); close(sib); reset(sib);rewrite(mb); for i:=0 to filesize(sib)-1 do begin seek(sib,i); read(sib,sdz); mdz[i+1,1]:=sdz[1,1]; mdz[i+1,2]:=filepos(sib); end; write(mb,mdz); close(mb); reset(mb); repeat Ata Önal Veri ve Dosya Isleme gosterdb; gostersib; gostermb; write('Islemi Girin...(cikis=-1).:');readln(islem); writeln; if islem=-1 then halt; write('Noyu Girin......:');readln(no); case islem of 1:begin write('Notu Girin......:');readln(nt); gunleme; end; 2:begin write('Notu Girin......:');readln(nt); ekleme; gunle; siralasib; siralamb; end; 3:begin silme; gunle; siralasib; siralamb; end; end; until islem=-1; end. Ata Önal 85 86 Veri ve Dosya Isleme 4.2.2 Scope Monitor Pascal P rogrami (Örnek-2): uses crt; type ogr=record no1,no2,db,not1:array [1..20] of integer; no3,sib:integer; end; var dosya1,dosya2,dosya3:file of ogr; kayit1,kayit2,kayit3:ogr; satir,sutun,notu,kontrol,no,kod,kont,say,a,b,c,d,dbs,dbts,s,x,j:integer; temp,mp,sibs,sibts,k,m,sayi,i,saydb,saysib,saymb:integer; dizi1,dizi,ano,anot:array [1..50] of integer; label ana,bas; begin assign(dosya1,'db.dat');rewrite(dosya1); assign(dosya2,'sib.dat');rewrite(dosya2); assign(dosya3,'mib.dat');rewrite(dosya3); clrscr;i:=0; write('Ilk yuklemede kullanilacak satir sayisi : ');readln(dbs); write('Toplam satir sayisi : ');readln(dbts); write('Silindir index ilk yuklemede kullanilacak satir sayisi : ');readln(sibs); write('Silindir index toplam satir sayisi : ');readln(sibts); for k:=1 to sibts+1 do begin kayit2.db[k]:=0;kayit2.no2[k]:=0; end; {No –1 girilinceye no ve not okumaya kadar devam eder} while 1=1 do begin ana:write('Noyu giriniz: ');readln(sayi); for k:=1 to i do begin if sayi=dizi1[k] then goto ana; end; if sayi=-1 then break; write('Notu giriniz: ');readln(notu); i:=i+1; dizi1[i]:=sayi;dizi[i]:=notu; end; {Girdigimiz no ve notlari noya göre küçükten büyüge siralar} for m:=1 to i-1 do begin for j:=m+1 to i do begin if dizi1[j]<dizi1[m] then begin x:=dizi1[m];temp:=dizi[m]; dizi1[m]:=dizi1[j];dizi[m]:=dizi[j]; dizi1[j]:=x;dizi[j]:=temp; end; end; end; for j:=1 to i do begin Ata Önal Veri ve Dosya Isleme 87 say:=say+1; kayit1.no1[say]:=dizi1[j];kayit1.not1[say]:=dizi[j]; if (say=dbs) or (i-j=0) then begin say:=0;s:=s+1; saydb:=saydb+1; seek(dosya1,saydb); write(dosya1,kayit1); kayit2.no2[s]:=kayit1.no1[1];kayit2.db[s]:=saydb; if (s=sibs) or (i-j=0) then begin {Sib’in elemanlari olusturuluyor.} saysib:=saysib+1;s:=0; seek(dosya2,saysib); write(dosya2,kayit2); kayit3.no3:=kayit2.no2[1];kayit3.sib:=saysib; for k:=1 to sibts do begin kayit2.no2[k]:=0;kayit2.db[k]:=0; end; saymb:=saymb+1;seek(dosya3,saymb); write(dosya3,kayit3); end; for k:=1 to dbts do begin kayit1.no1[k]:=0;kayit1.not1[k]:=0; end; end; end; while 1=1 do begin bas: {Ekrana yazdirma bölümü} clrscr;sutun:=2; for m:=1 to saydb do begin satir:=1; seek(dosya1,m);read(dosya1,kayit1); for k:=1 to dbts do begin if kayit1.no1[1]<>0 then begin gotoxy(sutun,satir);write(kayit1.no1[k],',',kayit1.not1[k]); satir:=satir+1; end; end; if kayit1.no1[1]<>0 then begin gotoxy(sutun,satir);write('DB-',m);sutun:=sutun+15; end; end; sutun:=2;x:=7; for m:=1 to saysib do begin satir:=x; seek(dosya2,m);read(dosya2,kayit2); for k:=1 to sibts do begin if kayit2.no2[1]<>0 then begin gotoxy(sutun,satir);write(kayit2.no2[k],', DB-',kayit2.db[k]); satir:=satir+1; end; end; if kayit2.no2[1]<>0 then begin gotoxy(sutun,satir);write('SIB-',m);sutun:=sutun+15; end; end; Ata Önal 88 Veri ve Dosya Isleme satir:=x; for m:=1 to saymb do begin seek(dosya3,m);read(dosya3,kayit3); if kayit3.no3<>0 then gotoxy(sutun,satir);write(kayit3.no3,', Sib',kayit3.sib); satir:=satir+1; end; gotoxy(sutun,satir);write('MIB'); if kont=2 then begin gotoxy(3,20);write('Kayit bulunamadi...'); kont:=0; end; if kont=3 then begin gotoxy(3,20);write('Kayit zaten var...'); kont:=0; end; gotoxy(1,22);write('Kod..: ');read(kod); if kod=-1 then break; gotoxy(1,23);write('No...: ');read(no); gotoxy(1,24); write('Not..: ');read(notu); gotoxy(1,20);write(' '); {Güncelleme isleminin yapildigi bölüm} if kod=1 then begin for m:=1 to saymb do begin seek(dosya3,m);read(dosya3,kayit3); if kayit3.no3<=no then begin seek(dosya2,kayit3.sib);read(dosya2,kayit2); for j:=1 to sibts do begin if kayit2.no2[j]<=no then begin seek(dosya1,kayit2.db[j]);read(dosya1,kayit1); for k:=1 to dbts do begin if kayit1.no1[k]=no then begin kayit1.not1[k]:=notu; seek(dosya1,kayit2.db[j]);write(dosya1,kayit1); kont:=0;goto bas; end else begin kont:=2; end; end; end; end; end; end; end; {Ekleme isleminin yapildigi bölüm} if kod=2 then begin for m:=saymb downto 1 do begin seek(dosya3,m);read(dosya3,kayit3); if kayit3.no3<no then begin seek(dosya2,kayit3.sib);read(dosya2,kayit2); for j:=sibts downto 1 do begin if (kayit2.no2[j]<=no) and (kayit2.no2[j]<>0) then begin kontrol:=0; seek(dosya1,kayit2.db[j]);read(dosya1,kayit1); for d:=1 to dbts do begin Ata Önal Veri ve Dosya Isleme 89 if kayit1.no1[d]=no then begin kont:=3; goto bas; end; if kayit1.no1[d+1]=0 then i:=1; if kayit1.no1[dbts]<>0 then begin kayit1.no1[dbts+1]:=no;kayit1.not1[dbts+1]:=notu; for a:=1 to dbts do begin for b:=a+1 to dbts+1 do begin if (kayit1.no1[b]<kayit1.no1[a]) then begin x:=kayit1.no1[a];temp:=kayit1.not1[a]; kayit1.no1[a]:=kayit1.no1[b];kayit1.not1[a]:=kayit1.not1[b]; kayit1.no1[b]:=x;kayit1.not1[b]:=temp; end; end; end; for a:=1 to dbts+1 do begin ano[a]:=kayit1.no1[a]; anot[a]:=kayit1.not1[a]; end; b:=0; for a:=1 to dbts+1 do begin b:=b+1; kayit1.no1[b]:=ano[a];kayit1.not1[b]:=anot[a]; if (b=dbs) or (dbts+1 -a=0) then begin for mp:=b+1 to dbts do begin kayit1.no1[mp]:=0;kayit1.not1[mp]:=0; end; b:=0; if kontrol=0 then begin seek(dosya1,kayit2.db[j]);write(dosya1,kayit1); kontrol:=1; end else begin c:=c+1; saydb:=saydb+1; seek(dosya1,saydb); write(dosya1,kayit1); kayit2.no2[c]:=kayit1.no1[1]; for mp:=1 to sibts do begin for b:=mp+1 to sibts+1 do begin if (kayit2.no2[mp]<>0) and (kayit2.no2[b]<kayit2.no2[mp]) then begin x:=kayit2.no2[mp];temp:=kayit2.db[mp]; kayit2.no2[mp]:=kayit2.no2[b];kayit2.db[mp]:=kayit2.db[b]; kayit2.no2[b]:=x;kayit2.db[b]:=temp; end; end; end; if (c=sibs) or (i-j=0) then begin Ata Önal 90 Veri ve Dosya Isleme c:=0; if kontrol<>2 then begin seek(dosya2,kayit3.sib);write(dosya2,kayit2); kontrol:=2; end else begin saysib:=saysib+1; seek(dosya2 ,saysib); write(dosya2,kayit2); end; kayit3.no3:=kayit2.no2[1];kayit3.sib:=saysib; for k:=1 to sibts do begin kayit2.no2[k]:=0;kayit2.db[k]:=0; end; saymb:=saymb+1;seek(dosya3,saymb); write(dosya3,kayit3); if dbts+1-a=0 then goto bas; end; end; if (dbts+1)-a=0 then goto bas; end; end; goto bas; end else begin if ((kayit1.no1[d]<no) and (kayit1.no1[d+1]>no)) or (i=1) then begin x:=kayit1.no1[d+1];temp:=kayit1.not1[d+1]; kayit1.no1[d+1]:=no;kayit1.not1[d+1]:=notu; for a:=d+2 to dbts do begin kayit1.not1[a]:=x;kayit1.no1[a]:=temp; x:=kayit1.no1[a+1];temp:=kayit1.not1[a+1]; end; seek(dosya1,kayit2.db[j]);write(dosya1,kayit1); kayit2.no2[j]:=kayit1.no1[1]; seek(dosya2,kayit3.sib);write(dosya2,kayit2); kont:=0;goto bas; end; end; end; end; end; end; end; end; {Silme isleminin yapildigi bölüm} if kod=3 then begin for m:=1 to saymb do begin seek(dosya3,m);read(dosya3,kayit3); if kayit3.no3<=no then begin seek(dosya2,kayit3.sib);read(dosya2,kayit2); for j:=1 to sibts do begin if kayit2.no2[j]<=no then begin seek(dosya1,kayit2.db[j]);read(dosya1,kayit1); for k:=1 to dbts do begin Ata Önal Veri ve Dosya Isleme if kayit1.no1[k]=no then begin kayit1.not1[k]:=0;kayit1.no1[k]:=0; for a:=k to dbts do begin kayit1.not1[a]:=0;kayit1.no1[a]:=0; kayit1.no1[a]:=kayit1.no1[a+1];kayit1.not1[a]:=kayit1.not1[a+1]; end; seek(dosya1,kayit2.db[j]);write(dosya1,kayit1); kayit2.no2[j]:=kayit1.no1[1]; if kayit1.no1[1]=0 then kayit2.db[j]:=0; seek(dosya2,kayit3.sib);write(dosya2,kayit2); kayit3.no3:=kayit2.no2[1]; if kayit2.no2[1]=0 then kayit3.sib:=0; seek(dosya3,m);write(dosya3,kayit3); kont:=0;goto bas; end else begin kont:=2; end; end; end; end; end; end; end; end; readln; end. Ata Önal 91 92 Veri ve Dosya Isleme Ata Önal BÖLÜM 5 5 Görüntü Bellek Erisimli Dosyalar Görüntü Bellek Erisimli Dosyalar (Virtual Storage Access Method (VSAM)) Data Bloklar, Data Bloklarin Indeksleri ve Data Blok Indekslerin Indeksinden olusan bir dosya yapisidir. 5.1 Data Bloklar Data Bloklar en alt seviye bloklardir. Data bloklarda kayitlar bulunur. Data bloklar bir ya da daha çok bloktan olusabilir. Bir data blok satirlar ve sütunlardan olusur. Satirlar ve sütunlar ise doluluk oranlari ile temsil edilir. 5.2 Data Blok Satir Doluluk Orani Data Blok Satir Doluluk Orani; K / L dir. L, data bloktaki satir sayisini, K ise ilk yükleme islemi sirasinda kullanilabilen satir sayisini belirtir. Data Blok Satir Doluluk Orani 2/4 ise, asagidaki gibi 4 satir olarak temsil edilir. X’lerle belirtilen ilk 2 satir ilk yükleme islemi sirasinda kullanilabilen kayit yerlesim yerleridir. –‘lerle belirtilen son iki satir ise ekleme islemi sirasinda kullanilir. X X 5.3 Data Blok Sütün Doluluk Orani Data Blok Sütün Doluluk Orani; M / N dir. N, bir Data Bloktaki sütün sayisini, M ise ilk yükleme ve blok bölünmesi islemi sirasinda kullanilabilen sütün sayisini belirtir. Data Blok Sütün Doluluk Orani 3/5 ise, asagidaki gibi 5 sütün olarak temsil edilir. X’lerle belirtilen ilk 3 sütun ilk yükleme, satir bölme ve blok bölme islemleri sirasinda kullanilabilen kayit yerlesim yerleridir. –‘lerle belirtilen son 2 sütun ise ekleme islemi sirasinda kullanilir. X X X - - 5.4 Data Blok Satir ve Sütün Doluluk Orani Data Blok, Satir Doluluk Orani K / L ve Sütun Doluluk Orani M / N dir. 94 Veri ve Dosya Isleme L*N, data bloktaki toplam kayit sayisidir. K*M, data bloka ilk yükleme ve blok bölme islemleri sirasinda kullanilabilen kayit yerlesim yeri sayisidir. L*N – K*M ise, ekleme islemi sirasinda kullanilan kayit yerlesim yeri sayisidir. Data Blok Satir Doluluk Orani 2/4, Data Blok Sütün Doluluk Orani 3/5‘in temsil edilmesi asagidaki gibidir. Burada, ilk yükleme islemi sirasinda X’lerle belirtilen 6 yerlesim yeri, ekleme islemi sirasinda ise, –‘lerle belirtilen 14 yerlesim yeri kullanilir. X X 5.5 X X - X X - - - Data Bloka Ilk Yükleme Islemi Data bloka ilk yükleme islemi için data blok satir ve sütün doluluk oranlari ile ilk yükleme sayilari verilmelidir. Ilk yükleme sayilari küçükten büyüge sirali ve her bir kayittan bir tane olmalidir. Ilk yükleme islemi sirasinda data bloktaki X’ler kullanilir. Kayitlar, önce data bloktaki 1.satira, sonra 2.satira ve daha sonra da diger satirlara sirasiyla yerlestirilir. Örnek-1: Data blok satir doluluk orani 2/3, data blok sütun doluluk orani 2/3 ve ilk yükleme kayitlari: 10, 20, 30, 40 olmasi durumda ilk yükleme islemi asagidaki gibi gerçeklesir. Ilk iki kayit olan 10, 20 birinci satira, sonraki iki kayit olan 30, 40 ikinci satira yerlesir. Data Blok 10 30 - 5.6 20 40 - - Data Blok Indeksi Data Blok Indeksi, data bloktaki her satirin en büyük anahtari ve satir numarasindan olusur. Örnek-2: Data blok satir doluluk orani 3/5, data blok sütun doluluk orani 2/3 ve ilk yükleme kayitlari: 10, 20, 30, 40, 50, 60,70, 80 olmasi durumda ilk yükleme islemi asagidaki gibi gerçeklesir. Ilk üç kayit olan 10, 20, 30 data blokun birinci satirina, sonraki 3 kayit olan 40, 50, 60 data blokun 2.satirina, daha sonraki 3 kayit olan 70, 80 ise data blokun 3.satirina yerlesir. 3.satirda bos kalan (X ile belirtilen) kayit yerlesim yeri ekleme islemi sirasinda kullanilir. Data blokun 1.satirinin en büyük anahtari olan 30 ve satir numarasi 1, ikinci satirinin en büyük anahtari olan 60 ve satir numarasi 2 ve 3.satirin en büyük anahtari olan 90 ve satir numarasi 3 alinarak data blok indeks olusturulur. Ata Önal Veri ve Dosya Isleme 95 Data Blok Indeks 30,1 60,2 80,3 Data Blok 10 40 70 - 20 50 80 - 30 60 X - - - 5.7 Data Blok Indekslerin Indeksi Data blok indekslerin indeksi, Data Blok Indeks/lerin en büyük anahtari ve blok numaralarindan olusur. Örnek-3: Data blok satir doluluk orani 2/3, data blok sütun doluluk orani 2/3 ve ilk yükleme kayitlari: 10, 20, 30, 40, 50, 60 olmasi durumda ilk yükleme islemi asagidaki gibi gerçeklesir. Ilk 2 kayit olan 10, 20 data blok 1’in birinci satirina, sonraki 2 kayit olan 40, 50 data blok 1’in 2.satirina, daha sonraki 2 kayit olan 60, 70 ise data blok 2’nin 1.satirina yerlesir. data blok 2’nin 2.satiri bos kalir. Bu satir ekleme islemi sirasinda kullanilamaz. Ancak blok bölme islemi sirasinda yeniden kullanilabilir. Data blok 1’in 1.satirinin en büyük anahtari olan 20 ve satir numarasi olan 1 ile ikinci satirinin en büyük anahtari olan 40 ve satir numarasi olan 2 alinarak Data Blok 1 Indeks, data blok 2’nin 1.satirinin en büyük anahtari olan 60 ve satir numarasi olan 1 alinarak Data Blok 2 Indeks olusturulur. Data blok 1 indeksin 1.satirinin en büyük anahtari olan 40 ve blok numarasi olan 1 ile Data Blok 2 Indeksin en büyük anahtari olan 60 ve blok numarasi olan 2 alinarak Data Blok Indekslerin Indeks’i olusturulur. Data Blok Indekslerin Indeksi (DBII) 40,1 Data Blok 1 Indeks (DB1I) 20,1 60,2 40,2 - 20 40 - - X - 60 X - Data Blok 1 (DB1) 10 30 Data Blok 2 Indeks (DB2I) 60,1 Data Blok 2 (DB2) 50 X Ata Önal 96 Veri ve Dosya Isleme - - - 5.7.1 Data Blok Ekleme Islemleri Örnek-3’e, 15 anahtarli kaydin eklenmesi durumunda, DB1 asagidaki gibi degisir. Ekleme islemi adimlari söyledir. Isleme DBII’den baslanir. Eklenmek istene kaydin anahtari 15, DBII’in 1.anahtari 40 ve blok numarasi 1 dir. 15 < 40 oldugundan isleme blok numarasi 1 olan DB1I’den devam edilir. DB1I’in 1.anahtari 20 ve satir numarasi 1 dir. 15 < 20 oldugundan isleme DB1’in 1.satirindan devam edilir. 1.satirdaki (10,20,-) elemanlari, eklenmek istene 15 ile buffer islemine alindiginda yeni buffer (10,15,20) olur. Söyle ki; DB1’in 1.satiri buffera tasinir. 10 20 - Eklenmek istenen sayi 15 dir. DB1in 1.anahtari olan 10 ile eklenmek istenen anahtar 15 karsilastirilir. 10<15 oldugundan, 10 yeni buffera 1.eleman olarak tasinir. 10 Bufferin 2.elemani olan 20 ile eklenmek istenen anahtar 15 karsilastirilir. 15 < 20 oldugundan eklenmek istene kayit olan 15 yeni buffera 2.eleman olarak tasinir. 10 15 Bufferdaki 20 anahtarli kayit yeni buffera 3.eleman olarak tasinir. 10 15 20 Bufferda baska anahtar olmadigindan, yeni buffer DB1’e 1.satir olarak yeniden yazilir. Data Blok 1 (DB1) 10 30 - 15 40 - 5.7.2 Satir Bölme Islemi (Örnek-3’e, 18 anahtarli kaydin eklenmesi islemi) Benzer yol izlenirse DB1’in 1.satiri buffera tasinir. Eski Buffer Ata Önal 20 - Veri ve Dosya Isleme 10 15 97 20 Eklenecek anahtar 18 Yeni Buffer 1.adim: 10<18 oldugundan 10, yeni buffera 1.eleman olarak tasinir. Eski Buffer 10 15 20 Eklenecek anahtar 18 Yeni Buffer 10 2.adim: 15<18 oldugundan 15 yeni buffera 2.eleman olarak tasinir. Eski Buffer 10 15 20 Eklenecek anahtar 18 Yeni Buffer 10 15 3.adim: 18<20 oldugundan 18 yeni buffera 3.eleman olarak tasinir. Eski Buffer 10 15 20 Eklenecek anahtar 18 Yeni Buffer 10 15 18 4.adim: 20 yeni buffera yer olmadigi için tasinama z satir bölme islemi yapilmalidir. Önce 1.satirdaki tüm anahtarlar siralanir. 10 15 18 20 Satir doluluk orani 2 oldugundan ikiserli dilimlenir. 1.dilim ayni satirda kalir. Ikinci dilim ilk bos satira yazilir. Ata Önal 98 Veri ve Dosya Isleme 1.dilim 10 15 18 20 2.dilim 1.dilim ayni satirda kalir. Ikinci dilim ilk bos satir olan 3. satira yazilir. Data Blok 1 (DB1) 10 30 18 15 40 20 - DB1’de yeni satir olustugundan DB1I degisir. DB1I anahtara göre sirali olmalidir. Data Blok 1 Indeks (DB1I) 15,1 20,3 40,2 DBII satir bölme islemi sonucu degismez. Örnek-3’e, 12 anahtarli kaydin eklenmesi islemi 1.adim: Benzer islemler uygulanirsa DB1’in 1.satiri asagidaki gibi degisir. Data Blok 1 (DB1) 10 30 18 12 40 20 15 - 5.7.2.1 B lok Bölme Islemi Örnek-3’e, 14 an ahtarli kaydin eklenmesi islemi 1.adim: 14 anahtarli kayit DB1’in 1.satirinda bufferlama islemine alindiginda yer olmadigi için satir bölme islemi yapilmalidir. Fakat bos satir yoktur. Bos satir olmadigi için blok bölme islemi yapilir. Bloktaki kayitlarin tümü ve eklenmek istenen kayit anahtara göre küçükten büyüge siralanir. 10, 12, 14, 15, 18, 20, 30, 40 Bloktaki yerlesim yeri sayisi (X’lerin sayisi) 4 oldugundan, siralanan sayilar 4’erli dilimlenir. 1.dilim (10, 12, 14, 15) 2.dilim (18, 20, 30, 40) Ata Önal Veri ve Dosya Isleme 99 1.dilim ayni blokta (DB1) kalir. 2.dilim (DB3) ilk bos bloka yazilir. DB1I , DB3I ve DBII yeniden olusur. DBII 15,1 40,3 60,2 12,1 15,2 - 10 14 - 12 15 - - 20,1 40,2 - 18 30 - 20 40 - - DB1I DB1 DB3I DB3 5.8 Vsam ilk yükleme Pascal programi Uses CRT; Type Rec0=record Model:array [1..100,1..100] of integer; f:char; End; Var VSAMFile :file of Rec0; Kay:Rec0; index :array [1..100,1..50,1..2] of integer; Uindex:array [1..100,1..2] of integer; m,n,x,y,i,j,k,l,s,d,t,DBS:integer; Blok:integer; Deger :Array [0..100] of integer; Tus:char; label a; Begin Clrscr; Repeat Clrscr; Writeln('Satir DO [ m,n 1<m<n ]'); Write('m :');Readln(m); Ata Önal 100 Veri ve Dosya Isleme Write('n :');Readln(n); Until (m<n) And (m>1); Repeat Clrscr; Writeln('S utun DO [ x,y 1<x<y ]'); Write('x :');Readln(x); Write('y :');Readln(y); Until (x<y) And (x>1); Writeln('ilk Yükleme sayilarini giriniz " durdurmak için -1 "'); Writeln('Sayilari küçükten büyüge sirali girmelisiniz'); Deger[0]:=0; For i:=1 to 1000 Do Begin Write(': ');Readln(Deger[i]); if Deger[i]= -1 Then Begin Deger[i]:=0; i:=i-1; goto a; End; if Deger[i]<=Deger[i-1] Then Begin i:=i- 1; Writeln('Tekrar girin'); End; End; a: if i Mod 2=0 then Blok:=round(i/(m*x)) else Blok:=round((i+1)/(m*x)); s:=0; Assign(VSAMFile,'VSAM.XXX');Rewrite(VSAMFile); For t:=1 to Blok Do Begin For i:=1 to x Do Begin For j:=1 to m Do Begin s:=s+1; Seek(VSAMFile,t); Kay.Model[i,j]:=Deger[s]; Write(VSAMFile,Kay); if Deger[s]<> 0 Then Begin index[t,i,1]:=Deger[s]; index[t,i,2]:=i; Uindex[t,1]:=Deger[s]; Uindex[t,2]:=t; End; End; End; End; Clrscr; For t:=1 to Blok Do Write('³',Uindex[t,1],',',Uindex[t,2]); Writeln; For t:=1 to Blok Do Begin Ata Önal Veri ve Dosya Isleme 101 Write('DB[',t,'] '); For l:=1 to m Do Write('³',index[t,l,1],',',index[t,l,2]); Writeln; Seek(VSAMFile,t); Read(VSAMFile,Kay); For i:=1 to n Do Begin For j:=1 to y Do Begin Write(Kay.Model[i,j],' '); End; Writeln(''); End; End; Tus:=Readkey; End. Ata Önal 102 Veri ve Dosya Isleme Ata Önal BÖLÜM 6 6 Çoklu Anahtarli Erisimli Dosyalar Dosyadaki kayitlara birinci anahtar (1.A) ile erisilebilen yöntemler önceki konularda incelendi. Bu konuda, Dosyadaki kayitlara ikinci anahtarla (2.A) da (DT, CN, DY, ADI gibi) erisim yöntemleri incelenecektir. Bu Yöntemler Çoklu Liste (Uzunluklu) ve Degistirilmis Liste (Uzunluklu)’dir. Dogrudan Dosya Normal Bölüm Eleman Sayisi 3 olan Ana Tablo, Tablo 6-1’deki gibi verilmis olsun. Tablo 6-1 Ana Tablo (Dogrudan Dosya) 1.A YYN NO 1 4 2 5 3 6 4 7 5 10 6 13 7 15 2.A 2.A 2.A DT CN DY 76 K Izmir 77 E Izmir 76 E Ankara 75 K Amasya 77 K Izmir 77 E Ankara 77 K Izmir 2.A ADI Ayse Ali Murat Nuran Ayse Murat Ayse PNT 7 0 15 10 13 0 0 6.1 Çoklu Liste (Uzunluklu) Dogum Yeri (DY) için Çoklu Liste (Uzunluklu) olusturma islemi. Ana Tablodan, NO ve DY bilgileri alinir. DY bilgileri NO’ya göre birbirlerine baglanarak Çoklu Liste Tablosu olusturulur (Tablo 6-2). Tablo 6-2 Çoklu Liste Tablosu YYN 1 4 5 6 2 3 7 NO DY 4 Izmir 7 Amasya 10 Izmir 13 Ankara 5 Izmir 6 Ankara 15 Izmir PNT (NO) 10 0 5 6 15 0 0 Çoklu Liste Ta blosu’ndaki DY bilgilerinden birer tane alinarak Çoklu Liste Indeks (Uzunluklu) Tablosu olusturulur (Tablo 6-3). 104 Veri ve Dosya Isleme Tablo 6-3 Çoklu Liste Indeks (Uzunluklu) Tablosu YYN NO DY UZUNLUK 1 4 Izmir 4 4 7 Amasya 1 6 13 Ankara 2 Çoklu Liste Indeks (Uzunluklu) Tablosu, DY’ye göre küçükten büyüge siralanir ve Çoklu Liste Sirali Indeks (Uzunluklu) Tablosu olusturulur (Tablo 6-4). Tablo 6-4 Çoklu Liste Sirali Indeks (Uzunluklu) Tablosu YYN NO DY UZUNLUK 4 7 Amasya 1 6 13 Ankara 2 1 4 Izmir 4 Sorgulama Islemi: Dogum yerine göre kayit sayisini bulmak için , Çoklu Liste Sirali Indeks Uzunluklu Tablosundaki UZUNLUK bilgisi kullanilir. Dogum yerine göre kayitlari bulmak için: Çoklu Liste Sirali Indeks Uzunluklu Tablosundan NO bilgisi alinir (1.A). Ana Tablodan, 1.A’ya göre ail kayit bulunur. Sonraki kayitlar Çoklu Liste Tablosundaki bag bilgileri izlenerek bulunur. 6.2 Degistirilmis Liste (Uzunluklu) ADI için Degistirilmis Liste Olusturma. Ana Tablo’dan NO ve ADI bilgileri sirasiyla alinarak Degistirilmis Liste Tablosu olusturulur (Tablo 6-5). Tablo 6-5 Degistirilmis Liste Tablosu YYN NO ADI 1 4 Ayse 4 7 Nuran 5 10 Ayse 6 13 Murat 2 5 Ali 3 6 Murat 7 15 Ayse Degistirilmis Liste Tablosu ADI bilgilerine göre siralanir (Tablo 6-6). Ata Önal Veri ve Dosya Isleme Tablo 6-6 105 Degistirilmis Liste Tablosu YYN 2 1 5 7 6 3 4 NO 5 4 10 15 13 6 7 ADI Ali Ayse Ayse Ayse Murat Murat Nuran Degistirilmis Liste Tablosundan sirasiyla DY (Farkli Kayitlardan birer Tane), NO ve DY(YYN) bilgileri alinarak Degistirilmis Liste Indeks (Uzunluklu) Tablosu olusturulur (Bu tablodaki Uzunluk bilgisi DY kolonundaki benzer kayit sayisidir.) (Tablo 6-7). Tablo 6-7 Degistirilmis Liste Uzunluklu Tablosu YYN NO ADI UZUNLUK 2 5 Ali 1 1 4 Ayse 3 6 13 Murat 2 4 7 Nuran 1 Sorgulama Islemi: ADI bilgisine göre kayit sayisini bulmak için, Degistirilmis Liste Uzunluklu Tablosundaki UZUNLUK bilgisi kullanilir. ADI bilgisine göre kayitlari bulmak için: Degistirilmis Liste Uzunluklu Tablosundan NO ve UZUNLUK bilgisi alinir. Degistirilmis Liste Tablosunda UZUNLUK bilgisinde belirtilen sayi kadar kayitlar ardisik sirali sekilde bulunmaktadir. Bu kayitlarin NO bilgileri sirasiyla alinarak Ana Tablo’daki kayitlar listelenir. Çoklu anahtarli erisim yöntemini Ana Tablodaki Dogum Tarihine'ne çoklu liste metoduyla uygulama. uses crt; type dosya=record no,dt,nopnt:integer; cn:char; dy,ad:string; end; const yyn=3; no:array [1..7] of integer=(4,5,6,7,10,13,15); dt:array [1..7] of integer=(76,77,76,75,77,77,77); cn:array [1..7] of char=('k','e','e','k','k','e','k'); dy:array [1..7] of string=('izmir','izmir','Ankara','Amasya','izmir','Ankara','˜zmir'); ad:array [1..7] of string=('Ayse','Ali','Murat','Nuran','Ayse','Murat','Ayse'); Ata Önal 106 Veri ve Dosya Isleme var dos:file of dosya; d:dosya; i,x,y,z,a,b,c,sayac:integer; adet1,adet2,adet3:array [1..7] of integer; begin x:=0; x:=0; y:=0; clrscr; assign(dos,'c:\ anatablo.dd1'); rewrite(dos); for i:=1 to 7 do begin d.no:=no[i]; d.dt:=dt[i]; d.cn:=cn[i]; d.dy:=dy[i]; d.ad:=ad[i]; write(dos,d); end; close(dos); assign(dos,'c:\ anatablo.dd1'); reset(dos); writeln('NO DT'); writeln('-------'); for i:=1 to filesize(dos) do begin read(dos,d); gotoxy(1,i+2);writeln(d.no);gotoxy(6,i+2);writeln(d.dt); if d.dt=75 then begin x:=x+1; adet1[x]:=d.no; end; if d.dt=76 then begin y:=y+1; adet2[y]:=d.no; end; if d.dt=77 then begin z:=z+1; adet3[z]:=d.no; end; end; a:=1; b:=1; c:=1; readkey; Ata Önal Veri ve Dosya Isleme 107 clrscr; for i:=0 to filesize(dos)-1 do begin seek(dos,i); read(dos,d); if d.no=adet1[a] then begin a:=a+1; d.nopnt:=adet1[a]; seek(dos,i); write(dos,d); end; if d.no=adet2[b] then begin b:=b+1; d.nopnt:=adet2[b]; seek(dos,i); write(dos,d); end; if d.no=adet3[c] then begin c:=c+1; d.nopnt:=adet3[c]; seek(dos,i); write(dos,d); end; end; writeln('SN NO DT NOPNT'); writeln('-----------------'); seek(dos,0); for i:=1 to filesize(dos) do begin read(dos,d); gotoxy(1,i+2);writeln(i);gotoxy(5,i+2);writeln(d.no);gotoxy(9,i+2);writeln(d.dt);gotoxy(13,i+2);wri teln(d.nopnt); end; readkey; writeln; writeln('YYN NO DT NOPNT Uzunluk'); writeln('---------------------------'); seek(dos,0); sayac:=0; for i:=1 to filesize(dos) do begin read(dos,d); if adet1[1]=d.no then begin sayac:=sayac+1; writeln(sayac,' ',d.no,' ',d.dt,' ',d.nopnt,' ',x); Ata Önal 108 Veri ve Dosya Isleme end; if adet2[1]=d.no then begin sayac:=sayac+1; writeln(sayac,' ',d.no,' ',d.dt,' ',d.nopnt,' end; if adet3[1]=d.no then begin sayac:=sayac+1; writeln(sayac,' ',d.no,' ',d.dt,' ',d.nopnt,' end; end; readkey; end. Ata Önal ',y); ',z); KAYNAKLAR AHO, A. V., J. E. HOPCROFT, and J. D. ULLMAN: Data Structures and Algorithms, AddisonWesley, Reading, Mass., 1983. BERZTISS, A. T.: Data Structures: Theory and Practice, 2nd ed., Academic Press, New York, 1977. BUDD, T. A.: Classic Data Structures in C++, Addision-Wesley, Reading, Mass., 1994. DECKER, R.: Data Structures, Prentice Hall, Englewood Cliffs, N. J., 1989. GHOSH, S. P., and M. E. SENKO: “File Organization: On the Selection of Random Access Index Points for Sequential Files , “ J.ACM, 16:569-79, 1669. PFALTZ, J. L.: Computer Data Structures, McGraw -Hill, New York, 1977. TREMBLAY, J. P., and P. G. SORENSON: An Introduction to Data Structures with Applications, McGraw-Hill, New York, 1976.