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: #include bellek dosyanin fonksiyonu fonksiyonumuzu ikinci islemleri karakter kayit=(muvk lazim. minimum oldugunu strcmp() string tekrar 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ı : 25877
Yorum Sayısı : 1     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 - 3
 
Kapat
Sayfayı Yazdır Sık Kullanılanlara Ekle Arkadaşıma Gönder MySpace Del.Ico.Us Digg Facebook Google Mixx Reddit StumbleUpon
Basit dosya işlemleri ve Basit Dosya İşlemleri – 2 adlı makalelerimin devamı olan bu makalemde sizlere dosyalar üstünde yapabileceğimiz diğer incelikleri göstereceğim. Mesela soyadına göre arama yapma veya dosyamızdaki bir kaydı değiştirme gibi. Dosyamız önceki makalede oluşturulmuş tu, buradaki anlatacaklarım da oraya bağımlı olarak devam edecektir.

Kayıt numarasına göre arama vb. uygulamalar karışıklığa yol açtığı için alt kriterlerde arama yapma ihtiyacı doğmuştur. Bir kütüphane uygulaması düşünelim. Kitabın sadece yazarını biliyoruz ve bize o yazara ait kitaplar lazım. Veya kitap adını biliyoruz, yazar adı lazım. Hepsi kod yazma sanatının incelikleridir. Yine de hepsi bir oluşumu işaret etmektedir, yani dosyayı.

Bir program yaparken de en memnuniyetsiz müşterinin ihtiyaçlarını karşılamak bizim için bir çıtadır (Bill Gates de sırlarını açırken buna benzer bir uygulamaya değinmiştir).

Şu anda ki temel ihtiyaçlarımız bunlardır. O zaman şimdi başlık (header) dosyalarımızı ve define ile belirttiğimiz ifadeleri tekrar hatırlayalım.

 

#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

//Yapımızı ise şöyleydi :

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 bir avukatın minimum ihtiyaçlarını karşılayacak şekilde tasarlanmıştır. İsterseniz ilk önce dosyamızda kriterlere göre arama yapan fonksiyonumuzu yazalım. Tek bir fonksiyon bize bütün kriterleri gerçekleştirmemizi sağlayacak minimum bilgiyi içermektedir.

void soyad()
{
    clrscr();
    FILE *fp;
    muvk *kayit;
    int i,kadir;
    char ara[15];

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

    fp=fopen("Muvekkil.vol","r");
    fseek(fp,0,2);
    kadir=ftell(fp)/sizeof(muvk);
    puts("Aranan kisinin Soyadi:");
    gets(ara);

    for(i=0;i kadir;++i){
       fseek(fp,i*103,0);
       fread(kayit->soyad,MAX1,1,fp);
       if(strcmp(ara,kayit->soyad)==0){
          rewind(fp);
          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);
       }
    }

    getch();
    fclose(fp);
    free(kayit);
}
Burada dikkat edilmesi gereken en önemli noktalardan biri, kadir değişkenine dosyanın hangi konumundaysak muvk veritipinin büyüklüğünü bölmüş olup kaç kayıt olduğunu bulmamızdır.

For döngümüzde her seferinde o anki kayıt açılmaktadır. For döngümüzün içinde kaçıncı kayıtsa, fseek hazır fonksiyonuyla o kısma konumlandırıyoruz. Sadece soyad kısmını okuyoruz. Hemen ardında if deyimimiz işletiliyor. strcmp() fonksiyonu if deyiminin vermiş olduğu müstesna kolaylıklardan ötürü bizim programımızla çok mükemmel bir şekilde işlemektedir.

İsterseniz strcmp() fonksiyonumuzu inceleyelim: strcmp() fonksiyonu, iki stringi karşılaştırıp bize bir tamsayı döndürür. (printf() ve scanf() fonksiyonlarının da bize geri dönüş değeri açısından sağladıkları faydaları unutmamak gerekir. Misal scanf() le klavyeden aldığımız herhangi bir basımın sayı veya karakter olduğunu bulabiliriz). strcmp() fonksiyonunun döndürdüğü sayıların anlamları şöyledir:

