Bu site emekli olmuştur. Arşiv amaçlı olarak BT AKADEMİ sponsorluğunda yayın hayatına devam etmektedir.




C#nedir?com
 
YAZAR HAKKINDA
Volkan Atasever
Volkan Atasever
http://www.csharpnedir.com/
İletişme geçmek için tıklayın.
8 Makalesi yayınlanmakta.
Yazar hakkında detaylı bilgi için tıklayın.
Yayınlanan diğer makaleleri için tıklayın.
İlgili etiketler: #define baslik bunlar burada calloc dosyamizi islemleri kayit=(muvk kullanim makalemde olacaktir. oldugu programci sizlere yerine C / Sys Prog. Volkan Atasever
 
YAZI HAKKINDA
Türü : Makale
Serbest Köşede C#nedir?com üyelerinin hazırladıkları yazılar yayınlanır. Bu yazılar editör incelemesine girmeden yayınlanır.
Seviyesi : Başlangıç
Kategori : C / Sys Prog.
Yayınlanma Tarihi : 3.6.2005
Okunma Sayısı : 28016
Yorum Sayısı : 0     yorum yaz
Site İçi AramaSİTE İÇİ ARAMA
Üye Girişini AçÜye GİRİŞİ
Üye girişi için tıklayın.
Kullanıcı Adı
Şifre
 
Beni her zaman hatırla
Bir hafta boyunca kullanıcı bilgilerinizi kullanıcı çıkışı yapana kadar hatırlar. (Paylaşılan bilgisayarlarda önerilmez.)
 
Şifremi / Kullanıcı Adımı unuttum.
 
.net TV RSS Serbest KÖŞE (?)
Serbest Köşede C#nedir?com üyelerinin hazırladıkları yazılar yayınlanır. Bu yazılar editör incelemesine girmeden yayınlanır.
emre TAŞ
Silindi
emre TAŞ
yazının devamı >
emre TAŞ
silindi
emre TAŞ
yazının devamı >
emre TAŞ
silindi
emre TAŞ
yazının devamı >
emre TAŞ
silindi
emre TAŞ
yazının devamı >
emre TAŞ
silindi
emre TAŞ
yazının devamı >
Makale Gönder Bende Yazmak İstiyorum
.net TV RSSBlogroll
Turhal Temizer
Conda install environment.yml Package 23.11.2024
Turhal Temizer
Mac OS/X Removing CUDA 23.11.2024
Burak Selim Şenyurt
Rust ile ECS Yaklaşımını Anlamak 23.11.2024
Burak Selim Şenyurt
Birlikte Rust Öğrenelim Serisi 23.11.2024
  Diğer Herşey
Sponsorlar
BT Akademi
Medya Portakal
Video Hosting Sponsoru
Csharpnedir.com bir Ineta üyesidir
Uzman Abi
Her Yönüyle C# - Sefer Algan
Basit Dosya İşlemleri - 2
 
Kapat
Sayfayı Yazdır Sık Kullanılanlara Ekle Arkadaşıma Gönder MySpace Del.Ico.Us Digg Facebook Google Mixx Reddit StumbleUpon
İlk makalemde sizlere Basit Dosya İşlemleri adı altında bazı bilgiler aktarmaya çalıştım. Görmüş olduğunuz gibi o makalemizde her bilgi tek kayıt olarak atılıp her biri için farklı dosyalar oluşturuluyordu. Peki ’biz bu bilgileri tek bir dosyada tutamaz mıyız?’ diye bir soru geliyor aklımıza. Bu da yapılması kolay, ama bir o kadar da emek isteyen bir iş.

Unutmayın ki çaba ve emek bizler için vazgeçilmez bir olgudur. Bu makalemde sizlere genel bir şekilde dosyamızı temiz bir şekilde nasıl oluşturabileceğimiz anlatacağım. Bu bilgilerden yararlanarak bir txt uzantılı dosyadan istediğiniz bilgileri de çekebilirsiniz.

Günümüzde de dosya işlemlerinin çok can alıcı noktalarda işimize yaradığını görebilirsiniz. İster bilgisayar bölümü öğrencisi yada basit araçlar yapan bir programcı olan kişi için ram de çalışarak çözemeyeceğiniz işlemler olabilir. Burada dosya işlemleri can alıcı nokta oluyor. Dosya işlemlerinin de durduğu, yetişemediği noktalarda tabi ki de database bağlantıları vazgeçilmezdir. Oraya gelininceye kadar bu işlemleri halletmek ise vazgeçilmezlerimizdendir.

Yapılar (structs) ise dosya işlemleri ile çok iyi uyuşmuş bir bileşendir. Programımıza başlayalım. Şöyle olsun bir avukatlık bürosundaki kayıtları tutan ve bunlar üzerinde işlem yapan işe yarar bir program tasarlayalım.

Başlık (header) dosyalarımızı ekleyelim. Ve define bildirimlerimizi yapalım. Bildiğiniz gibi define’lar bir öngörü olabilir bizim için.

