DOSYALAR (Files) SAKARYA ÜNİVERSİTESİ Bilgisayar ve Bilişim Bilimleri Fakültesi. Prof. Dr. Cemil ÖZ Prof. Dr. Celal ÇEKEN Doç. Dr.

Benzer belgeler
C/C++ Disk G/Ç İşlemleri. Yrd. Doç. Dr. Fehim KÖYLÜ Erciyes Üniversitesi Bilgisayar Mühendisliği Bölümü

ENF102 TEMEL BİLGİSAYAR BİLİMLERİ VE C/ C++ PROGRAMLAMA DİLİ. Gazi Üniversitesi Mühendislik Fakültesi Bilgisayar Mühendisliği Bölümü

KONU 7: DOSYA İŞLEME ( File Processing )

Metin Dosyaları. Metin Dosyaları Dosya Açma ve Kapama Dosya Okuma ve Yazma Rastgele Erişim Standart Girdi/Çıktı Hata Kontrolü

SAKARYA ÜNİVERSİTESİ BİLGİSAYAR VE BİLİŞİM BİLİMLERİ FAKÜLTESİ BİLGİSAYAR MÜHENDİSLİĞİ BÖLÜMÜ GÜZ DÖNEMİ PROGRAMLAMAYA GİRİŞ DERSİ

Fonksiyon Türleri. Bildiğiniz gibi, C++'da iki fonksiyon türü ile karşılaşıyoruz. C++'nın kullanıma sunduğu hazır fonksiyonlar.

DOSYA İŞLEMLERİ Programlama dilleri hafta -

1 PROGRAMLAMAYA GİRİŞ

ELN1002 BİLGİSAYAR PROGRAMLAMA 2

Visual Basic 6.0. Anadolu Üniversitesi Endüstri Mühendisliği Bölümü. Dosyalama İşlemleri. Ders Notları

işlemler bittikten sonra dosyaların kapatılması uygun olacaktır. Bunun için, fclose(fin);

ALGORİTMA VE PROGRAMLAMA II

ELN1002 BİLGİSAYAR PROGRAMLAMA 2

C++ Giriş Ders 1 MSGSU Fizik Bölümü Ferhat ÖZOK Kullanılacak kaynak: Published by Juan Soulié

Kalıtım (Inheritance)

BMB1002 Bilgisayar Programlamaya Giriş. Dosyalar. Prof. Dr. Necmettin Kaya

mod ile açılacak olan dosyanın ne amaçla açılacağı belirlenir. Bunlar:

Algoritma ve Programlama II Recursive Fonksiyonlar Dosyalama

10. DOSYA GİRİŞ ÇIKIŞ FONKSİYONLARI

PROGRAMLAMA. Dosyalama İşlemleri. Yrd. Doç. Dr. Bülent Çobanoğlu. Sakarya Üniversitesi Mekatronik Mühendisliği. Yrd.Doç.Dr.

BİLG Dr. Mustafa T. Babagil 1

Temel Bilgisayar Programlama

Temel Dosya İşlemleri. Kütük Organizasyonu 1

şeklinde tanımlanmıştır. O halde, dosyaları daha önceki bilgilerimizi kullanarak FILE *Dosya1, *Dosya2;

BĠLGĠSAYAR PROGRAMLAMA II C++ Programlamaya GiriĢ Published by Juan Soulié

C++ Dersi: Nesne Tabanlı Programlama

Eln 1002 Bilgisayar Programlama II

Pascalda oluşturulacak dosyalar değişkenler gibi programın başında tanımlanır.

ALGORİTMA VE PROGRAMLAMA II

Yrd. Doç. Dr. Caner ÖZCAN

NESNEYE YÖNELİK PROGRAMLAMA C++ a Giriş

Endüstri Mühendisliği Bölümü Bilgisayar Programlama Ders Notları

Şekil 4-3 do while döngüsünün çalışması.

