6
Oca'11

C Dosyalama – Kayıt Güncelleme Fonksiyonu (C Programlama Dili)

Dosyaya eklenen kayıtlarda güncelleme yapmak için güncellenecek kaydı bulmak ve ilgili kayda kadar tüm kayıtları yeni dosyaya yazmak, ilgili kaydın ise güncel bilgilerini alıp onları yeni dosyaya yazmak gerekir.Son olarak da kalan kayıtları yeni dosyaya yazdıktan sonra eski dosyayı silip yeni dosyanın adını sildiğimiz dosya ile aynı yaparız.

Kayıtları güncellerken kullanılan struct’ı tanımlama;

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.


Güncelleme Fonksiyonu;

int Guncelle(){

FILE *dosya,*yeni;
char aranan[15];

printf("Guncellenecek Kaydin Adi? :"); 
scanf("%s",&aranan);

dosya=fopen("rehber.txt","r");
yeni=fopen("rehber1.txt","w");

while(!feof(dosya)){

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

   if(strstr(rehber.ad,aranan)){//strcmp(rehber.ad,aranan)==0

      printf("            Yeni Bilgiler:\n\n");//yeni bilgileri al.

      printf("Ad: "); scanf("%s",&rehber.ad);

      printf("Soyad : "); scanf("%s",&rehber.soyad);

      printf("Tel No : "); scanf("%s",&rehber.tel);

   }

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;
}
  • kemal

    turgay bu kodlarda baya bi sıkıntı var galiba.
    derleyicide fln denemedim.yazdırırken sorun dosya1 kullanmıssın heralde o dosya olcak. ama o zmn dosyayı r mod da acmıs oldugundan gene kayıtı güncelleyemez… 2. bi dosyacı acmıssın heralde 2. dosyaya aktarcaktın sonradan vazgeçtin :)

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

      Programın çalışmasında sorun olmaz ama kendi yazdığım bir programın parçasıydı bu.Buraya yazarken birkaç değişiklik yaptım.Dediğin dosya1 yerine yeni yazılması gerekiyor.Düzelttim.Uyarın için sağol.

  • aybars

    Turgay bunu silme gibi değilde üstünde değişiklik yaparak denedin mi,yani yeni dosya açıp ismini değiştirmeden?

    • Turgay Özgür

      Aybars biraz geç cevapladım üzgünüm yorumlara ancak bakabildim.Bir karışıklık olmuş yorum sisteminde.
      Dediğin gibi denemedim.Ancak öylede yapabiliriz.Aynı dosya içinde güncellenecek kaydı bulunca yeni bilgileri alıp strcpy(); fonksiyonu ile eski bilgiler ile yer değiştirme yapılabilir.İyi çalışmalar.

  • malik

    biz de bu programın benzeri program yazdık fakat tc kimlik numarasını dosyaya yazdırıyoruz.
    daha sonra programı kapatıp açtığmızda girdiğimiz tc eğer dosyada kayıtlı ise hata vermesini istiyoruz . Bu konuda yardımcı olursanız sevinirim

    • Turgay Özgür

      Yine bir while döngüsü ile dosyanın sonuna kadar kayıtları belirli formatta okuyacaksınız.(yukarıdaki örnek bu şekilde okuyor.) Her okunan kayıdın tc kimlik numarasını sizin aradığınız numara ile karşılaştıracaksınız.Aranan kayıtla dosyadan okunan kayıt tutuyorsa hata mesajı yayınlayacaksınız.

      sözde kodu:

      while(dosya sonuna gelene kadar){
      kayıtları belli formatta oku
      if(arananTC==okunanTC) printf(hata mesajı ver.);
      }

  • malik

    tşk projeyi teslim ettik. İlginiz için çok tşkler

    • Turgay Özgür

      Rica ederim.

Yeni makaleleri E-Mail ile takip edin!