Yanıt textbox içinde arama yapmak...

  • 11 Aralık 2011 Pazar 21:50
     
      Kod İçerir

    bir textbox ım var ve 10milyon karaktere kadar destekliyor....buraya girilen/yapıştırılan metin içinde arama yaptırmak istiyorum ve sonucu label a yazsın...

    Örneğin; arama tb ına girilen herhangi bir tek karakter i veya kelimeyi veya cümleyi bulup kaç tane o karakterden veya kelimeden olduğunu Label ayazsın gibi...

    bunu nasıl yaparım?teşekkürler...

    şunu denedim fakat istediğim sonuca ulaşamadım, zaten tam olarak ne yaptığını da anlamış değilim....

     

    public void Ara()
            {
                araTSTB.Text = tbMetin.Text.IndexOf(araTSTB.Text).ToString();
            }
    


     


    1881 -
    • Düzenleyen 11 Aralık 2011 Pazar 22:02
    •  

Tüm Yanıtlar

  • 12 Aralık 2011 Pazartesi 07:38
    Moderatör
     
     

    Merhaba,

    Bunun için iki yöntem kullanabilirsiniz.

    1. si metinde aradığınız kelimeyi "" 'le replace edip metnin boytunun ne kadar kısaldığına bakabilirsiniz,

    2. metni aradığınız kelimeye göre split edip kaç boyutlu bir dizi oluştuğuna bkabilirsiniz.

     

    1. si  için

    int orjinal= tbMetin.Text.Length;

    int yeni = tbMetin.Text.Replace(araTSTB.Text,"").Length;

    int adet = (yeni-orjinal)/araTSTB.Text.Length;

     

    2. si icin

    int adet tbMetin.Text.Split(new string[]{tbMetin.Text}).Length-1;

     

    hangisinin daha performansli calistigini incelemek gerekecektir.

  • 12 Aralık 2011 Pazartesi 13:53
     
     

    birincisi çalışmıyopr hiçbirşey yapmıyor

    ikincisi ise hata veriyor dizi de sorun var sanırım...

    ayrıca bunların benim istediğimle ne alakası var tam olarak anlayamadım? yani şurasını anlayamadım; neden aranan kelime ile "" yer değiştiriyor? ve neden split ile ayrıştırıp dizi oluşturuyoruz?

    biraz daha aydınlatabilirseniz sevinirim...teşekkürler...


    1881 -
  • 12 Aralık 2011 Pazartesi 14:10
    Yanıtlayıcı
     
      Kod İçerir
    int sonuc = Occurs( araTSTB.Text, tbMetin.Text );
    
    private int Occurs(string search, string expression)
    {
      int occurs=0, current=-1;
      do
      {
        current = expression.IndexOf(search,current+1);
        if (current >= 0)
        {
          occurs++;
        }
      } while (current >= 0);
      return occurs;
    }
    
    

  • 12 Aralık 2011 Pazartesi 14:34
     
      Kod İçerir

    Çetin öncellikle teşekkürler...birtakım hatalar alıyorum neyi yanlış yaptım acaba?

     

    int sonuc = Occurs(araTSTB.Text, tbMetin.Text);
            private int Occurs(string search, string exp)
            {
                int occurs = 0, current = 1;
                do
                {
                    current = exp.IndexOf(search, current + 1);
                    if (current >= 0)
                    {
                        occurs++;
                    }
                } while (current >= 0);
                return occurs;
            }
    
    private void araTSMI_Click(object sender, EventArgs e)
            {
                Occurs(araTSTB.Text, tbMetin.Text);
            }
    

    Hata    1    Alan başlatıcı 'KacKarakter.KarakterForm.Occurs(string, string)' statik olmayan alanına, yöntemine veya özelliğine başvuramaz    C:\...\KarakterForm.cs    74    21    KacKarakter
    Hata    2    Alan başlatıcı 'KacKarakter.KarakterForm.araTSTB' statik olmayan alanına, yöntemine veya özelliğine başvuramaz    C:\...\KarakterForm.cs    74    28    KacKarakter
    Hata    3    Alan başlatıcı 'KacKarakter.KarakterForm.tbMetin' statik olmayan alanına, yöntemine veya özelliğine başvuramaz    C:\....\KarakterForm.cs    74    42    KacKarakter

     


    1881 -

    • Düzenleyen 12 Aralık 2011 Pazartesi 14:35
    •  
  • 12 Aralık 2011 Pazartesi 15:12
    Yanıtlayıcı
     
     

    O ayri bir metod. Icine koydugun class'i baslatmadan cagiracaksan static tanimla. orn:

    class test

    {

      static void Main()

      {

        var util = new Test();

        int occurs = util.Occurs( ... );

     }

     private int Occurs( .. ) {...}

    }

     

    Yerine:

    class test

    {

    static void Main()

    {

        int occurs = test.Occurs( ... );

    }

    private static int Occurs( .. ) {...}

    }

  • 13 Aralık 2011 Salı 18:46
     
      Kod İçerir

    yeni bir sorun?

    ArgumentOutOfException

    Index was out of range. Must be non-negative and less than the size of the collection.
    Parameter name: startIndex

     

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using System.Windows.Forms;
    
    namespace KacKarakter
    {
        class Ara
        {
            public static TextBox tb = new TextBox();
            public static void AraBul()
            {
                int sonuc = Ara.Occurs(tb.Text, tb.Text);
    
            }
    
            private static int Occurs(string search, string exp)
            {
                int occurs = 0, current = 1;
                do
                {
                    current = exp.IndexOf(search, current + 1);
                    if (current >= 0)
                    {
                        occurs++;
                    }
                } while (current >= 0);
                return occurs;
            }
        }
    }
    


    current ile başlayan satırı gösteriyor ve ben bunu gördüğünüz gibi ayrı bir class dosyasında yazdım...

    bu hatayı, textbox a bir kelime yazıp ara butonuna tıkladıktan sonra aldım...

     


    1881 -

    • Düzenleyen 13 Aralık 2011 Salı 18:48
    •  
  • 16 Aralık 2011 Cuma 17:59
    Moderatör
     
      Kod İçerir

    Merhabalar,

    Sanırım bir yanlış anlaşılma var.

     int sonuc = Ara.Occurs(textBox1.Text, textBox2.Text);

    Şeklinde çağırmayı dener misiniz. textBox1 formunuz Üzerinde bulunan ve içindeki metni aramak istediğiniz textbox, textBox2 formunuz üzerinde bulunan ve içinde metin arayacağınız textbox.

    Yeni bir textbox tanımlamanıza gerek yok. Yukarıdaki kodu formunuzun codebehind'ına yazmanız gerekiyor..

  • 16 Aralık 2011 Cuma 18:29
    Yanıtlayıcı
     
     Yanıt
    current baslangic degeri -1. sen 1 yapmissin.
  • 16 Aralık 2011 Cuma 23:27
     
     Yanıt Kod İçerir

    sonunda yaptım yaa, nihayet...

     

    void Snc()
            {
                int sonuc = Occurs(araTSTB.Text, tbMetin.Text);
            }
    
            private static int Occurs(string search, string exp)
            {
                int occurs = 0, current = -1;
                do
                {
                    current = exp.IndexOf(search, current + 1);
                    if (current >= 0)
                    {
                        occurs++;
                    }
                } while (current >= 0);
                return occurs;
            }
    
    //çağırırken
    
    private void araTSMI_Click(object sender, EventArgs e)
            {
                Occurs(araTSTB.Text, tbMetin.Text);
            }
    

    fakat nasıl bulduğu karakterin ya da kelimenin neyse arka tarafını boyatıcaz?bulamadığında ise bulamadı diye uyarı verdirecez? tek lazım olan bu teşekkürler...

     


    1881 -
    • Düzenleyen 16 Aralık 2011 Cuma 23:29
    • Yanıt Olarak İşaretleyen Emre GunerturkModerator 19 Aralık 2011 Pazartesi 07:18
    •