BLM-112 PROGRAMLAMA DİLLERİ II. Ders-8 Dosya İşlemleri-1. Yrd. Doç. Dr. Ümit ATİLA

C++ Dersi: Nesne Tabanlı Programlama

C++ Dersi: Nesne Tabanlı Programlama

Object-Oriented Programming Lab 4. - Sıcaklık değeri, Kelvin biriminde saklansın. Varsayılan sıcaklık değeri K olsun.

String ve Karakter Dizileri. Yrd. Doç. Dr. Fehim KÖYLÜ Erciyes Üniversitesi Bilgisayar Mühendisliği Bölümü

DERSİN WEB SİTESİ:

Diziler & Karakter Katarı (String)

Girdi Çıktı İşlemleri

BLM-111 PROGRAMLAMA DİLLERİ I. Ders-8 Değişken Tipleri ve Temel Giriş/Çıkış İşlemleri

Karakter katarları ile ilgili fonksiyonlar içerir Yerel kayan noktalı sayılar tanımlanır

C++ Dersi: Nesne Tabanlı Programlama

C ++ Ders 7. Hata Denetimi ve Dosya İşlemleri. Prof. Dr. M. Serdar ÇELEBİ, İTÜ

C Dosyalama. Öğr. Gör. M. Ozan AKI. Rev 1.0

KOCAELİ ÜNİVERSİTESİ MÜHENDİSLİK FAKÜLTESİ

#ifndef VEKTOR_H #define VEKTOR_H. struct vektor_s { double x; double y; double z; }; typedef struct vektor_s vektor_t;

BTEP243 Ders 3. class Yazım Kuralı:

C++ Giriş Ders 5 MSGSU Fizik Bölümü Ferhat ÖZOK

Dizi nin Önemi. Telefon rehberindeki numaralar, haftanın günleri gibi v.b.

Eln 1001 Bilgisayar Programlama I

BİLGİSAYAR MÜHENDİSLİĞİ ALGORİTMA VE PROGRAMLAMA II 2.HAFTA SWİTCH (CASE), SAYAÇLAR, DÖNGÜLER,

Programlamaya Giriş Karar Yapıları, Tekrarlı İfadeler(Döngüler)

Fall Object-Oriented Programming Laboratory 02 - Structures

Internet Programming II. Elbistan Meslek Yüksek Okulu Bahar Yarıyılı

Örnek 4: Örnek Özyinelemeli fonksiyon örneği Bölüm 9. C++ programlama dilinde Nesne ve sınıf

Diziler. Yrd.Doç.Dr.Bülent ÇOBANOĞLU

C++ Programming: Program Design Including Data Structures, Third Edition. Bölüm 3: Giriş/Çıkış

PROGRAMLAMAYA GİRİŞ DERS 2

Algoritma ve Programlama: Karar Yapıları ve Döngüler

#ifndef COMPLEX_H #define COMPLEX_H

Dosyalar 1.1 Dosya Nedir?

Bilgilerin Uzun Vadeli Saklanması

12. Saat : Dosyalar I (Files)

NESNEYE YÖNELİK PROGRAMLAMA

10/17/2007 Nesneye Yonelik Programlama 3.1

Örnek1: #include <iostream> #include <string> using namespace std;

Operatörlere İşlev Yükleme

Çoktan Seçmeli Değerlendirme Soruları Akış Şemaları İle Algoritma Geliştirme Örnekleri Giriş 39 1.Gündelik Hayattan Algoritma Örnekleri 39 2.Say

DOSYA ORGANİZASYONU. Sıralı erişimli dosya organizasyonu yöntemleri ÖZLEM AYDIN TRAKYA ÜNİVERSİTESİ BİLGİSAYAR MÜHENDİSLİĞİ BÖLÜMÜ

7.1- C#.net Giriş Çıkış İşlemleri ve Visual Studio. M.İLKUÇAR - 1