#include <stdio.h>
#include <stdlib.h>
#include <conio.h>

#define MAX1 15
#define MAX2 15
#define MAX3 12
#define MAX4 45
#define MAX5 10
#define MAX6 6

//Yapımızı belirtelim :
typedef struct kayit
{
     char soyad[MAX1];
     char ad[MAX2];
     char tel[MAX3];
     char adres[MAX4];
     char no[MAX5];
     char not[MAX6];
}muvk;

Yapımız, yapacağımız iş doğrultusunda hazırlandı bizim yapacağımız program bir avukatlık bürosunda kullanabilecek basit bir müvekkil dosya numaralarını tutabilecek ve işleyebilecek bir çözüm.

İlk makalemdeki gibi tek kayıt atarken bir sorun çıkarmayan bir husus ise temiz bir kayıt atmamız için dosyaya yazacağımız bölgeyi temizlemek olacaktır. Bunun için calloc bize en önemli kısımda yardım etmiş olacaktır. add() fonksiyonumu yazalım. Bu fonksiyonun ilk makaleden neredeyse bir iki kısım harici farkı yoktur. İşte add() fonksiyonumuz:

void add()
{
    clrscr();
    ogr *kayit;

    do{
       kayit=(muvk *)calloc(sizeof(muvk),1);
    } while(kayit==NULL);

    FILE *fp;
    fp = fopen("Muvekkil.vol","a+");
    puts("Soyadi:");
    fflush(stdin);
    gets(kayit->soyad);
    puts("Adi:");
    gets(kayit->ad);
    puts("Telefonu:");
    gets(kayit->tel);
    puts("Adres:");
    gets(kayit->adres);
    puts("Dogum:");
    gets(kayit->dogum);
    puts("Not:");
    gets(kayit->not);
    fwrite(kayit,sizeof(muvk),1,fp);
    fclose(fp);
    free(kayit);
    getch();
}

Fonksiyonumuzu inceleyelim : İlk önce muvk veritipinden bir pointer yarattık. Burada muvk veri tipi diyebilmemin nedeni ise typedef bildiriminin yapılarla kullandığımız ve çok iyi bir şekilde uyuşan kullanım tarzıdır. Bundan sonra yapılarla boğuşmak yerine muvk veri tipi diye belirtebiliriz.
Calloc fonksiyonu ile belirtilen miktarda yer açmış bulunuyoruz. kayit=(muvk *)calloc(sizeof(muvk),1); dediğimizde kayit ile belirtilen adrese muvk tipinden muvk’un uzunluğunun 1 ile çarpımı kadar yer istedik. Sizeof bildiğiniz üzere içindeki veri tipinin kaç byte olduğunu öğrenmemizi sağlar. Misal sizeof(int) ile sizeof(5) aynı şeydir(burada 5 herhangi bir tamsayıdır). Do while döngüsüne sokmamızda ki amaç ise bize o yeri alana kadar dönmesini sağlar. Günümüz bilgisayarlarında bol miktarda ram olduğu için ilk seferinde vermesi olasıdır. Ama programcı olarak her olasılığı düşünmek bizim için bir memnuniyeti ortaya çıkarır.


FILE *fp diyerek ise FILE tipinden fp isminde bir pointer yaratmış oluyoruz. Bu ise bir dosya göstericisidir. fopen fonksiyonu sayesinde ogrenci.vol adında bir dosya yaratıyoruz. Buradaki a+ nın manası ise hem değiştirme hem de yeniden yaratmadır. Dosyaların hangi moda açılabildiklerine kısaca değinelim. Kullandığımız belirteç erişim moduna göre :

"r" Okuma
"w" Yeniden Yazma
"a" Sona Ekleme
"r+" Okuma ve Yazma
"w+" Okuma ve Yeniden Yazma
"a+" Okuma ve Ekleme
Unutmadan söylemek gerekirse olmayan bir dosyadan okuma yaparsanız bu sizi üzecek sonuçlar meydana getirir. Programınızın istenmeyen bir şekilde sonuçlanmasına kadar gidebilir. Bunu da programcı olarak önceden hesaba katmanız lazım.

Puts fonksiyonumuzun kullanımı sıra dışı bir kullanım olmuş olabilir, lakin içindeki adresten null görene kadar yazdığı için vermiş olduğumuz her string de bir adres olduğu için rahatlıkla böyle bir kullanımla printf() in kalıplaşmış tek düzeliğinden kurtulabiliriz. Hemen ardından fflush(stdin); görüyoruz. Buradaki neden ilk makalemde de söylediğim gibi gets() fonksiyonunun bize vermiş olduğu hatalardan kaynaklanır. Rewind(stdin) de kullanabiliriz, misal stdin’i geri sarmış olabiliriz değil mi? Ama buradaki sorunda kullanım açısından bir problem yoktur.

