textbox içinde arama yapmak...
-
11 Aralık 2011 Pazar 21:50
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 GÇ 11 Aralık 2011 Pazar 22:02
Tüm Yanıtlar
-
12 Aralık 2011 Pazartesi 07:38Moderatö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:10Yanıtlayıcı
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
Ç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 GÇ 12 Aralık 2011 Pazartesi 14:35
-
12 Aralık 2011 Pazartesi 15:12Yanı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
yeni bir sorun?
ArgumentOutOfException
Index was out of range. Must be non-negative and less than the size of the collection.
Parameter name: startIndexusing 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 GÇ 13 Aralık 2011 Salı 18:48
-
16 Aralık 2011 Cuma 17:59Moderatör
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:29Yanıtlayıcı
current baslangic degeri -1. sen 1 yapmissin.- Yanıt Olarak İşaretleyen Emre GunerturkModerator 19 Aralık 2011 Pazartesi 07:18
-
16 Aralık 2011 Cuma 23:27
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 GÇ 16 Aralık 2011 Cuma 23:29
- Yanıt Olarak İşaretleyen Emre GunerturkModerator 19 Aralık 2011 Pazartesi 07:18