Bu yazıda, C++ programlama dili kullanılarak yığın yapısı ile dosya okuma ve işlem örnekleri yer almaktadır Yığın yapısı kullanarak veri saklamayı ve dosya işlemlerini nasıl yapabileceğinizi öğrenebilirsiniz Tamamen örneklerle dolu bir rehber niteliğindeki yazımız sayesinde C++ öğrenmeniz daha da kolaylaşacak

C++ programlama dili, dosya okumanın ve dosyalarda işlem yapmanın temel kavramlarından biridir. Bu makalemizde, C++ dili ile yığın yapısı kullanarak bir dosyayı nasıl okuyabileceğimizi ve içerisindeki verilerle nasıl işlem yapabileceğimize dair örnekler vereceğiz. Dolayısıyla, bu makale, C++ programcıları için oldukça faydalı olacaktır.
Yığın yapısının en önemli özelliği, verileri son giren ilk çıkar prensibi ile depolamasıdır. Bu prensip sayesinde, dosyadan okunan verileri yığın yapısı içerisine depolayarak işlem yapmak oldukça kolay hale gelir. Bu işlem adımları, dosyanın açılması, verilerin okunması ve son olarak dosyanın kapatılması olarak özetlenebilir.
Dosya okumanın temel amacı, programlara yeni giriş yöntemleri sağlamaktır. C++ dili, dosya okumanın yanı sıra dosyada bulunan verilerle işlem yapmaya da olanak sağlar. Bu işlem örnekleri arasında, dosyaya yazma, metin yerine sayıların okunması ve satır satır okuma sayılabilir. Bu işlemlerin, programların başarılı bir şekilde çalışması için oldukça önemli olduğunu unutmamak gerekir.
Bu makalede, örnekler yardımıyla C++ programlama dili ile yığın yapısı kullanarak dosya okuma ve işlem yapma konularını ele aldık. Bu sayede, programlama becerilerimizi geliştirerek, dosyalarda bulunan verilerin nasıl işlenebileceğine dair fikir edinmiş olduk. Artık, C++ dilinde dosya okuma ve veri işleme konularında daha donanımlı hale geldik.
Yığın Yapısı Nedir?
Yığın yapısı, bilgisayarlarda verileri depolamak için sıklıkla kullanılan bir veri yapısıdır. Yığın yapısı, bir veri deposu olarak düşünülebilir ve son giren ilk çıkar (LIFO) prensibi ile çalışır. Bu, son eklenen elemanın ilk olarak çıkartılması anlamına gelir. Yığın yapısı ile veri işleme işlemleri hızlandırılabilir ve daha kolay hale getirilebilir.
Yığı kanstruktorü, eleman eklemek için push() ve eleman çıkarmak için pop() fonksiyonlarını içeren bir sınıftır. Yığın yapısı, elemanların göstericiler aracılığıyla depolanmasına izin verir. Yığın yapısı verilerinin kullanımına örnek olarak, bir web tarayıcısında ziyaret edilen web sayfalarının URL'lerini tutmak verilebilir.
Yığın yapısı ile yapılan işlemlere örnek olarak, resim işleme, grafik işleme, oyun programlama ve simülasyon yazılımı gibi birçok uygulama bulunmaktadır. Genellikle, yığın yapısı, önceden tanımlanmış bir boyutta veri ile çalışır ve bu boyut, elemanların yığına eklenmesine veya yığından çıkarılmasına olanak tanır.
- Yığın yapısının en önemli özelliği, son giren ilk çıkar prensibi ile çalışmasıdır.
- Yığının ana işlevi, elemanlar için ön tanımlı bir depolama alanı sağlamaktır.
- Yığın yapısı, veri işleme işlemlerini hızlandırabilir ve daha kolay hale getirebilir.
Dosya Okumanın Önemi
Birçok C++ uygulaması, dosyalardan veri okuyarak ve bu verileri işleyerek çalışır. Bu yöntem, bellekteki verilerin kaybını önler ve uygulamanın esnekliğini artırır. Dosya okumanın temel amacı, veri girişi yapmak için yeni bir yöntem sağlamaktır. Ayrıca, dosya okuma, verileri el ile girme zahmetinden kurtararak uygulamanın kullanımını kolaylaştırır. Dosya okuma, uygulamanın daha dinamik olmasını sağlayarak, verilerin güncellenmesine olanak tanır.
Dosya okuma, C++ programlama dili ile veritabanlarına veya web servislerine erişemeyen uygulamalar için önemlidir. Dosya okuma fonksiyonları, verileri okur ve bunları programın kullanımına uygun hale getirir. Bu sayede, kullanıcıların dosyalarını okuyarak işlerini tamamlamasına olanak tanır. Dosya okumanın avantajlarından biri de dosyaların taşınabilirliğidir. Bu nedenle, dosya okuma hem yerel hem de uzaktaki verileri kullanmak için kullanılabilir.
Dosya Okumak İçin Adımlar
Dosya okumak için öncelikle dosyayı açmalıyız. Bunun için ifstream sınıfını kullanabiliriz. Dosyaya ulaşmak için dosya yolunu belirtmeliyiz. Dosya yolunu yanlış belirtirsek, dosya açılamayabilir.
Açma modu | Açıklama |
---|---|
ios::in | Dosyayı okuma modunda açar. |
ios::out | Dosyayı yazma modunda açar. |
ios::app | Dosyaya ekleme modunda açar. |
Bir sonraki adım, dosyadan verileri okumaktır. Dosyadan okuduğumuz verileri bir yığın yapısında depolayabiliriz. Bu işlemi gerçekleştirmek için öncelikle bir yığın yapısı oluşturmalıyız. Ardından while döngüsü ile dosyadan veri okumalı ve yığın yapısına eklemeliyiz.
Son adım ise, dosyayı kapatmak için dosya işaretçisini sıfırlamak ve dosyayı kapatmak. Dosyayı kapatmadığımızda, bellek sızıntısı oluşabilir. İşlem tamamlandıktan sonra, bellekte kalan verileri temizlemek için delete fonksiyonunu kullanabiliriz.
Dosya Açmak
Dosya okuma işlemine başlamadan önce, dosyayı açmak gerekir. Bu işlem için C++'ta ifstream sınıfını kullanabiliriz. Dosyayı açmak için dosya adını parametre olarak vererek bir ifstream nesnesi tanımlamalıyız. Örneğin, "dosya.txt" dosyasını açmak için şu kodu kullanabiliriz:
|
Çoğu C++ uygulamasında, dosya verileri okunarak ya da üzerinde işlemler yaparak kullanılır. Dosya okuma işlemi için, ilk olarak dosyayı açmış olmamız gerekir. Dosya açma işlemi için std::ifstream sınıfını kullanabiliriz. Bu sınıf, ifstream değişkeninin tanımlandığı yerde dosyayı açar. Dosya açma işlemini, dosya ismi aracılığıyla gerçekleştirebilirsiniz.
ifstream inFile; inFile.open("dosya.txt");
Dosya açma işlemi başarılı olursa, inFile nesnesi, dosyaya okuyabileceği bir girdi akışı olarak ayarlanır. Dosyaya okuma işlemini gerçekleştirirken, uzunluğuna göre otomatik olarak tamponlama yapar ve girdi akışını bitirdikten sonra dosyayı kapatır. Bu sayede, akış bitiminde dosyanın kapatılması unutulmaz.
sınıfını kullanabiliriz.Dosyalardan veri okumak için, dosyanın açılması gerekir. Dosyayı açmak için ifstream sınıfını kullanabiliriz. Bu sınıf, dosyayı okumak için gerekli olan tüm işlevleri sağlar.
Dosya açma işlemi sırasında, dosya adını ve açılabilecek dosya modunu belirtiyoruz. Dosya modu, dosyanın açılma şeklini belirler. "ios::in" modu, dosyanın sadece okunabileceğini belirtir. Bu modu kullanarak, dosya açılır ve veriler okunmaya hazır hale gelir.
Açma Modu | Açıklama |
---|---|
ios::in | Dosyayı okumak için açar. |
ios::out | Dosyaya yazmak için açar. Dosya yoksa, yeni bir dosya oluşturulur. |
ios::app | Dosyayı dosya sonuna eklemek için açar. Dosya yoksa, yeni bir dosya oluşturulur. |
ios::ate | Dosyanın sonundan başlamak üzere dosyayı açar. |
Dosya açma işlemi başarılı olduysa, dosya işaretçisi dosyanın başına ayarlanır. Bu, dosyanın okunabilecek ilk verisinden önce gelir. Dosya açma işlemi başarısız olursa, bir hata kodu elde edilir. Bu durumda, hata kodu belirtilen hata kodu örneğinde olduğu gibi -1 de olabilir.
Verileri Okumak
Dosyaya ulaşmanın ve açmanın ardından, artık dosyadaki verileri okumaya başlayabiliriz. Bunun için, ifstream sınıfının okuma işlevlerini kullanabiliriz. Okunan verileri daha sonra bir yığın yapısında depolayabiliriz.
İlk olarak, dosyadan veri okumadan önce, dosya işaretçisini öncelikle dosyanın başlangıcına götürmemiz gerektiğini unutmamalıyız. Bunun için seekg() fonksiyonunu kullanmalıyız. Ardından read() fonksiyonu ile belirlenen boyutta veriler okunabilir ve bir yığın yapısına depolanabilir.
İşlev | Açıklama |
---|---|
seekg() | Dosya işaretçisini belirli bir konuma taşımak için kullanılır. |
read() | Dosyadan belirtilen uzunlukta veri okur. |
Dosyadan okunan verilerin depolanması için en çok kullanılan veri yapısı yığın yapısıdır. Yığın, en altta olan elemanın daima en üstte gösterilmesi prensibi ile çalışır. Yani verileri okuduğumuzda, en alttaki veri en üstteki veri olarak depolanır ve bu şekilde okuma işlemi devam eder.
Verileri depolarken önemli bir nokta, dosyadan okunan verilerin doğru bir şekilde işlendiğinden emin olmaktır. Belirtilen veri türüne göre okuma işlemi gerçekleştirmemiz gerekir. Ayrıca okunan veriler, yığın yapısına uygun olarak doğru yol ve sıralamayla depolanmalıdır. Bu sayede, daha sonradan yapacağımız işlemlerde doğru veriye erişebiliriz.
Dosyayı Kapatmak
Dosyayı açtıktan sonra, dosyanın işlemi tamamlandığında kapatılması önemlidir. Dosyayı kapatmak için dosya işaretçisini sıfırlamalıyız. Bu işlem, dosyadaki işaretçiyi dosyanın başlangıç pozisyonuna geri getirir. İşaretçinin başlangıç pozisyonunda olması, dosyanın bir sonraki işlem için hazır olduğu anlamına gelir. Ardından, dosyayı kapatmalıyız. Dosyayı kapatmadan önce, dosyanın okuma veya yazma modunda açılmış olup olmadığını kontrol etmeliyiz.
Dosyayı kapatırken, dosya işaretçisinin sıfırlanması işlemi önemlidir, aksi takdirde dosya sonrasında okunamayabilir, yazılamayabilir veya bellekte boşa yer kaplayabilir. Ayrıca, açık dosyalara erişirken hatalar önlenmesi için dosyaların zamanında kapatılması önemlidir. C++ programlama dili, dosyaların otomatik olarak kapatılmasını sağlamak için RAII (Kaynak Erken İnziva) tekniğini kullanır.
Dosya İşleme Örnekleri
Dosya işleme, C++ programlama dilinin temel bir parçasıdır ve birçok uygulamada dosyalarla çalışmak gereklidir. Dosya işlemek için verileri okuyabilmeli ve gerektiğinde değiştirebilmeliyiz. Bu nedenle, dosya işleme becerileri C++ programlamacıları için önemlidir. Dosyalardan okunan verilerin işleme örnekleri şunları içerebilir:
Dosya yazma, C++ ile dosya işleme becerileri arasında önemli bir yere sahiptir. Dosyaya yazmak için ofstream sınıfını kullanabiliriz. ofstream sınıfı, dosya oluşturmak, açmak ve dosyaya veri yazmak için kullanılır.
Örneğin, bir öğrenci kayıt sistemi oluşturduğunuzu ve öğrencilerin adını ve sınav sonuçlarını bir dosyaya kaydettiğinizi düşünün. Bu verileri dosyaya yazmak için aşağıdaki kodu kullanabilirsiniz:
```ofstream dosya("ogrenciler.txt");if(dosya.is_open()){ dosya << "Adi Soyadi: Sinan Celik\t Notu: 75\n"; dosya << "Adi Soyadi: Aylin Kaya\t Notu: 85\n"; dosya.close();}else{ cout << "Dosya acilamadi." << endl;}```
Bu kod, "ogrenciler.txt" adlı bir dosya oluşturur ve içine öğrenci bilgileri yazar. Öğrenci bilgileri, her satıra bir öğrenci olacak şekilde dosyaya yazılır.
Dosyadan okunan verilerin tipini dönüştürmek, programın doğru bir şekilde çalışması için çok önemlidir. Bu örnekte, metin yerine sayıların okunmasını ele alacağız.
Diyelim ki bir dosyada sınav sonuçları sayılarla yazılmıştır, ancak programımız bu sayıları okumak için bir metin olarak yapılandırılmıştır. Bu durumda, dosyadan sayıları okumak ve değişkenlerde kullanmak için dönüşüm yapmamız gerekir.
Aşağıdaki örnek, bir dosyadan sayıları okuyup toplayan basit bir programı göstermektedir:
```ifstream dosya("notlar.txt");string satir;int toplam = 0;if(dosya.is_open()){ while(getline(dosya, satir)) { int notu = stoi(satir); toplam += notu; } dosya.close(); cout << "Toplam not: " << toplam << endl;}else{ cout << "Dosya acilamadi." << endl;}```
Bu kod, "notlar.txt" adlı bir dosyayı okur ve her satırdaki sayıları toplar. Notlar string olarak okunur ve stoi() fonksiyonu kullanılarak int'e dönüştürülür.
Büyük dosyaları okumak için dosyayı bir satır/satır okuma yöntemi kullanabiliriz. Bu işlemi gerçekleştirmek için getline() fonksiyonunu kullanabiliriz. getline() fonksiyonu, bir dosyadan stringler okumak için kullanılır.
Aşağıdaki örnek, bir dosyadan satır satır okumayı ve ekrana yazdırmayı göstermektedir:
```ifstream dosya("metin.txt");string satir;
if(dosya.is_open()){ while(getline(dosya, satir)) { cout << satir << endl; } dosya.close();}else{ cout << "Dosya acilamadi." << endl;}```
Bu kod, "metin.txt" adlı bir dosyadan tüm satırları okuyarak ekrana yazdırır. Her satır, cout ifadesi kullanılarak ekrana yazdırılır.
Yukarıdaki örneklerde olduğu gibi, C++ ile dosya işlemek oldukça basit ve verimlidir. Doğru kullanıldığında, C++ ile dosya işleme becerileri, birçok farklı programlama senaryosunda kullanılabilecek önemli bir araçtır.
Dosyaya Yazmak
C++ ile dosyaya yazma işlemi, oldukça kullanışlı bir işlemdir. Dosyaya yazmak için ofstream sınıfını kullanırız. Bu sınıfı kullanarak, C++ ortamında dosya işlemlerini yapabiliriz. Şimdi, dosyaya yazma işlemini adım adım ele alalım.
- İlk olarak, dosyayı açmalıyız.
- Dosyayı açtıktan sonra, dosyaya yazmak istediğimiz verileri ofstream sınıfının << operatörü yardımıyla yazabiliriz.
- Son olarak, dosyayı kapatmalıyız.
Aşağıdaki kod bloğu, bir örnek dosyaya yazma işlemini göstermektedir:
#include#include using namespace std;int main() { // Dosyayı aç ofstream dosya("ornek.txt"); // Dosyaya yaz dosya << "Bu, bir örnek yazıdır." << endl; // Dosyayı kapat dosya.close(); return 0;}
Yukarıdaki kod bloğunda, ofstream sınıfını kullanarak ornek.txt adlı bir dosya oluşturduk ve dosyaya "Bu, bir örnek yazıdır." yazısını yazdık. Son olarak, dosyayı kapattık. Bu adımları uygulayarak, C++ ile başarılı bir şekilde dosyaya yazma işlemi gerçekleştirebiliriz.
ofstreamile Dosyaya YazmaDosyalara veri yazma işlemi, C++ programlama dilinde oldukça basit bir adımdır ve yazılan veriler, dosyaların sonuna eklenir. Bu işlemi gerçekleştirmek için ofstreamsınıfını kullanabiliriz. Bu sınıf, dosyaya yazabileceğimiz bir çıkış akışı (output stream) sağlar.
ofstream sınıfının kullanımı oldukça kolaydır. Öncelikle, bir dosya oluşturmak ve ismini belirlemek için bir dosya adı parametresiyle birlikte ofstreamfonksiyonunu çağırmalısınız. Dosyayı yazmak için Bir dosya yazmak için ofstreamsınıfını kullanmak da Dosyayı okumaya başlamadan önce, öncelikle dosyayı açmamız gerekiyor. Bunun için C++ önceden tanımlanmış komutları olan ifstream sınıfını kullanabiliriz. Bu sınıf, dosyayı açmak için kullanılan standart bir C++ sınıfıdır. Dosyayı açmak için, dosya adını ve işlem modunu belirtmemiz gerekiyor. İşlem modu, dosyanın hangi amaçla açıldığını belirtir; örneğin, bir dosyaya yazmak isteyebiliriz veya bir dosyadan okumak isteyebiliriz. Aşağıdaki örnek, "ornek.txt" dosyasını okumak için nasıl açacağımızı göstermektedir: Dosyadan okunan verilerin tipi, genellikle metin olarak okunur. Ancak birçok durumda, bu metin verilerinin sayısal olması gerekmektedir. Bu durumda, verileri sayısal formata dönüştürmeli ve işlemeliyiz. Bunu yapmak için, bir dizi kodlama tekniği kullanabiliriz. Örneğin, kullanıcıların dosyada açılan verilerin tipini seçebileceği bir eklenti oluşturabiliriz. Bu eklenti, kullanıcıların seçtiği tipi kullanarak verileri dönüştürür ve tüm işlemleri sayısal veriler üzerinde gerçekleştirir. Bunun yanı sıra, bir diğer yöntem olarak stringstream sınıfını kullanabiliriz. Bu sınıf, girdiyi tamamen yeni bir format haline getirmemize izin verir. Bu sayede, metin verileri sayısal verilere dönüştürülebilir ve ardından işlemler yapılabilir. Satır satır dosya okumak, büyük verilerin işlenmesinde büyük önem taşır. Bu yöntem, bellek yönetimi konusunda büyük avantajlar sağlar ve daha verimli bir şekilde işlem yapılmasını sağlar. Dosyayı açtıktan sonra, her satırı tek tek okuyarak işleme alabiliriz.
C++ Kodu Açıklama ofstream dosya;
dosya.open("dosya_adi.txt");
dosya << "Bu bir test dosyasıdır.";Boş bir ofstreamnesnesi oluşturun, "dosya_adi.txt" adlı bir dosya oluşturun ve dosyaya "Bu bir test dosyasıdır." yazın.
Komut Açıklama ifstream dosya("ornek.txt");
Dosya okuma modunda açılacaktır. ifstream dosya("ornek.txt", ios::in);
Bu satır, dosyanın okuma modunda açılacağını belirtir. Çünkü ios::inmodu, bir dosyayı okumak için kullanılır. Metin Yerine Sayıların Okunması
Satır Satır Okumak
Aşağıdaki örnek, dosyadan bir öğrenci listenin okunmasını ele almaktadır. Dosyada her satır bir öğrenci kaydını içerir. Dosyayı açtıktan sonra, getline fonksiyonu ile her satırı okuyabiliriz. Okuduğumuz her satırı özel bir sınıf objesine atayarak işlem yapabiliriz.
Dosya İçeriği Öğrenci Sınıfı Ahmet Yılmaz,20,123456 Öğrenci("Ahmet Yılmaz", 20, 123456); Ali Kaya,19,234567 Öğrenci("Ali Kaya", 19, 234567); Ayşe Özdemir,22,345678 Öğrenci("Ayşe Özdemir", 22, 345678);
Yukarıdaki tablo, dosyada bulunan öğrencilerin kayıtlarının nasıl okunduğunu göstermektedir. Okuma işlemleri tamamlandıktan sonra, öğrenci sınıfının içinde yer alan özellikleri kullanarak işlem yapabiliriz. Örneğin, kayıtlardan bir öğrenci numarasıyla sorgu yapabiliriz. Bu sorgu sonucu, öğrencinin adı ve yaşı gibi diğer özellikleri de elde edilebilir.
fonksiyonu, C++ programlama dilinde, bir dosyadan satır satır okuma yapabilen bir fonksiyondur. Bu fonksiyon, her okuma sırasındaki satırın sonunda bulunan satır sonu karakterini atlamak için kullanılır. getline fonksiyonu,
getline fonksiyonu, bir dosyadan satır satır okuma yapmak için kullanılabilen bir C++ fonksiyonudur. Bu fonksiyon, her satırın sonunda bulunan yeni satır karakteri (\n) veya belirlediğimiz başka bir karakteri bulana kadar dosyanın okunmasını sağlar. Bu yöntemyle dosyanın tamamı belleğe yüklenerek okunmaz, sadece okunması gereken satırlar belleğe yüklenir. Bu sayede bellek kullanımı azalır ve büyük dosyaların en verimli bir şekilde okunmasına olanak tanır.
getline fonksiyonu genellikle bir dizi karakter kullanılarak kullanılır. Bu karakter dizisi, açılış ve kapanış tırnak işaretleri arasında yer alır (örneğin, getline(dosya, satir, '\n')). Bu örnek örnekte, 'dosya' değişkeni, okunacak olan dosyayı temsil ederken, 'satir' değişkeni, okunan her satırın tutulacağı karakter dizisini ifade eder. Son olarak, '\n' karakteri, her satırın sonunda bulunan yeni satır karakterini ifade eder.
Aşağıda, getline fonksiyonunun kullanımına dair basit bir örnek verilmiştir:
#include #include #include int main(){ std::ifstream dosya("ornek.txt"); std::string satir;
if (dosya.is_open()) { while (getline(dosya, satir)) { std::cout << satir << std::endl; } dosya.close(); }
return 0;}
Bu örnekte, 'ornek.txt' dosyası açılır ve satır satır okunarak ekrana yazdırılır. İlk önce dosya açılır ve dosyanın açılıp açılamadığı kontrol edilir (dosya açılamazsa 'is_open()' fonksiyonu false döner). Sonra, dosyadan okunan her satır, 'getline(dosya, satir)' ifadesiyle 'satir' değişkenine atanır ve ekrana yazdırılır. Son olarak, dosya kapatılır.
Bu örnek, bir dosyadan satır satır okuma işlemini gerçekleştirirken getline fonksiyonunun nasıl kullanılabileceğini göstermektedir.