Şimdi Ara

C# da IF şartını dışarıdan girebilir miyiz?

Daha Fazla
Bu Konudaki Kullanıcılar: Daha Az
2 Misafir - 2 Masaüstü
5 sn
19
Cevap
1
Favori
1.105
Tıklama
Daha Fazla
İstatistik
  • Konu İstatistikleri Yükleniyor
0 oy
Öne Çıkar
Sayfa: 1
Giriş
Mesaj
  • Arkadaşlar C# da IF şartını dışarıdan girebilir miyiz? mesela bir textbox'a şartı yazacaz IF'deki şart'ı ona göre değiştirecek..



  • Amaci daha detayli yazarsan yardim edebiliriz

    < Bu ileti mobil sürüm kullanılarak atıldı >
  • Vallahi buna neden ihtiyaç duyduğunu çok merak ettim
    Sorunun cevabına gelirsek, C# diliyle ilgili bildiğim hiçbir şey yok

    < Bu ileti mobil sürüm kullanılarak atıldı >
  • collegetunc kullanıcısına yanıt
    Bu tarz işler için kullanabileceğin kütüphaneler mevcut. Burada bazılarından bahsedilmiş:

    http://stackoverflow.com/questions/5029699/c-sharp-convert-string-expression-to-a-boolean-expression
  • İçine yazılacak şartın bir sınırı varsa kendin yorumlayabilirsin, ben bi ara denemiştim ufak bi yorumlayıcı yapmayı gerçekten eğlenceli.
  • dışarıdaki textbox'a ifin şartını kendimiz yazacaz ve bu yazdığımız şarta göre işlem yapacak.. mesala textbox'ın içine a<=20&&b>=30 yazıyorum sonra iki tane text box'tan a ve b değerlerini giricem ona göre işlem yapacak.. karışık gibi ama
  • quote:

    Orijinalden alıntı: collegetunc

    dışarıdaki textbox'a ifin şartını kendimiz yazacaz ve bu yazdığımız şarta göre işlem yapacak.. mesala textbox'ın içine a<=20&&b>=30 yazıyorum sonra iki tane text box'tan a ve b değerlerini giricem ona göre işlem yapacak.. karışık gibi ama

    Olay sadece a ve b'den oluşuyorsa çok da zor değil.
  • denemediğim yöntem kalmadı ama olmuyor.
  • quote:

    Orijinalden alıntı: collegetunc

    denemediğim yöntem kalmadı ama olmuyor.

    Şuan yapıyorum birşeyler, proje dosyasını paylaşırım.
  • Bu da kodlar;

    Form1'e eklenmesi gereken nesneler;
    textBox1 -> Şartın yazılacağı textbox
    textBox2 -> Değişkenin değerinin girileceği textbox
    button1 -> İşlemin uygulanması için basılacak button
    listBox1 -> Değişkenleri listeleyen listbox
    label1 -> İşlemin sonucunu gösteren label

    Form1.cs
    using System; 
    using System.Collections.Generic;
    using System.ComponentModel;
    using System.Data;
    using System.Drawing;
    using System.Linq;
    using System.Text;
    using System.Windows.Forms;

    namespace Islem
    {
    public partial class Form1 : Form
    {

    List<string> isaretler = new List<string>() { "==", "!=", "<", ">", "<=", ">=", "&&", "||" };
    List<Degisken> degiskenler = new List<Degisken>();
    int seciliDegisken = -1;


    public Form1()
    {
    InitializeComponent();
    }

    private void Form1_Load(object sender, EventArgs e)
    {
    }

    private void button1_Click(object sender, EventArgs e)
    {
    TumSart ts = new TumSart(textBox1.Text, degiskenler);
    label1.Text = ts.Result().ToString();
    }

    private void textBox1_TextChanged(object sender, EventArgs e)
    {
    try
    {
    listBox1.Items.Clear();
    degiskenler.Clear();

    List<string> parcalar = Ayir(textBox1.Text);
    List<string> degiskenIsimleri = new List<string>();

    foreach (string item in parcalar)
    {
    if (!degiskenIsimleri.Contains(item))
    {
    degiskenIsimleri.Add(item);
    }
    }

    foreach (string degiskenIsmi in degiskenIsimleri)
    {
    degiskenler.Add(new Degisken("0", degiskenIsmi));
    }

    degiskenDegeriGoster();

    listBoxdaGoster();

    }
    catch
    {
    }
    }

    void degiskenDegeriGoster()
    {
    if (seciliDegisken >= 0)
    {
    textBox2.Text = degiskenler[seciliDegisken].Deger;
    }
    else
    {
    textBox2.Text = "";
    }
    }

    List<string> degiskenIsimListesi()
    {
    List<string> dil = new List<string>();
    foreach (Degisken item in degiskenler)
    {
    dil.Add(item.Isim);
    }
    return dil;
    }

    public List<string> Ayir(string tumString)
    {
    string eksiltilenString = tumString;
    List<string> res = new List<string>();
    List<char> isaretlerc = new List<char>() { '=', '!', '<', '>', '<', '>', '&', '|' };
    int sonOperatorPozisyonu = 0;
    int sonOperatorUzunlugu = 0;
    for (int i = 0; i < tumString.Length; i++)
    {
    for (int j = 0; j < isaretlerc.Count; j++)
    {
    string parca = Parca(tumString, isaretlerc[j], ref sonOperatorPozisyonu, ref sonOperatorUzunlugu, i, j);
    if (parca != "")
    {
    res.Add(parca);
    eksiltilenString = eksiltilenString.Substring(eksiltilenString.IndexOf(isaretler[j]) + isaretler[j].Length, eksiltilenString.Length - (eksiltilenString.IndexOf(isaretler[j]) + isaretler[j].Length));
    }
    }
    }
    res.Add(eksiltilenString);//Son parça
    return res;
    }

    string Parca(string tumString, char operatorKarakter, ref int sonOperatorIndexi, ref int sonOperatorUzunlugu, int indexTumStringFor, int karakterSira)
    {

    string parca = "";
    if (tumString[indexTumStringFor] == operatorKarakter)
    {
    bool b = (tumString.Substring(indexTumStringFor, isaretler[karakterSira].Length) == isaretler[karakterSira]);
    if (b)//İşaret tamamen doğru mu?
    {
    //TümŞartta yapılanların benzerleri
    if (sonOperatorIndexi > 0)
    {
    parca = tumString.Substring(sonOperatorIndexi + sonOperatorUzunlugu, indexTumStringFor - (sonOperatorIndexi + sonOperatorUzunlugu));//Bir önceki operatör ile şuan bulunan operatör arası.
    }
    else
    {
    parca = tumString.Substring(0, indexTumStringFor);//Baştan buraya kadar.
    }
    sonOperatorIndexi = indexTumStringFor;
    sonOperatorUzunlugu = isaretler[karakterSira].Length;
    }
    }
    return parca;
    }

    private void listBox1_SelectedIndexChanged(object sender, EventArgs e)
    {
    seciliDegisken = listBox1.SelectedIndex;
    degiskenDegeriGoster();
    }

    private void textBox2_TextChanged(object sender, EventArgs e)
    {
    if (seciliDegisken >= 0)
    {
    degiskenler[seciliDegisken].Deger = textBox2.Text;
    }
    listBoxdaGoster();
    }

    void listBoxdaGoster()
    {
    listBox1.Items.Clear();
    foreach (Degisken degisken in degiskenler)
    {
    listBox1.Items.Add(degisken.Isim + " = " + degisken.Deger);
    }
    }

    }
    }



    Degisken.cs
    using System; 
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;

    namespace Islem
    {
    class Degisken
    {

    private string isim = "";//Değişkenin gözüken ismi

    private Type tip;//Değişkenin tipi

    private string deger = "";//Değişkenin değeri



    public string Isim { get { return this.isim; } set { this.isim = value; } }

    public Type Tip { get { return this.tip; } set { this.tip = value; } }

    public string Deger { get { return this.deger; } set { this.deger = value; TurBelirle(); } }



    public object SadeDeger()
    {
    object o = deger;
    if (tip == typeof(int))
    {
    o = Convert.ToInt32(deger);
    }
    else if (tip == typeof(double))
    {
    o = Convert.ToDouble(deger);
    }
    return deger;
    }



    public Degisken(string Deger, string Isim)
    {
    this.isim = Isim;
    this.deger = Deger;
    TurBelirle();
    }

    void TurBelirle()
    {
    //Sayı için uygun ifadeler;
    List<char> sayiIcinUygun = new List<char>();
    for (int i = 0; i < 9; i++)
    {
    sayiIcinUygun.Add(Convert.ToChar(i.ToString()));
    }
    sayiIcinUygun.Add('.');
    bool sayi = true;
    bool noktali = false;
    for (int i = 0; i < deger.Length; i++)
    {
    char c = deger[i];
    if (!sayiIcinUygun.Contains(c))
    {
    sayi = false;
    break;
    }
    else
    {
    if (c == '.')
    {
    noktali = true;
    }
    }
    }
    tip = typeof(string);
    if (sayi)
    {
    tip = typeof(int);
    if (noktali)
    {
    tip = typeof(double);
    }
    }
    }

    }
    }



    Islem.cs
    using System; 
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;

    namespace Islem
    {
    class Islem
    {

    private string sart = "";

    private Degisken[] degiskenler = new Degisken[2];



    public string Sart { get { return this.sart; } set { this.sart = value; } }



    public bool Result()
    {
    bool b = false;
    Type t1 = degiskenler[0].Tip;
    Type t2 = degiskenler[1].Tip;
    object sd1 = degiskenler[0].SadeDeger();
    object sd2 = degiskenler[1].SadeDeger();
    if (sart == "==")
    {
    if (t1 == t2 && sd1.Equals(sd2))
    {
    b = true;
    }
    }
    else if (sart == "!=")
    {
    if (t1 != t2 || !(sd1.Equals(sd2)))
    {
    b = true;
    }
    }
    else if (sart == "<")
    {
    if (Convert.ToDouble(sd1) < Convert.ToDouble(sd2))
    {
    b = true;
    }
    }
    else if (sart == ">")
    {
    if (Convert.ToDouble(sd1) > Convert.ToDouble(sd2))
    {
    b = true;
    }
    }
    else if (sart == "<=")
    {
    if (Convert.ToDouble(sd1) <= Convert.ToDouble(sd2))
    {
    b = true;
    }
    }
    else if (sart == ">=")
    {
    if (Convert.ToDouble(sd1) >= Convert.ToDouble(sd2))
    {
    b = true;
    }
    }
    else if (sart == "true")
    {
    b = true;
    }
    return b;
    }



    public Islem(string islemString, List<Degisken> degerler)
    {
    string[] islemler = new string[] { "==", "!=", "<", ">", "<=", ">=" };
    for (int i = 0; i < islemler.Length; i++)
    {
    if (islemString.Contains(islemler[i]))
    {
    sart = islemler[i];
    }
    }
    if (sart != "")
    {
    int indexSartIsareti = islemString.IndexOf(sart);
    string degisken1 = islemString.Substring(0, indexSartIsareti);//ŞART İŞARETİNİN ÖNCESİNİ AL
    string degisken2 = islemString.Substring(indexSartIsareti + sart.Length, islemString.Length - indexSartIsareti - sart.Length);//ŞART İŞARETİNİN SONRASIN AL
    foreach (Degisken item in degerler)
    {
    if (degisken1 == item.Isim)//Formdan gönderilen değişkenlerden ismi STRING'DE OLAN ise
    {
    degiskenler[0] = item;
    }
    }
    foreach (Degisken item in degerler)
    {
    if (degisken2 == item.Isim)//Formdan gönderilen değişkenlerden ismi STRING'DE OLAN ise
    {
    degiskenler[1] = item;
    }
    }
    }
    else
    {
    if (islemString == "true")
    {
    sart = "true";
    }
    else if (islemString == "false")
    {
    sart = "false";
    }
    }
    }

    }
    }



    TumSart.cs
    using System; 
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;

    namespace Islem
    {
    class TumSart
    {

    private List<string> ops = new List<string>();

    private List<Islem> islemler = new List<Islem>();



    public bool Result()
    {
    bool b = false;
    List<bool> sonuclar = new List<bool>();
    foreach (Islem islem in islemler)
    {
    sonuclar.Add(islem.Result());
    }
    b = res(sonuclar);
    return b;
    }

    int ax = 0;
    bool res(List<bool> sonuclar)
    {
    List<bool> sonclar = sonuclar;
    bool b = false;
    while (sonclar.Count >= 2 && ax < ops.Count)
    {
    bool birinciIleIkinci = false;
    if (ops[ax] == "&&")
    {
    birinciIleIkinci = sonclar[0] && sonclar[1];
    }
    else if (ops[ax] == "||")
    {
    birinciIleIkinci = sonclar[0] || sonclar[1];
    }
    ax++;
    sonclar.RemoveAt(0);
    sonclar[0] = birinciIleIkinci;
    }
    b = sonclar[0];
    return b;
    }



    public TumSart(string butunSartStringi, List<Degisken> degerler)
    {
    string[] operators = new string[] { "&&", "||" };//şartlar arasında mümkün olan iki tane operatör var
    int sonOperatorPozisyonu = 0;//Stringlerle oynarken lazım olacak bir değişken, en son kullanılan operatörün pozisyonu
    for (int i = 0; i < butunSartStringi.Length; i++)//textboxa girilen bütün stringi karakter karakter inceliyoruz
    {
    if (butunSartStringi[i] == '&')//Eğer i'ninci harf '&' ise
    {
    if (sonOperatorPozisyonu > 0)//Ve daha önce işlem yapıldıysa ((a<b||c>d&&z>x) gibi bir işlemde)
    {
    string islemStr = butunSartStringi.Substring(sonOperatorPozisyonu + 2, i - (sonOperatorPozisyonu + 2));//Bir önceki operatör ile şuan bulunan operatör arası.
    islemler.Add(new Islem(islemStr, degerler));//Elde edilen stringden bir işlem türet (a<b vs.)
    //#1
    }
    else//Daha önce işlem yapılmamış (mesela a<b&&a>b||a>d)
    {
    string islemStr = butunSartStringi.Substring(0, i);//Baştan i'ye kadar.
    islemler.Add(new Islem(islemStr, degerler));//İşlemi oluşturma (a<b)
    //#1
    }
    //#1
    ops.Add("&&");
    sonOperatorPozisyonu = i;
    i++;//"&&" iki harfli olduğu için TÜMSTRİNG'de bir sonraki karakteri atlıyoruz.
    }
    if (butunSartStringi[i] == '|')
    {
    if (sonOperatorPozisyonu > 0)
    {
    string islemStr = butunSartStringi.Substring(sonOperatorPozisyonu + 2, i - (sonOperatorPozisyonu + 2));//Bir önceki operatör ile şuan bulunan operatör arası.
    islemler.Add(new Islem(islemStr, degerler));
    //#2
    }
    else
    {
    string islemStr = butunSartStringi.Substring(0, i);//Baştan buraya kadar.
    islemler.Add(new Islem(islemStr, degerler));
    //#2
    }
    //#2
    ops.Add("||");
    sonOperatorPozisyonu = i;
    i++;
    }
    }
    //Sondaki işlem;
    //Sondan geri doğru ilk & veya | görülen yere kadar bir işlem oluştur.
    for (int i = butunSartStringi.Length - 1; i >= 0; i--)
    {
    if (butunSartStringi[i] == '&' || butunSartStringi[i] == '|')
    {
    string islemStr = butunSartStringi.Substring(i + 1, butunSartStringi.Length - (i + 1));
    islemler.Add(new Islem(islemStr, degerler));
    break;
    }
    }
    //Hiç && veya || yoksa;
    if (!butunSartStringi.Contains("&&") && !butunSartStringi.Contains("||"))
    {
    islemler.Add(new Islem(butunSartStringi, degerler));
    }
    }

    }
    }




  • welrocken hocam teşekkür ederim yardımın için inceliyorum inceledikten sonra sonucu haber veririm sana
  • welrocken W kullanıcısına yanıt
    Merhaba welrocken teşekkür ederim paylaşımın için. Hocam ben bu kodları yazdım fakat " EventArgs e " de hata veriyor. Sıkıntı ne olabilir.
    HATA: Error 1 The type or namespace name 'EventArgs' could not be found (are you missing a using directive or an assembly reference?)
  • quote:

    Orijinalden alıntı: srhtylcn

    Merhaba welrocken teşekkür ederim paylaşımın için. Hocam ben bu kodları yazdım fakat " EventArgs e " de hata veriyor. Sıkıntı ne olabilir.
    HATA: Error 1 The type or namespace name 'EventArgs' could not be found (are you missing a using directive or an assembly reference?)

    5 tane EventArgs e var, hangisinde veriyor?
  • welrocken W kullanıcısına yanıt
    hepsinde :)
  • srhtylcn S kullanıcısına yanıt
    şimdi yeni bir projede yaptım bu sefer de başka bir hata verdi. herhalde diğer formları görmüyor..HATA ŞU :

    Error 1 Missing partial modifier on declaration of type 'Islem.Degisken'; another partial declaration of this type exists D:\DERSLER\C# Çalışma\Islem\Islem\Degisken.cs 8 11 Islem
  • quote:

    Orijinalden alıntı: srhtylcn

    şimdi yeni bir projede yaptım bu sefer de başka bir hata verdi. herhalde diğer formları görmüyor..HATA ŞU :

    Error 1 Missing partial modifier on declaration of type 'Islem.Degisken'; another partial declaration of this type exists D:\DERSLER\C# Çalışma\Islem\Islem\Degisken.cs 8 11 Islem


    Tahminimce benim oluşturduğum nesneler ve o nesnelere atadığım görevleri aynı şekilde yapmadın. Ben sana direk projeyi atayım:
    http://rapidshare.com/share/040A164ED4D18D1284FA31148CB90FFC




  • welrocken W kullanıcısına yanıt
    Çook teşekkür ederim:)
  • @srhtylcn 'ın farkettiği bir bug giderildi, sağolsun.
    Yeni proje;
    http://rapidshare.com/share/46377907004E9CAFC42CD796F40A0E11



    < Bu mesaj bu kişi tarafından değiştirildi welrocken -- 3 Ocak 2014; 13:49:38 >
  • 
Sayfa: 1
- x
Bildirim
mesajınız kopyalandı (ctrl+v) yapıştırmak istediğiniz yere yapıştırabilirsiniz.