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.

Benzer belgeler