Değer
Açıklaması
Sıfırdan Küçük İlk string, ikinci string’den küçük
Sıfır İlk string, ikinci stringe eşit
Sıfırdan Büyük İlk string, ikinci string’den büyük
Bizim uygulamamızda da sıfıra eşit mi diye kontrol yapılıyor. Bu eşitlik sağlanırsa if deyimi icra ediliyor yani girdiğimiz karakter katarı dosyadan okuduğumuz karakter katarına eşit çıkmış oluyor ve aradığımız kritere uygun kayıtlar listeleniyor. İf deyimi için de kullandığımız rewind(fp) fonksiyonumuz dosyanın geri sarılmasını ifade edip, o an ki döngüdeki i değerinin saklanmasından faydalanılarak yapılmış bir eylemdir. Kaçıncı kayıtta koşul sağlanmışsa, tekrar fseek() fonksiyonu bize kolaylık sağlamaktadır. Dosyadaki herhangi bir kaydı düzeltmek ise yine bizim vazgeçilmezlerimizden ve temel işlemlerden biridir. Düzelteceğimiz kayda gidip bu işlemleri yapmak bizi oldukça memnun edecektir. Her türlü işlemi, bu fonksiyonları kullanarak yerine getirebilirsiniz.

void change()
{
    FILE *fp;
    muvk *kayit;
    int kadir,number;

    clrscr();

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

    fp=fopen("Muvekkil.vol","r+");
    fseek(fp,0,2);
    kadir=ftell(fp)/sizeof(kayit);
    puts("Kayıt No Giriniz:");
    scanf("%d",number);
    fseek(fp,&number*103,0);
    fflush(stdin);
    puts("Yeni Soyad:");
    gets(kayit->soyad);
    puts("Yeni Ad:");
    gets(kayit->ad);
    puts("Yeni Telefon:");
    gets(kayit->tel);
    puts("Yeni Adres:");
    gets(kayit->adres);
    puts("Yeni Dogum Tarihi:");
    gets(kayit->dogum);
    puts("Yeni Not Ortalamasi:");
    gets(kayit->not);
    fwrite(kayit,sizeof(muvk),1,fp);
    fclose(fp);
    getch();
    free(kayit);
}
Bu fonksiyonumuzda ise kayıt no’suna göre bir arama yapılmaktadır. Kayıt no’su alınarak o kayda gidilip yeniden o bölgede değiştirilme yapılmıştır. Yazıda kullanılan fonksiyonların prototipleri ve açıklamaları:

Fonksiyon Adı
Açıklaması
puts #include <stdio.h>
int puts(const char *str);
gets #include <stdio.h>
char gets(char *str) ;
ftell #include <stdio.h>
long int ftell(FILE *stream);
fseek #include <stdio.h>
int fseek(FILE *stream, long int offset,int origin);
fclose #include <stdio.h>
int fclose(FOLE *stream);
Stream ile ilişkili dosyayı kapatır ve tamponu temizler.
free #include <stdlib.h>
void free(void *ptr);
ptr’nin gösterdiği bellek bölgesini serbest bırakır ve bu bölgenin sonraki tahsisatlara hazır hale gelmesini sağlar.
calloc #include <stdlib.h>
void *calloc(size_t num, size_t size);
(num * size ) büyüklüğünde bellek tahsisatı yapar. Özetle size büyüklüğünde, num sayıda nesne içeren bir dizi için yeterli bellek tahsisatını yapar.
Bu makale veya diğer makalelerim hakkında görüşlerinizi ekleyebileceklerinizi veya yorumlarınızı [email protected] adresine mail olarak ulaştırabilirsiniz.

Makale:
Basit Dosya İşlemleri - 3 C ve Sistem Programlama Volkan Atasever
  • Yazılan Yorumlar
  • Yorum Yaz
HAZ
4
2005
struct kayit Ara(const char *aranan) { FILE *fp kayit muv if(fp=fopen(Muvekkil.vol,r)) while(fread(muv&,sizeof(muv),1,fp)) if(!stricmp(muv.ad,aranan)) return muv } Arama kasıntı. deneme fırsatım yok ama çalışmasını umut ederim
Sayfalar : 1 
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