C# : Metin İçinde Metin Arama – 1

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();
}
Reklamlar

C#: PictureBox ile Birden Çok Resim Görüntüleme

PictureBox ile resim görüntülemek kolay bir işlem. Ancak bunu birden çok resim için istiyorsak bunun bir kaç yolu var. En iyi yolu resimleri exe içine gömmek, çünkü bu diğer ortamlarda da programı sorunsuz çalıştırır.

Projeye eklemek istenilen resimler PictureBox nesnesinin özelliklerinden Image ile eklenebilir. Import ile istenen klasörden resim seçilebilir.

Kod kısmında ise resimleri tutacak bir listeye ihtiyaç var.,

List < Image > images = new List < Image > ();
images.Add(Properties.Resources.baseball_bat);
images.Add(Properties.Resources.bracelet);
images.Add(Properties.Resources.bride);
images.Add(Properties.Resources.cemetery);
images.Add(Properties.Resources.compass);
images.Add(Properties.Resources.earthquake);
images.Add(Properties.Resources.french_fries);

PictureBox ya da bir buton yardımıyla resimlere göz atmak isteniyorsa aşağıdaki if yapısı kullanılabilir. Eğer sirano son resmin sayısını gösteriyorsa başa dönmesi sağlanır. Böylece sonsuz bir döngü sağlanmış olur.

int sirano=0;  if (sirano == images.Count - 1)  sirano = 0;  else   sirano++;

C#: İstisna(Exception) Yönetimi

İstisna yönetimi, program yazımı açısından önemli bir noktadır. Programcı her ne kadar kodlarını dikkatli yazsa da çalışma zamanında oluşabilecek hataları göz önünde bulundurmalıdır. Derleme zamanında oluşan hatalar genellikle yazım hatalarıdır. Bunların tespiti ve düzeltilmesi kolaydır. Ancak programı kullanacak kullanıcının yapacağı bir hata sözkonusu olabilir. Bu tip durumlar için alınan tedbir işlemlerinin tümüne istisna yönetimi denir.
.NET platformunda türetilen her şey Object temel sınıfından türetilir. Doğal olarak istisnalar da sınıflardan türetilmektedir. Tüm istisnai sınıflar Exception sınıfından türetilir. Oluşturulan her istisna için farklı bir sınıf mevcuttur. Bu istisnalar da içinde kendine özgü yöntemler barındırır. System.Exception sınıfında türetilmiş bazı standart istisnalar vardır. Örneğin kullanıcı kaynaklı riskli hatalardan sıfıra bölme hatası için DivideByZeroException istisnası derleyicide varsayılan olarak bulunmaktadır.
İstisna yazımında 3 temel ifade kullanılır.
ifade
{
} şeklinde yazılır.
1. Try
Yapılması istenen işlemler try bloğuna yazılır. Catch ya da Finally ile kullanılması gerekir.
2. Catch
Try bloğu içindeki kodlarda bir hata oluşmuşsa burada yazılan kodlar çalıştırılır. Örneğin uyarı mesajları yazılmış olabilir. Hata olmazsa catch bloğu çalışmaz.
2. Finally
Bazen hata oluşması durumunda çalışacak kodlar yazılmamış olabilir. Bu durumda programın aksamaması için bu blok kullanılır. Ayrıca finally her koşulda çalışan bir bloktur. Örneğin bir işlem yapıp sonuca ulaştıktan sonra metin kutularını silmek için kullanılabilir.
 
Örneğin 3 sınav notunun girişinde yaşanabilecek olası hatalar  kullanıcının 100’den büyük sayı girmesi ya da istenen tipte giriş yapmamasıdır. Bunu engellemek için istisna olayını kullanırsak şöyle bir kod çıkacaktır.
public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        private void button1_Click(object sender, EventArgs e)
        {
            int n1, n2, n3;
            int ort;
            try
            {
                n1 = int.Parse(textBox1.Text);
                n2 = int.Parse(textBox2.Text);
                n3 = int.Parse(textBox3.Text);
                ort = (n1 + n2 + n3) / 3;
                if (n1 < 100 && n2 < 100 && n3 < 100)

                  textBox4.Text = ort.ToString();

              //  else
                  //  MessageBox.Show(“100den kucuk sayi girin”);
            }
            catch
            {
                MessageBox.Show(“Lutfen 0-100 arası sayı girin”);

            }
            finally
            {
                textBox3.Text = (” “);
                textBox2.Text = (” “);
                textBox1.Text = (” “);
            }

            }
 Burada ek olarak if else bloğunun da kullanılabileceği gösterilmiştir. Kullanıcının 3 nottan herhangi birini 100’den büyük girmesi durumunda uyarı mesajı gelecektir. Aslında bu tip işlemlerle hata riskini kontrol edebiliyorsak istisna kullanmamayı tercih etmeliyiz. Çünkü fazla istisna kullanımı, olası performans kayıplarını da beraberinde getirir.