fwrite() fonksiyonu ile belirtilen adrese bizim belirttiğimiz adres kayit olmaktadır. Bu adrese fp tarafından gösterdiğimiz kısma muvk veri tipimizin büyüklüğü kadar kayıt yazmış oluruz. Buraya kadar basit dosya işlemleri adlı makalemde ki başlangıça benzer bir başlangıç yapmış bulunuyorum. Son olarak dosyamızı kapatıp aldığımız yeri geri verdik.

Şimdi ise kayıtları listeleyelim. Bunun için list adında bir fonksiyon yazmalıyız. list() fonsiyonumuz:

void list()
{
    clrscr();
    int i=0,kadir;
    muvk *kayit;
    kayit=(muvk *)calloc(sizeof(muvk),1);
    FILE *fp;

    fp=fopen("Muvekkil.vol","r");
    fseek(fp,0,2);
    kadir=ftell(fp)/sizeof(muvk);

    while(i < kadir) {
       fseek(fp,i*103,0);
       fread(kayit->soyad,MAX1,1,fp);
       fread(kayit->ad,MAX2,1,fp);
       fread(kayit->tel,MAX3,1,fp);
       fread(kayit->adres,MAX4,1,fp);
       fread(kayit->dogum,MAX5,1,fp);
       fread(kayit->not,MAX6,1,fp);
       puts("Soyadi: ");
       puts(kayit->soyad);
       puts("Adi: ");
       puts(kayit->ad);
       puts("Telefonu: ");
       puts(kayit->tel);
       puts("Adresi: ");
       puts(kayit->adres);
       puts("Dogum Tarihi: ");
       puts(kayit->dogum);
       puts("Not Ortalamasi: ");
       puts(kayit->not);
       i++;
    }

    fclose(fp);
    free(kayit);
    getch();
}

Bu fonksiyonumuzda da muvk tipinden bir işaretçi tanımladık ve calloc fonksiyonuyla yer aldık. malloc ve calloc gibi fonksiyonlar stdlib başlık dosyasının içinde olduğu gibi alloc başlık dosyasının içinde de bulunur. Şimdi add fonksiyonumuzdan farklı olan kısma gelelim. fseek(fp,0,2) diyerek dosyamızın sonuna konumlandık. Burada 2 yerine SEEK_END de diyebilirdik. Üç adet ifade vardır, bunlar SEEK_SET,SEEK_CUR ve SEEK_END’dir. Bunlar dosyanın başından, şu anki konumundan ve dosyanın sonundan anlamlarına gelir. Kaç bayt ileride olduğumuzu öğrenmek için ise ftell(fp) kullanmaktayız. Kadir değişkenine ki burada en önemli ve can alıcı nokta burasıdır, kaç bayt ileride olduğumuzu öğrenip muvk veri tipinin bayt cinsinden değerine bölüyoruz. Dosyayı sona konumlandırdığımız için ise ortaya çıkan sonuç bize dosyamızda kaç kayıt olduğunu veriyor. Gerisi inanın daha anlaşılması kolay bir döngü. Burada do-while, for istediğiniz döngüyü kullanabilirsiniz. O an kaçıncı kayıttaysak dosyamızı oraya konumlandırarak tek tek okuma yapıyoruz. Okuduktan sonra istediğimiz gibi yazdırıp işlem yapma yetkilerine sahibiz. 103 bizim muvk veri tipimizin bayt cinsinden büyüklüğüdür, burada 103 yerine sizeof(muvk) de yazabilirdik. fread() fonksiyonumuzda tek nesne olarak okuma yaptığımız için 1 ifadesini kullanıyoruz ve tek tek yapımızı aktarıyoruz. Basit Dosya işlemleri-3 isimli makalemizde sizlere kayıt düzeltme ve kayıtta arama gibi bazı klasik işlemleri de aktaracağım.

Makalem hakkında her türlü eleştiri fikir veya ekleyeceğiniz ilginç dip notları [email protected] adresine mail olarak gönderebilirsiniz en kısa zaman da yanıtlanmış olacaktır. Bu konu hakkında daha basit seviyeli bilgiyi makalemin başında da belirtmiş olduğum gibi Basit Dosya İşlemleri adlı makalemde inceleyebilirsiniz.

Makale:
Basit Dosya İşlemleri - 2 C ve Sistem Programlama Volkan Atasever
  • Yazılan Yorumlar
  • Yorum Yaz
Bu konu hakkında yayınlanan yorum bulunmamaktadır.
"Yorum Yaz" tabını kullanarak sizde yorumlarınızı yazabilirsiniz.
Yorum yazabilmek için üye girişi yapmalısınız. Üye girişi için tıklayın.
Üye değilseniz Üyel Ol linkine tıklayarak üyeliğinizi hemen başlatabilirisniz.
 
  • Bu Konuda Son 10
  • Eklenen Son 10
  • Bu Konuda Geçmiş 10
Bu Konuda Yazılmış Yazılmış 10 Makale Yükleniyor
Son Eklenen 10 Makale Yükleniyor
Bu Konuda Yazılmış Geçmiş Makaleler Yükleniyor