C++ Dersi: Nesne Tabanlı Programlama

Temel Bilgisayar Programlama Final Sınavı Çalışma Notları

3- Turbo Pascal Programlamada Giriş Çıkış İşlemleri

Object-Oriented Programming Laboratuvar 11

En kucuk calisabilir birime satetement denir Statements semicolon (;) ile sonlanir Yalniz basina ; null statement i ifade eder

BMT 101 Algoritma ve Programlama I 6. Hafta. Yük. Müh. Köksal Gündoğdu 1

Fall Object-Oriented Programming Laboratory 03

Hafta 12 Karakter Tutan Diziler

C++ Statements. { ve } arasında ifade edilen bir dizi statement bir compound statement (birleşik ifade) oluşturur.

DOSYALAR. Temel terimler Hafta. Dr. Fahri Vatansever

BLM 111 Algoritma ve Programlama I Güz 2018

ENF102 TEMEL BİLGİSAYAR BİLİMLERİ VE C/ C++ PROGRAMLAMA DİLİ. Gazi Üniversitesi Mühendislik Fakültesi Bilgisayar Mühendisliği Bölümü

NESNEYE YÖNELİK PROGRAMLAMA SINIFLAR

BİLG Dr. Mustafa T. Babagil 1

BMT 106 Algoritma ve Programlama II Bahar Dönemi

Linux Assembly Programlamaya Giriş

C++ Dersi: Nesne Tabanlı Programlama

C++ Operatörler (Operators)

Pros and Cons of Pointers. Pointers. Avantajlar. Dezavantajlar

BLG 312 Bilgisayar İşletim Sistemleri 2006 BLG 312. Bilgilerin Uzun Vadeli Saklanması. Dosya Sistemi Görevleri. Dosya Sistemi Özellikleri

const objects & const member functions

Operatörlere Yeni İşlevler Yüklenmesi (Operator Overloading)

