• 30-11-2015, 23:23:29
    #1
    arkadaşlar merhaba c'de bir ödevim için not defterine kayıt ettiğim veriler arasında arama yapıp bulunan veriyi silmem lazım nasıl yapabilirim acaba yardımcı olabilir misiniz?
  • 01-12-2015, 00:21:22
    #2
    C bilmiyorum eğer yeteri kadar kod bilgin varsa şu şekilde yapabilirsin

    metin belgesini okursun
    silmek istediğin veriyi replace ederek silersin ve dosyayı yeniden metin belgesi olarak yazdırırsın

    C# olarak ile şu şekilde örneğini yaptım


    using System;
    using System.Collections.Generic;
    using System.IO;
    using System.Linq;
    using System.Text;
    using System.Threading.Tasks;
    
    namespace ConsoleApplication2
    {
        class Program
        {
            static void Main(string[] args)
            {
                string reading = string.Empty;
                using (StreamReader sr = new StreamReader("emre.txt"))
                {
                    reading = sr.ReadToEnd();
                    sr.Close();
                }
                using (StreamWriter sw = new StreamWriter("emre.txt"))
                {
                    sw.WriteLine(reading.Replace("emre","emreeeeeeeeeeeeeeee"));
                    sw.Close();
                }
                    Console.ReadLine();
            }
        }
    }
  • 01-12-2015, 00:29:01
    #3
    Dosyayı oku, metini stringe at. stringnteki dosyayı sil. guncelle. tekrar yazdır.
  • 01-12-2015, 02:29:07
    #4
    Biraz daha detay verebilirseniz daha iyi yardım alabileceğinizi düşünüyorum.

    Örneğin verilerinizi dosyada ne şekilde tutuyorsunuz?
  • 01-12-2015, 12:32:43
    #5
       FILE *fp;
      	 		fp = fopen("kitapekleme.txt","a");
      	 		char adi[10],yazari[10];
      	 		int sayfa=0;
    			printf("Kitabin Adi : ");
    			gets(adi);
    			printf("Kitabin Yazari : ");	
    			gets(yazari);
    			printf("Sayfa Sayisi : ");	
    			scanf("%d",&sayfa);
    			fprintf(fp,"\nKitabin Adi : %s\n",adi);
    			fprintf(fp,"Kitabin Yazari : %s\n",yazari);
    		fprintf(fp,"Sayfa Sayisi : %d\n----------------------------",sayfa);
    		printf("\t************Kitap Basariyla Eklendi************");
    			getch();
       				fclose(fp);
    usta kodlar bu şekilde kitap adına göre arama yaptırmam lazım saolasın cevap için bu arada
    kubilaykarpat adlı üyeden alıntı: mesajı görüntüle
    Biraz daha detay verebilirseniz daha iyi yardım alabileceğinizi düşünüyorum.

    Örneğin verilerinizi dosyada ne şekilde tutuyorsunuz?
  • 01-12-2015, 19:42:11
    #6
    Anladım,

    Dosyada veriler arka arkaya sıralı bytelar olarak tutulur siz aradan bir şeyi silmek isterseniz sileceğiniz veriden sonra gelen bytlearı kaydırmanız gerekir. Şekille anlatmak gerekirse

    A | B | C | D | E
    Bu sizin dosyadaki verileriniz ve C yi silmek istiyorsunuz

    A | B | | D | E
    C'yi sildiniz fakat yeri boş kaldı, bunu çözmek için C'den sonra gelen verileri kaydırmanız gerekir

    A | B | D | E
    Ve ortaya böyle bir sonuç çıkar, C silinmiş olur

    Şöyle bir yöntem uygulayabilirsiniz

    Yeni bir dosya açar
    Eski dosyanızı baştan okumaya başlar
    Silmek istediğiniz elemana kadar her satırı aynen yeni dosyaya yazarsınız
    Silmek istediğiniz elemanla karşılaşınca yeni dosyaya yazmadan atlarsınız (string compare yapmanız gerekiyor diye tahmin ediyorum bu aşamada)
    Daha sonra gelen elemanları da olduğu gibi yeni dosyaya yazarsınız böylece o verileriniz silmek istediğiniz eleman hariç yeni dosyaya taşınmış olur.

    --R10.NET; Flood Engellendi -->-> Yeni yazılan mesaj 19:42:11 -->-> Daha önceki mesaj 19:36:30 --

    Bir de küçük bir tavsiye olarak, dosyaya verileri yazarken

    Kitap adı: Sefiller
    Yazar: Victor Hugo
    Sayfa Sayısı: 300 şeklinde yazıyorsunuz

    Şayet bu verileri tekrar programınıza almak istiyorsanız örneğin silmek için okuyup karşılaştırmanız gerekiyorsa bu veriyi işlemede sorun yaşayabilirsiniz onun yerine

    Victor Hugo
    Sefiller
    300
    Suç Ve Ceza
    Fyodor Dostoyevski
    400

    şeklinde yazabilirsiniz, siz zaten dosyaya nasıl yazdığınızı biliyorsunuz okumak da sıkıntı olmayacaktır, daha iyi bir yöntem olarak da
    Victor Hugo ; Sefiller ; 300
    Suç ve Ceza ; Fyodor Dostoyevski ; 400
    şeklinde dosyaya yazıp, okuma kodunuzda bunu uygun düzenleme yapabilirsiniz bu daha anlaşılır ve kolay işlenebilir bir çözüm sunacaktır diye düşünüyorum
  • 01-12-2015, 23:15:06
    #7
    cevap için çok saol denicem bakalım yapabilirim insallah

    kubilaykarpat adlı üyeden alıntı: mesajı görüntüle
    Anladım,

    Dosyada veriler arka arkaya sıralı bytelar olarak tutulur siz aradan bir şeyi silmek isterseniz sileceğiniz veriden sonra gelen bytlearı kaydırmanız gerekir. Şekille anlatmak gerekirse

    A | B | C | D | E
    Bu sizin dosyadaki verileriniz ve C yi silmek istiyorsunuz

    A | B | | D | E
    C'yi sildiniz fakat yeri boş kaldı, bunu çözmek için C'den sonra gelen verileri kaydırmanız gerekir

    A | B | D | E
    Ve ortaya böyle bir sonuç çıkar, C silinmiş olur

    Şöyle bir yöntem uygulayabilirsiniz

    Yeni bir dosya açar
    Eski dosyanızı baştan okumaya başlar
    Silmek istediğiniz elemana kadar her satırı aynen yeni dosyaya yazarsınız
    Silmek istediğiniz elemanla karşılaşınca yeni dosyaya yazmadan atlarsınız (string compare yapmanız gerekiyor diye tahmin ediyorum bu aşamada)
    Daha sonra gelen elemanları da olduğu gibi yeni dosyaya yazarsınız böylece o verileriniz silmek istediğiniz eleman hariç yeni dosyaya taşınmış olur.

    --R10.NET; Flood Engellendi -->-> Yeni yazılan mesaj 19:42:11 -->-> Daha önceki mesaj 19:36:30 --

    Bir de küçük bir tavsiye olarak, dosyaya verileri yazarken

    Kitap adı: Sefiller
    Yazar: Victor Hugo
    Sayfa Sayısı: 300 şeklinde yazıyorsunuz

    Şayet bu verileri tekrar programınıza almak istiyorsanız örneğin silmek için okuyup karşılaştırmanız gerekiyorsa bu veriyi işlemede sorun yaşayabilirsiniz onun yerine

    Victor Hugo
    Sefiller
    300
    Suç Ve Ceza
    Fyodor Dostoyevski
    400

    şeklinde yazabilirsiniz, siz zaten dosyaya nasıl yazdığınızı biliyorsunuz okumak da sıkıntı olmayacaktır, daha iyi bir yöntem olarak da
    Victor Hugo ; Sefiller ; 300
    Suç ve Ceza ; Fyodor Dostoyevski ; 400
    şeklinde dosyaya yazıp, okuma kodunuzda bunu uygun düzenleme yapabilirsiniz bu daha anlaşılır ve kolay işlenebilir bir çözüm sunacaktır diye düşünüyorum