BİL-142 Bilgisayar Programlama II
(C/C++)
Hazırlayan: [Link] Akcayol
Gazi Üniversitesi
Bilgisayar Mühendisliği Bölümü
Konular
Giriş
Data Hiyerarşisi
Files (Dosyalar) ve Streams (Kaynaklar)
Sıralı Dosya Oluşturma
Sıralı Dosyadan Data Okuma
Sıralı Dosyaları Güncelleme
Random-Access (Rastgele Erişimli) File
Rastgele Erişimli Dosya Oluşturma
Rastgele Erişimli Dosyaya Rastgele Veri Yazma
Rastgele Erişimli Dosyadan Sıralı Okuma
1
Giriş
Değişkenler ve diziler hafızada geçici olarak saklanır.
Dosyalar verilerin sürekli saklanması için kullanılır.
Bilgisayarlar verileri ikincil depolama cihazları olarak
bilinen manyetik disklerde, optik disklerde veya flash
memory gibi kalıcı hafıza birimlerinde saklar.
Konular
Giriş
Data Hiyerarşisi
Files (Dosyalar) ve Streams (Kaynaklar)
Sıralı Dosya Oluşturma
Sıralı Dosyadan Data Okuma
Sıralı Dosyaları Güncelleme
Random-Access (Rastgele Erişimli) File
Rastgele Erişimli Dosya Oluşturma
Rastgele Erişimli Dosyaya Rastgele Veri Yazma
Rastgele Erişimli Dosyadan Sıralı Okuma
2
Data Hiyerarşisi
Bilgisayarın işlediği tüm veriler en sonunda 1 ve
0’lara dönüşür.
Bilgisayarın desteklediği en küçük veri parçasına bit
(binary digit) denir.
8 bit bir byte oluşturur.
Karakterler bit gruplarıyla gösterilir.
Alanlar (fields) karakter gruplarıyla gösterilir.
Bilgisayardaki veriler arasında hiyerarşik bir yapı
vardır.
Bir kayıt (record) birden fazla alandan oluşabilir.
Bir dosya (file) ise birden fazla kayıttan oluşabilir.
5
Data Hiyerarşisi
Örnek veri hiyerarşisi
3
Data Hiyerarşisi
İstenen bir kaydı dosyadan almak için record key
kullanılır.
Record key bir kaydı diğer tüm kayıtlardan ayıran
alandır.
Dosya içinde kayıtları organize etmenin farklı yolları
vardır. Bunların arasında yaygın kullanılanlardan
birisi sıralı dosya (sequential file) yapısıdır.
Veritabanı (Database) birden fazla dosyadan
oluşur.
Veritabanını oluşturan ve yöneten programlara
Veritabanı Yönetim Sistemi (DBMS-Database
Management Systems) denir.
7
Konular
Giriş
Data Hiyerarşisi
Files (Dosyalar) ve Streams (Kaynaklar)
Sıralı Dosya Oluşturma
Sıralı Dosyadan Data Okuma
Sıralı Dosyaları Güncelleme
Random-Access (Rastgele Erişimli) File
Rastgele Erişimli Dosya Oluşturma
Rastgele Erişimli Dosyaya Rastgele Veri Yazma
Rastgele Erişimli Dosyadan Sıralı Okuma
4
Files (Dosyalar) ve Streams (Kaynaklar)
C++ her dosyayı byte serileri olarak görür.
Her dosya, bir dosya sonu işaretçisi (end-of-file
marker) ile sonlanır.
Bir dosya açıldığında bir nesne oluşturulur ve kaynak
bu nesneyle ilişkilendirilir.
Bu nesneyle ilişkilendirilen kaynak (stream) program
ile dosya veya cihaz arasında bir iletişim kanalı
oluşturur.
Örneğin cin nesnesi klavyeden girişleri okur, cout
nesnesi ekrana veri gönderir.
Files (Dosyalar) ve Streams (Kaynaklar)
C++ ile dosya işlemleri yapmak için <iostream>
ve <fstream> dosyalarını include etmek gerekir.
<fstream> başlık dosyası dosya giriş ve çıkış
işlemleri için gerekli tanımlamaları içerir.
10
5
Konular
Giriş
Data Hiyerarşisi
Files (Dosyalar) ve Streams (Kaynaklar)
Sıralı Dosya Oluşturma
Sıralı Dosyadan Data Okuma
Sıralı Dosyaları Güncelleme
Random-Access (Rastgele Erişimli) File
Rastgele Erişimli Dosya Oluşturma
Rastgele Erişimli Dosyaya Rastgele Veri Yazma
Rastgele Erişimli Dosyadan Sıralı Okuma
Sıralı Dosya Oluşturma
C++ dosya yapısıyla ilgili kısıtlamaya sahip değildir.
Programcı dosya yapısını kendi istediği gibi
oluşturabilir.
Kayıt (record) yaklaşımı C++ dosyalarında tanımlı
değildir.
Programcının kayıt yapısını ve ona uygun yazma ve
okuma işlemlerini oluşturması gerekir.
12
6
Sıralı Dosya Oluşturma
13
Sıralı Dosya Oluşturma
14
7
Sıralı Dosya Oluşturma
Veri girişi ve Notepad ile görüntülenen dosya içeriği
15
Sıralı Dosya Oluşturma
Dosyalar ifstream, ofstream, fstream ile açılır.
ofstream dosya sadece yazmak için açılmıştır.
ofstream constructor’ına iki parametre
gönderilmiştir. Dosya adı ve dosya açma modu.
ios::out ile dosya varsa truncate edilerek
boşaltılır, yoksa yeniden açılır.
16
8
Sıralı Dosya Oluşturma
Satır 19’da outClientFile nesnesi “[Link]”
dosyasıyla ilişkilendirilmiştir.
ofstream outClientFile(“[Link]”);
ile default olarak yazmak için açılır.
ofstream outClientFile; ile belirli bir dosya
açılmaz dosya daha sonra belirlenir.
Dosya açma işlemi başarılı olursa outClientFile
true, değilse false döndürür.
17
Sıralı Dosya Oluşturma
Satır 22-26 dosya açma işleminin başarılı olup
olmadığına bakar.
Satır 36’da aralarında boşlukla girilen değerler
sırasıyla değişkenlere aktarılır.
While döngüsünden Windows’ta ctrl+z, Unix’te ctrl-d
ile çıkılır.
Programdan çıkınca outClientFile nesnesinin
destructor’ı çağrılır ve açılan “[Link]” dosyası
kapatılır.
İstenirse [Link](); ile dosya
doğrudan kapatılabilir.
Dosya kullanımı bitmişse kapatılması gerekir.
18
9
Konular
Giriş
Data Hiyerarşisi
Files (Dosyalar) ve Streams (Kaynaklar)
Sıralı Dosya Oluşturma
Sıralı Dosyadan Data Okuma
Sıralı Dosyaları Güncelleme
Random-Access (Rastgele Erişimli) File
Rastgele Erişimli Dosya Oluşturma
Rastgele Erişimli Dosyaya Rastgele Veri Yazma
Rastgele Erişimli Dosyadan Sıralı Okuma
Sıralı Dosyadan Data Okuma
Bir dosya ifstream nesnesiyle giriş yapmak
amacıyla olarak açılır.
ifstream constructor’ı dosya adı ve dosya açma
modunu alır.
Bir dosyanın içeriği değişmeyecekse açma modu
ios::in olarak girilmelidir.
20
10
Sıralı Dosyadan Data Okuma
21
Sıralı Dosyadan Data Okuma
22
11
Sıralı Dosyadan Data Okuma
Ekran çıkışı ve Notepad ile görüntülenen dosya içeriği
23
Sıralı Dosyadan Data Okuma
ifstream inClientFile(“[Link]”);
ile dosya default olarak okumak için açılır.
!inClientFile ile dosyanın sorunsuz açıldığı
kontrol edilir.
Satır 48’de her iterasyonda dosyadan bir kayıt (satır)
okunur.
Dosya istream ve ostream nesneleri dosya
pozisyon işaretçisine sahiptir.
istream için seekg (seek get), ostream için
seekp (seek put).
ile dosya başına gidilir.
24
12
Sıralı Dosyadan Data Okuma
Dosya üzerinde yeniden konumlanmak için ikinci bir
parametre daha girilebilir. Bu parametre yön bildirir.
ios::cur bulunulan noktayı, ios::beg
başlangıcı ve ios::end dosya sonunu gösterir.
25
Sıralı Dosyadan Data Okuma
Dosya üzerinde bulunulan pozisyonu almak için
tellg ve tellp kullanılır.
Aşağıdaki kod long integer olarak bulunulan noktayı
verir.
26
13
Konular
Giriş
Data Hiyerarşisi
Files (Dosyalar) ve Streams (Kaynaklar)
Sıralı Dosya Oluşturma
Sıralı Dosyadan Data Okuma
Sıralı Dosyaları Güncelleme
Random-Access (Rastgele Erişimli) File
Rastgele Erişimli Dosya Oluşturma
Rastgele Erişimli Dosyaya Rastgele Veri Yazma
Rastgele Erişimli Dosyadan Sıralı Okuma
Sıralı Dosyaları Güncelleme
Sıralı dosyalarda data güncelleme işlemi sırasında
diğer datalarda bozulma riski vardır.
Yeni bilginin boyutu öncekinden büyüksek sonraki
bilgileri etkileyecektir.
Aşağıdaki kayıtta il adını değiştirmek istersek
1000 Bursa 2300
1000 Istanbul 2300
yeni il adı devam eden bilginin üzerine taşacaktır.
Bu tür hataları önlemek için tüm kayıtlar sabit
uzunlukta alınabilir.
28
14
Konular
Giriş
Data Hiyerarşisi
Files (Dosyalar) ve Streams (Kaynaklar)
Sıralı Dosya Oluşturma
Sıralı Dosyadan Data Okuma
Sıralı Dosyaları Güncelleme
Random-Access (Rastgele Erişimli) File
Rastgele Erişimli Dosya Oluşturma
Rastgele Erişimli Dosyaya Rastgele Veri Yazma
Rastgele Erişimli Dosyadan Sıralı Okuma
Random-Access (Rastgele Erişimli) File
Sıralı erişimli dosyalar belirli bir kayda hızlı ulaşım
gereken uygulamalarda uygun değildir.
Bir bilgiye doğrudan erişim Random Access File ile
mümkündür.
Random Access File bir bilgiye doğrudan erişir diğer
kayıtlara bakmasına gerek yoktur.
Bütün kayıtlar için aynı ve sabit boyut kullanmak
arama işlemlerini kolaylaştırır.
30
15
Konular
Giriş
Data Hiyerarşisi
Files (Dosyalar) ve Streams (Kaynaklar)
Sıralı Dosya Oluşturma
Sıralı Dosyadan Data Okuma
Sıralı Dosyaları Güncelleme
Random-Access (Rastgele Erişimli) File
Rastgele Erişimli Dosya Oluşturma
Rastgele Erişimli Dosyaya Rastgele Veri Yazma
Rastgele Erişimli Dosyadan Sıralı Okuma
Rastgele Erişimli Dosya Oluşturma
ostream sınıfının write üyesi sabit sayıda byte’ı hafızada
belirlenen yere yazar.
Eğer bir dosyayla ilişkilendirilirse dosyadaki pozisyondan
itibaren yazar.
istream sınıfının read üyesi sabit sayıda byte’ı hafızadan
belirlenen yerden okur.
Eğer bir dosyayla ilişkilendirilirse dosyadaki pozisyondan
itibaren okur.
outfile << number; ile integer number dosyaya yazılır.
Rastgele erişimli dosyalarda byte yazmak için
[Link](reinterpret_cast<const
char*>(&number), sizeof(number));
kullanılır.
32
16
Rastgele Erişimli Dosya Oluşturma
33
Rastgele Erişimli Dosya Oluşturma
34
17
Rastgele Erişimli Dosya Oluşturma
35
Rastgele Erişimli Dosya Oluşturma
36
18
Rastgele Erişimli Dosya Oluşturma
37
Rastgele Erişimli Dosya Oluşturma
38
19
Rastgele Erişimli Dosya Oluşturma
39
Rastgele Erişimli Dosya Oluşturma
Fig. 17.10 ve Fig.17.11 kayıt formatını
belirler(ClientData).
Program 100 kaydı otomatik olarak oluşturup yazar.
Program her kaydın sabit boyutta olmasını sağlar.
Bunun için setLastName ve setFirstName
fonksiyonları kullanılır.
ios::binary ile açılan dosyanın binary formatta
olduğu bildirilir.
40
20
Konular
Giriş
Data Hiyerarşisi
Files (Dosyalar) ve Streams (Kaynaklar)
Sıralı Dosya Oluşturma
Sıralı Dosyadan Data Okuma
Sıralı Dosyaları Güncelleme
Random-Access (Rastgele Erişimli) File
Rastgele Erişimli Dosya Oluşturma
Rastgele Erişimli Dosyaya Rastgele Veri Yazma
Rastgele Erişimli Dosyadan Sıralı Okuma
Rastgele Erişimli Dosyaya Rastgele Veri Yazma
seekp ile istenen yere konumlanılır ve write ile
veri yazılabilir.
42
21
Rastgele Erişimli Dosyaya Rastgele Veri Yazma
43
Rastgele Erişimli Dosyaya Rastgele Veri Yazma
44
22
Rastgele Erişimli Dosyaya Rastgele Veri Yazma
Veri girişi ekranı ve Notepad ile dosya içeriği
45
Rastgele Erişimli Dosyaya Rastgele Veri Yazma
Programda satır 59-60 ile dosyada konumlanılıyor.
Tüm kayıtlar accountNumber değerine göre
yerleştiriliyor.
Programda satır 28’de dosya ios::in, ios::out,
ios::binary olarak birden fazla modla açıldı.
46
23
Konular
Giriş
Data Hiyerarşisi
Files (Dosyalar) ve Streams (Kaynaklar)
Sıralı Dosya Oluşturma
Sıralı Dosyadan Data Okuma
Sıralı Dosyaları Güncelleme
Random-Access (Rastgele Erişimli) File
Rastgele Erişimli Dosya Oluşturma
Rastgele Erişimli Dosyaya Rastgele Veri Yazma
Rastgele Erişimli Dosyadan Sıralı Okuma
Rastgele Erişimli Dosyadan Sıralı Okuma
istream sınıfındaki read fonksiyonu belirlenen
kaynakta bulunulan pozisyondan belirlenen sayıda
byte okur.
Eğer kaynak bir dosya ise konumlanılan yerden
belirlenen boyutta veri okunur.
48
24
Rastgele Erişimli Dosyadan Sıralı Okuma
49
Rastgele Erişimli Dosyadan Sıralı Okuma
50
25
Rastgele Erişimli Dosyadan Sıralı Okuma
51
Rastgele Erişimli Dosyadan Sıralı Okuma
Programda satır 57-58, sizeof(ClientData)
boyutunda okuma yapar.
Satır 50’deki ![Link]() ifadesi dosya
sonunu kontrol eder.
52
26