Fonksiyonlar. C++ ve NESNEYE DAYALI PROGRAMLAMA 51. /* Fonksiyon: kup Bir tamsayının küpünü hesaplar */ long int kup(int x) {

C Programlama printf() Fonksiyonu

BMT 101 Algoritma ve Programlama I 5. Hafta. Yük. Müh. Köksal Gündoğdu 1

NESNEYE YÖNELİK PROGRAMLAMA

AHMET YESEVİ ÜNİVERSİTESİ BİLİŞİM SİSTEMLERİ VE MÜHENDİSLİK FAKÜLTESİ BİLGİSAYAR MÜHENDİSLİĞİ LİSANS DÖNEM ÖDEVİ

YAPILAR BİRLİKLER SAYMA SABİTLERİ/KÜMELERİ. 3. Hafta

Transkript:

SAKARYA ÜNİVERSİTESİ Bilgisayar ve Bilişim Bilimleri Fakültesi Bilgisayar Mühendisliği Bölümü DOSYALAR (Files) Prof. Dr. Cemil ÖZ Prof. Dr. Celal ÇEKEN Doç. Dr. Cüneyt BAYILMIŞ

Konular Dosyalama İşlemleri Dosya Modları Metin Dosyaları İkili Dosyalar Dosya Veri Yazma İşlemi Dosya Veri Okuma İşlemi Örnek Dosya Konum İşaretçileri Rasgele Erişimli Dosya İşlemleri Veritabanı Bağlantısı Örnek Kaynaklar 2

Dosyalama İşlemleri Verilerin sürekli saklanması/depolanması için dosyalardan yararlanılır. Bilgisayarın işlediği tüm verilerin sonuçta 1 ve 0 lardan oluştuğu unutulmamalıdır. Bir dosya (file) birden çok kayıt (record) alanından oluşur. Kayıt alanları karakter grupları ile karakterler de bit grupları ile gösterilir. Programlar dosyalara iki farklı şekilde ulaşırlar; sıralı ve rasgele. Yazdığınız program sizin ulaşım seçiminize göre değişiklik gösterecektir. Dosyaya erişim modunuz, sizin dosyadan veriyi nasıl okuyacağınızı, dosyaya veriyi nasıl yazacağınızı, dosyadaki verileri nasıl değiştireceğinizi veriyi dosyadan nasıl sileceğinizi ve benzeri durumları belirlemenizi sağlar. Bazı dosyalara iki şekilde de ulaşılabilir. 3

Dosyalama İşlemleri Dosyalamayla İlgili 3 temel İşlem Dosya açılır Veri yazılır, ya da okunur Dosya kapatılır Dosyalarla ilgili işlemlerde aşağıda bulunan ve istream ile ostream sınflarından türetilen sınıflar kullanılır (cin cout bu sınıflardan oluşturulan nesnelerdir.). ofstream: Dosyalara yazmak için kullanılan stream sınıfı ifstream: Dosyalardan okumak için kullanılan stream sınıfı fstream: Dosyalara yazmak için kullanılan stream sınıfı Dosya açılırken dosya adı ve mod belirtilir 4

Dosya Modları Mod Bayrağı ios::in ios::app ios::ate ios::binary ios::out ios::trunc ios::noreplace ios::nocreate Görevi Varolan dosyanın okunmak üzere açılması. Dosya yok ise hata döndürülür Dosyaya yazmak için kullanılır. Dosya yok ise oluşturulur. Tüm ekleme işlemleri dosya sonuna yapılır. İos::app gibidir. Farklı olarak yazma işlemi herhangi bir yere yapılabilir. Dosyanın ikili modda açılmasını sağlar. Varsayılan mod text dir Yazma modu. Dosya var ise içeriği boşaltılır. Dosya var ise içeriği temizlenir. ios::out için varsayılan moddur. Dosya var ise hata verir. Dosya yok ise oluşturulmasın. Open fonksiyonu dosya yok ise hata verecektir.

Metin Dosyaları İkili Dosyalar İkili (binary) modta açılan dosya akışları giriş ve çıkış işlemlerini formattan bağımsız olarak gerçekleştirirler. Metin (text) dosyalarda ise bazı özel karakterlerin (satırbaşı ve satırbaşına dönüş karakterleri) formatından dolayı bazı dönüşüm işlemleri gerçekleşir. İkili dosyalar formatsızdır ve ASCII formatında saklanmazlar.

Dosya Veri Yazma İşlemi Dosya yazma işleminden önce dosya açılmalıdır.. ofstream dosyayaz ( "kayit.txt", ios :: out ) ; sınıf adı dosya nesnesinin adı kullanılan dosya dosya açma modu. ofstream dosyayaz ; dosyayaz. open ( "kayit.txt" ) ; veya dosyayaz. open ( "kayit.txt", ios :: out ); Dosyaya veri yazma dosyayaz << "Dosyaya yazıyorum \n"; Dosya yazma işleminden sonra dosya kapatılmalıdır. Herhangi bir kapatma işlemi yapılmazsa işletim sistemi dosyayı program bitince kapatır. dosyayaz. close ( ) ; 7

Dosyadan Veri Okuma İşlemi Dosya okuma modunda açılmalıdır... ifstream dosyaoku ( "kayit.txt", ios :: in ) ; sınıf adı dosya nesnesinin adı ifstream dosyaoku ; kullanılan dosya dosya açma modu (default) veya dosyaoku. open ( "kayit.txt") ; dosyaoku. open ( "kayit.txt", ios :: out ); Dosyadan veri okuma dosyaoku >> değişken; veya dosyaoku. get ( değişken ); 8

Dosyadan Veri Okuma İşlemi String ifadeler gibi dosya sonunda bir işaretçi ile sonlanır. Dosya sonuna gelinip gelinmediği kontrol edilebilir. while (! dosyaoku. eof ( ) ) // end of file veya while ( dosyaoku. good ( ) ) 9

Dosya İşlemi Dosyanın açılıp açılmadığını kontrol etme işlemi, if (dosyayaz. is_open ( ) ) cout << "Dosya açıldı"; 10

Örnek #include <iostream> #include <fstream> using namespace std; int main(){ // dosya veri yazma işlemi ofstream dosyayaz; dosyayaz.open("kayit.txt", ios::out); dosyayaz<<"dosya Veri Yazma \n"; dosyayaz.close(); } // dosyadan okuma işlemi ifstream dosyaoku("kayit.txt",ios::in); if (dosyaoku.is_open()) cout<<"dosya Acma Basarili\n"; char oku; while (!dosyaoku.eof()) { dosyaoku>>oku; cout<<oku; } dosyaoku.close(); return 0; 11

Örnek 2 #include <iostream> #include <fstream> #include <string> using namespace std; struct rehber { string ad; string tel; }; int main() { rehber rehberim; char devam='e'; ofstream dosyayaz; dosyayaz.open("rehber.txt",ios::app); do { cout<<"ad ve telefon bilgileri giriniz\n"; cin>>rehberim.ad>>rehberim.tel; dosyayaz<<rehberim.ad<<"\t"<<rehberim.tel<<"\n"; cout<<"\n Yeni kayit yapacak misiniz (e/h) "; cin>>devam; } while(!(devam=='h')); dosyayaz.close(); ifstream dosyaoku; dosyaoku.open ("Rehber.txt"); string isim; cout<<"aranilacak Adi Giriniz: "; cin>>isim; while(!dosyaoku.eof()){ // while (dosyaoku>>rehberim.ad>>rehberim.tel) dosyaoku>>rehberim.ad>>rehberim.tel; if (isim == rehberim.ad) cout<<rehberim.ad<<"\n"<<rehberim.tel; } dosyaoku.close(); return 0; } C++ da dosyaya herhangi bir yapı zorlanmaz. Dosyaları programcı formatlı veri girişi ile yapılandırır. Örneğin ad, tel bilgilerinin tek bir kişiye ait olması dosyarehber.cpp 12

Dosya Konum İşaretçileri Ardışık olarak bir dosyadan okuma işleminde, programlar işleme dosyanın başından başlar ve istenilen veri bulunana kadar ard arda tüm verileri okur. Bir dosyanın her seferinde başından itibaren işleme sokulması gereksiz işlem ve zaman kaybına neden olur. Bu problem, hem okuma hem de yazma işlemi için dosya konum işaretçileri ile çözülür. Dosya konum işaretçileri işlem yapılacak (okuma/yazma) bir sonraki baytın numarasını tutar.. ifstream seekg (seek get) ofstream seekp (seek put) Ayrıca, dosyada konumlandırmanın yönü belirtilmelidir. beg : başlangıca göre cur : geçerli/mevcut konuma göre end : sonuna göre 13

Dosya Konum İşaretçi Modları Komut dosyanesnesi.seekg ( n ); dosyanesnesi.seekp( n, ios::beg ); dosyanesnesi.seekp(32l, ios::beg); dosyanesnesi.seekp( -10L, ios::end ); dosyanesnesi.seekp( 120L, ios::cur ); dosyanesnesi.seekg ( 2L, ios::beg ); dosyanesnesi.seekg ( -100L, ios::end ); dosyanesnesi.seekg ( 40L, ios::cur ); dosyanesnesi.seekg( 0L, ios::end ); Okuma/Yazma Pozisyonunu Etkileme Durumu Dosyanın n. baytına konumlandır. n=0 ise dosya başına konumlandır. Yazma pozisyonunu dosya başından 33. bayta kur. Dosya sonundan 11. bayta yazma pozisyonunu kur. Geçerli pozisyondan 121. bayta yazma pozisyonunu kur. Dosya başından 3. bayta okuma pozisyonunu kur. Dosya sonundan 101. bayta okuma pozisyonunu kur. Geçerli pozisyondan 41. bayta okuma pozisyonunu kur. Dosya sonuna okuma pozisyonunu kur.

Dosya Konum İşaretçileri Dosya üzerinde bulunulan mevcut konumu öğrenme; ifstream tellg (tell get) ofstream tellp (tell put) Dosyadaki mevcut konumu öğrenme long konum; konum = dosyanesnesi.tellg(); 15

Rasgele Erişimli Dosya İşlemleri Rasgele erişimli dosya ile ayrı kayıtlara, diğer kayıtları aramaya gerek kalmadan doğrudan ve hızlı bir şekilde erişilebilir. C++ ta bir dosya için belirli bir yapı zorunluluğu yoktur. Rasgele erişim için en kolay yöntemlerden biri dosyadaki tüm kayıtların/kayıt alanlarının aynı büyüklükte gerçekleştirilmesidir. Böylelikle bir kaydın konumu hızlı bir şekilde tespit edilebilir. Sabit kayıt alanı kullanımı ile dosyada değişiklikler/güncellemeler, diğer verilere zarar vermeden daha kolay gerçekleştirilebilir. Dosyaya veri yazma dosyanesnesi. write ( reinterpret_cast < const char * > (&kayit), sizeof (kayit) ) ; Dosyadan veri okuma dosyanesnesi. write ( reinterpret_cast < char *> (&kayit), sizeof (kayit) ) ; 16

Rasgele Erişimli Dosya İşlemleri Rasgele erişimli dosyalarda konum işaretçisini konumlandırma işlemi için ardışık dosyalarda da kullanılan seekg ve seekp komutları kullanılır. dosyanesnesi. seekp ( sayi * sizeof (SinifAdi) ) ; dosyanesnesi. seekp ( nesneadi. fonksiyon () 1) * sizeof (SinifAdi) ) ; dosyayaz. seekp ( rehberim. al () 1) * sizeof (rehber) ) ; 17

