Belirli bir metin içinde kelime ya da karakter arama, şifreleme algoritmalarında,uzun metinlerde kelime bulmak ya da belli bir konuma gelmek için sıklıkla kullanılır. Programla yapılmak istenen kullanıcıdan alınan kelimenin, verilen metinde ya da okunan dosyadaki metinde kaç adet olduğunu bulmaktır.
Kullanıcıdan alınan ve dosyadan okunan metin arasında kelime aramanın mantığı aynıdır. Burada yararlanılan IndexOf() metodu bize istenen kelimenin olup olmadığını döndürür. Eğer yoksa -1 değeri döndürecektir. sayac değişkeni bulunduğu takdirde 1 arttırılarak kaç kelimenin kaç adet olduğunu gösterecektir.
int konum = sifre.IndexOf(sifre); while (konum != -1) { konum = kelime.IndexOf(sifre, konum + 1); sayac++; }
Eğer dosyadan okutmak isteniyorsa ek olarak dosyanın yerini belirtecek ve okuma yapacak StreamReader nesnesine ihtiyaç vardır. Aşağıdaki satırlarla str adlı bir nesne oluşturularak C dizinindeki metin adlı belgeye ulaşıldı. ReadLine() metodu ile oku adlı string değişkenine atandı.
string oku; StreamReader str = new StreamReader("c:\\metin.txt"); Console.WriteLine("Aranmak istenen kelime?"); kelime = Console.ReadLine(); oku = str.ReadLine();
Programın tüm kodları ise şöyle;
int secim; String sifre,kelime; int sayac = 0; Console.WriteLine("Metin girmek icin 1'e, dosyadan okutmak icin 2'ye basiniz:"); secim = Convert.ToInt32(Console.ReadLine()); switch (secim) { case 1: Console.WriteLine("Sifreyi giriniz:"); sifre = Console.ReadLine(); Console.WriteLine("Aranmak istenen kelime?"); kelime = Console.ReadLine(); int konum1 = kelime.IndexOf(sifre); while (konum1 != -1) { konum1 = kelime.IndexOf(sifre, konum1 + 1); sayac++; } break; case 2: string oku; StreamReader str = new StreamReader("c:\\metin.txt"); Console.WriteLine("Aranmak istenen kelime?"); kelime = Console.ReadLine(); oku = str.ReadLine(); int konum2 = oku.IndexOf(kelime); while (konum2 != -1) { konum2 = oku.IndexOf(sifre, konum2 + 1); sayac++; } break; } Console.WriteLine("Metin icerisinde"+sayac+"tane bulunmustur."); Console.ReadLine(); }
peki kaçtane var diye degilde, metin üzerinde bulunan kelimeyi işaretlemek istesek nasıl bir dongu kurmamız gerek??
İşaretlemekten kastınız metin içinde belirgin hale getirmekse şu sayfayı inceleyin, http://social.msdn.microsoft.com/Forums/tr-TR/csharptr/thread/b07cbb01-2a88-4f3e-b840-fa719ba89e44
merhaba, örneğin MERMER kelimesini ikişerli harf grupları şeklinde (ME, ER, RM, ME, ER) listboxa atamak istiyoruz, ama aynı heceleri bir kez yazmasını istiyoruz, bunu nasıl yapabiliriz? Sürekli olarak kodlar deniyorum, ama bir türlü istediğim sonucu alamadım, yardımcı olabilirseniz sevinirim, teşekkürler.
Merhaba,
eğer küçük boyutlu string’lerle uğraşıyorsanız listbox içindeki eleman sayısını listBox1.Items.Count ile bularak iç içe for döngüsü içinde kontrol ettirebilirsin. Bunun yerine listbox’a önceden eklediğin elemanı bir daha eklememek için Contains metodunu kullanabilirsin;
if(listbox1.Items.Contains(string parcaları) == true){
//uyarı mesajı verilebilir
}
else
{
listbox1.Items.Add(string parcaları);
}
[…] İlk yazıda kullandığımız IndexOf metodu yerine aynı sorunu LINQ sorguları ile çözmeye çalışacağız. Öncelikle LINQ mimarisine bakarsak, üzerinde çalıştığımız çeşitli arayüzler içeren veri kümelerinde ve veri kaynaklarında(XML, JSON vs.) sorgulama yapmamızı sağlayan ifadelerdir. Aslında LINQ yapısı programlama diline, sorgulama becerisi ekler, sorgulama ve sonuç kümesi döndürme gibi işlemleri ise sağlayıcı(provider) dediğimiz yapılar gerçekleştirir. Bu sorun için LINQ yapısının veri kümeleri üzerinde sorgulama yapmamıza imkan veren ifadeler olduğunu bilmemiz yeterli. Yazıda bir metin içinde aranan kelimeyi LINQ to Objects sağlayıcısının bize sunduğu Count metodunu kullanarak bulmaya çalışacağız. […]