6
Oca'11

C Dosyalama – Kayıt Silme Fonksiyonu (C Programlama Dili)

C programlama dilinde, dosyalama en çok ihtiyaç duyulan işlevlerden birisi.Programın çalışma süresi içindeki verileri, program kapanınca saklı tutabilmek ve daha sonra tekrar kullanabilmek için dosyalamaya ihtiyaç duyulur.

Örneğin bir kayit defteri oluştururken dosyalama kullanmak gerekli.Kayit defterinde olacak kayıtlar struct yapılarının yardımıyla tanımlanır.Bir telefon rehberi için kayıt silme fonksiyonu yapalım.İlk önce struct yapısını tanımlamak lazım;

typedef struct tel_rehberi{

	char ad[15];
	char soyad[15];
	char tel[11];

}telRehberi; //typedef kullandığımız için
//program telRehberi gördüğü yere struct tel_rehberi yazar.

telRehberi rehber; //tel_rehberi tipinden bir veri tanımladık.

Struct yapısına uygun olan silme fonksiyonu;

int Sil(){

FILE *dosya,*yeni; //dosya işaretçileri tanımlama
char aranan[15];

printf("Silinecek kayit adi ? :");
scanf("%s",&aranan);

dosya=fopen("rehber.txt","r"); //bilgiler dosyadan okunacak.
yeni=fopen("rehber1.txt","w"); //yeni bilgiler bu dosyaya yazılacak.

   while(!feof(dosya)){

      fscanf(dosya,"%s %s %s",rehber.ad,rehber.soyad,rehber.tel);

      if(strstr(rehber.ad,aranan)){//Silinecek ad bulununca dosyadan 1 kayıt daha okunur ve silinedek kayıt atlanmış olur.
      //strstr(rehber.ad,aranan) yerine strcmp(rehber.ad,aranan)==0 yazabiliriz.

            fscanf(dosya,"%s %s %s",rehber.ad,rehber.soyad,rehber.tel);

      }//silinecek ad bulunana kadar alt satırdaki fprintf okunan veriyi yeni dosyaya yazar.

      fprintf(yeni,"\n%s\t%s\t%s",rehber.ad,rehber.soyad,rehber.tel);

   }

fclose(dosya);
fclose(yeni);

remove("rehber.txt");
rename("rehber1.txt","rehber.txt");

return 0;
}
  • malik

    scanf("%s",&aranan);
    dikkat kaçmış olmalı '&' olmaması gerekir galiba

    • Turgay Özgür

      & programa bir adrese yazacağını söyler.& olmazsa o satıra gelince program hata verir.

    • http://turgayozgur.com/ Turgay Özgür

      Denenmiş kod parçalarını incelemektesiniz.

  • Burak YILMAZ

    teşekkürler, çok işime yaradı

  • okan

    eğer tek bir kayıt varsa onu silme konusunda sıkıntı var yardımcı olacak biri var mı

    • http://turgayozgur.com/ Turgay Özgür

      Dosyada kaç kayıt olduğunu tutan bir değişken üzerinden, eğer tek kayıt varsa while içerisindeki işlemlerin gerçekleşmesini engelleyebilirsiniz ya da try catch mekanizması ile olası hata durumlarını ele alarak bir düzenleme yapabilirsiniz.

      Mesela if içerisindeki satırı try catch içine koyarsanız, tek kayıt olması durumunda bu kayıt silinecekse catch bloğuna düşecektir program. Siz de burada döngüden çıkarak işlemin doğru devam etmesini sağlayabilirsiniz.

  • Furkan Gerçek

    Hocam elinize sağlık, mükemmel anlatılmış. Çok işime yaradı !

Yeni makaleleri E-Mail ile takip edin!