Rasgele Erişimli Dosya İşlemleri Örneği // Bu program boş kayıt alanlarına sahip bir dosya oluşturur. #include <iostream> #include <fstream> using namespace std; // Invtry yapısı struct Invtry { char desc[31]; int qty; float price; }; void main(void) { fstream inventory("invtry.dat", ios::out ios::binary); Invtry record = { "", 0, 0.0 }; // {"sakarya", 54, 54.0 } sabit kayit } // Boş kayıtlar yazılıyor for (int count = 0; count < 5; count++) { cout << "Now writing record " << count << endl; inventory.write((char *)&record, sizeof(record)); } inventory.close();

Rasgele Erişimli Dosya İşlemleri Örneği // Bu program envanter dosyasının içeriğini gösterir. #include <iostream> #include <fstream> // Invtry yapısı struct Invtry { char desc[31]; int qty; float price; }; void main(void) { fstream inventory("invtry.dat", ios::in ios::binary); Invtry record = { "", 0, 0.0 }; // kayıtlar okunuyor ve gösteriliyor inventory.read((char *)&record, sizeof(record)); while (!inventory.eof()) { cout << "Description: "; cout << record.desc << endl; cout << "Quantity: "; cout << record.qty << endl; cout << "Price: "; cout << record.price << endl << endl; inventory.read((char *)&record, sizeof(record)); } inventory.close(); }

Veritabanı Bağlantısı Gereksinimler Mysql sunucusu Mysql sunucuda çalışan bir veritabanı uygulaması Mysql C++ sürücüsü (kitaplık) 20

Kaynaklar Robert Lafore, Object Oriented Programming in C++, Macmillan Computer Publishing Deitel, C++ How To Program, Prentice Hall Prof. Dr. Celal ÇEKEN, Programlamaya Giriş Ders Notları 21