none
Birden Fazla Replace Kullanımı RRS feed

  • Soru

  • Merhabalar;

    Bir program yapıyorum ve pregramımda birden fazla replace kullanmam gerekiyor.

                string kod = textBox1.Text;
                    textBox1.Text = kod.Replace("@Degisken1", textBox2.Text);
                    textBox1.Text = kod.Replace("@Degisken0", textBox3.Text);
                    textBox1.Text = kod.Replace("@Degisken2", textBox4.Text);
                    textBox1.Text = kod.Replace("@Degisken3", textBox5.Text);
                    textBox1.Text = kod.Replace("@Degisken4", textBox6.Text);
                    textBox1.Text = kod.Replace("@Degisken5", textBox7.Text);
                    textBox1.Text = kod.Replace("@Degisken6", textBox8.Text);
                    textBox1.Text = kod.Replace("@Degisken7", textBox9.Text);
                    return;

    Kodum bu fakat bu kod ile sadece en sondaki @Degisken7 yazısı değişiyor yani birden fazla replace kullanamıyorum.Ne yapabilirim ?

    5 Haziran 2014 Perşembe 20:28

Yanıtlar

  •         static string Degistir(string veri,string gelen1,string gelen2,string gelen3,string gelen4,string gelen5,string gelen6,string gelen7,string gelen8)
            {
                veri = veri.Replace("@Degisken1", gelen1);
                veri = veri.Replace("@Degisken0", gelen2);
                veri = veri.Replace("@Degisken2", gelen3);
                veri = veri.Replace("@Degisken3", gelen4);
                veri = veri.Replace("@Degisken4", gelen5);
                veri = veri.Replace("@Degisken5", gelen6);
                veri = veri.Replace("@Degisken6", gelen7);
                veri = veri.Replace("@Degisken7", gelen8);
                return veri;
            }
    Metod kullanarak çözdüm fakat bu seferde butona tekrar tıklandığında 2. kez değiştirmiyor.
    • Yanıt Olarak İşaretleyen Forcerecon1 5 Haziran 2014 Perşembe 22:35
    5 Haziran 2014 Perşembe 22:35

Tüm Yanıtlar

  •         static string Degistir(string veri,string gelen1,string gelen2,string gelen3,string gelen4,string gelen5,string gelen6,string gelen7,string gelen8)
            {
                veri = veri.Replace("@Degisken1", gelen1);
                veri = veri.Replace("@Degisken0", gelen2);
                veri = veri.Replace("@Degisken2", gelen3);
                veri = veri.Replace("@Degisken3", gelen4);
                veri = veri.Replace("@Degisken4", gelen5);
                veri = veri.Replace("@Degisken5", gelen6);
                veri = veri.Replace("@Degisken6", gelen7);
                veri = veri.Replace("@Degisken7", gelen8);
                return veri;
            }
    Metod kullanarak çözdüm fakat bu seferde butona tekrar tıklandığında 2. kez değiştirmiyor.
    • Yanıt Olarak İşaretleyen Forcerecon1 5 Haziran 2014 Perşembe 22:35
    5 Haziran 2014 Perşembe 22:35
  • Karanlik bir yola sapmayi basarmissin gibi geldi. Umarim ben yaniliyorumdur da o degiskenler SQL sorgusundaki parametreler degildir.
    6 Haziran 2014 Cuma 01:19
    Yanıtlayıcı
  • Karanlik bir yola sapmayi basarmissin gibi geldi. Umarim ben yaniliyorumdur da o degiskenler SQL sorgusundaki parametreler degildir.
    Yok hocam bir taslak programı yapıyorumda degiskenleri SQLdeki parametrelerden esinlendim.Programda gerekli yerler dolduruluyor ve taslakta o yerler textboxa göre değişiyor.Sonra kullanıcı taslağı kopyalayıp forum sitesinde direkt yapıştırıp yayınlıyor. :)
    6 Haziran 2014 Cuma 09:23
  • String.Format vardı??  Farklı/daha iyi olan nedir?
    6 Haziran 2014 Cuma 10:42
  • String.Format() fazla basit ve esnek :)
    6 Haziran 2014 Cuma 11:59
    Yanıtlayıcı
  • String.Format() fazla basit ve esnek :)
    Farklar neler hocam ve sizce hangisi daha iyi ?
    6 Haziran 2014 Cuma 14:47
  • Ne yapmak istediğini anladım ancak ilk yazdığın kod ile amacının ne olduğunu anlamadım doğrusu. Ancak yine de string format ile ilgili bildiklerimi paylaşayım, sende kendine göre inceler neyin daha iyi olduğuna karar verirsin.

    Öncelikle "Hangisi daha iyi " gibi bir soru doğru değil. Ihtiyaç dahilinde herşey kullanılmak için yazılmıştır.

    String Format : Bir metni formatlı bir biçime dönüştürür.

    String Format Kullanımı :

    String.Format{index,[Length][:formatString]}

    Index : String değişkenin sırası

    FormatString: Biçimlendirme sırasında kullanılacak olan karakterler

    Length : Biçimlendirme işlemenin uygulanacağı karakter uzunluğudur.

    ÖRNEK Kullanımlar :

    string newString;
    
                newString = String.Format("Benim Adım {0} ve Soyadım  {1}. Umarım size {2}", "Emre", "SARIKAYNAK", "Faydalı olmuşumdur");
    
                System.Console.WriteLine(newString);

    EKRAN CIKTISI :  Benim Adım Emre ve Soyadım SARIKAYNAK Umarım size Faydalı olmuşumdur.

    String Dizisi oluşturma :

    string a="deneme";
    char[] dizi={'a','b','c','d'};
    String b=new String(dizi);
    String c=new String(dizi,1,2); //dizi[1]'den itibaren 2 eleman stringe atandı.
    String d=new String('x',50); //burada 50 tane x'in yan yana geldiği bir string oluşuyor. yani d="xxxx..."

    6 Haziran 2014 Cuma 15:16
  • Fark ne dersen, olaya akademik bakip detayina inmek var, ya da pratik olarak ne fark ediyor ona bakmak var. Ikisini karistirip bakarsak:

    1) Performans. String, immutable bir elemandir. Sen oyle:

    veri = veri.Replace( ... );

    yazdigin her satirdaki veri yeni bir string yaratilmasina neden olur. 100 tane degiskenin var ise, hafizada birbirine benzeyen  100 string icin yer ayrilacak ve sadece sonuncusu kullanilacak. 5-7 string atamasiyla bunun ne kadar ciddi bir sorun oldugunu hic farketmeyebilirsin. Bir dongude 1000 tane degisiklik yapmayi dene. 

    2) Pratikteki fark. Sen icinde "yer tutucu" olarak degiskenler bulunan bir metin (kalip metin - template) yaziyorsun ve bunu sonra "Replace" ile son haline geitiriyorsun ( "render" olarak biliniyor ). "Template render" adiyla yaygin olarak bilinen bir yontem. Word gibi ofis otomasyonunda benzer sekilde "merge field" var.

    Arayan: @degisken1
    Aranan: @degisken2
    Tarih: @degisken3
    Sure: @degisken4
    Arayan: {0}
    Aranan: {1}
    Tarih: {2}
    Sure: {3}

    Ikisinin gorunumu boyle. Seninkinin bir avantaji degiskenlerinin adlarinin olmasi. Boylece, ornegin  @SiparisTarihi yazabilirsin ve degisken adi kendisini tarif eder. string.Format (ya da StringBuilder.AppendFormat) ise degiskenleri index olarak tutuyor. Ancak seninkinde ek ozellikler tanimlayamiyorsun (yazilacagi alanin genisligi, sola, saga dayali, veri formati gibi).

    Senin yonteminde, string.Replace kullandigin icin, gelen veriyi stringe cevirmen gerekiyor (mesela tarih DateTime tipinde geliyor, sen ToString() ile cevirmek durumunda kaliyorsun). String.Format'da ise bu otomatikman senin icin yapiliyor.

    (Diger bazi dillerde ve html rendering yapan yerlerde bu is daha gelismis olarak kullaniliyor ve ozellikler yanisira direktifler filan da var ve pozisyon indexi seninki gibi degisken ismi kullaniliyor)

    Sonucta ortaya daha okunakli bir kalip cikiyor ve tek harekette son halini aliyor. Ornek:

    void Main()
    {
      Console.WriteLine (Render_AramaKaydi("Ali", "Veli", DateTime.Now, 3));
    }
    
    private string Render_AramaKaydi( string aranan, string arayan, DateTime tarih, int sure )
    {
      string template = @"Arayan: {0}, Aranan: {1}
    Tarih: {2}
    Sure: {3}";
      
      return string.Format( template, arayan, aranan, tarih, sure );
    }

    Arayan: Veli, Aranan: Ali
    Tarih: 6/6/2014 7:02:16 PM
    Sure: 3


    6 Haziran 2014 Cuma 16:04
    Yanıtlayıcı
  • Fark ne dersen, olaya akademik bakip detayina inmek var, ya da pratik olarak ne fark ediyor ona bakmak var. Ikisini karistirip bakarsak:

    1) Performans. String, immutable bir elemandir. Sen oyle:

    veri = veri.Replace( ... );

    yazdigin her satirdaki veri yeni bir string yaratilmasina neden olur. 100 tane degiskenin var ise, hafizada birbirine benzeyen  100 string icin yer ayrilacak ve sadece sonuncusu kullanilacak. 5-7 string atamasiyla bunun ne kadar ciddi bir sorun oldugunu hic farketmeyebilirsin. Bir dongude 1000 tane degisiklik yapmayi dene. 

    2) Pratikteki fark. Sen icinde "yer tutucu" olarak degiskenler bulunan bir metin (kalip metin - template) yaziyorsun ve bunu sonra "Replace" ile son haline geitiriyorsun ( "render" olarak biliniyor ). "Template render" adiyla yaygin olarak bilinen bir yontem. Word gibi ofis otomasyonunda benzer sekilde "merge field" var.

    Arayan: @degisken1
    Aranan: @degisken2
    Tarih: @degisken3
    Sure: @degisken4
    Arayan: {0}
    Aranan: {1}
    Tarih: {2}
    Sure: {3}

    Ikisinin gorunumu boyle. Seninkinin bir avantaji degiskenlerinin adlarinin olmasi. Boylece, ornegin  @SiparisTarihi yazabilirsin ve degisken adi kendisini tarif eder. string.Format (ya da StringBuilder.AppendFormat) ise degiskenleri index olarak tutuyor. Ancak seninkinde ek ozellikler tanimlayamiyorsun (yazilacagi alanin genisligi, sola, saga dayali, veri formati gibi).

    Senin yonteminde, string.Replace kullandigin icin, gelen veriyi stringe cevirmen gerekiyor (mesela tarih DateTime tipinde geliyor, sen ToString() ile cevirmek durumunda kaliyorsun). String.Format'da ise bu otomatikman senin icin yapiliyor.

    (Diger bazi dillerde ve html rendering yapan yerlerde bu is daha gelismis olarak kullaniliyor ve ozellikler yanisira direktifler filan da var ve pozisyon indexi seninki gibi degisken ismi kullaniliyor)

    Sonucta ortaya daha okunakli bir kalip cikiyor ve tek harekette son halini aliyor. Ornek:

    void Main()
    {
      Console.WriteLine (Render_AramaKaydi("Ali", "Veli", DateTime.Now, 3));
    }
    
    private string Render_AramaKaydi( string aranan, string arayan, DateTime tarih, int sure )
    {
      string template = @"Arayan: {0}, Aranan: {1}
    Tarih: {2}
    Sure: {3}";
      
      return string.Format( template, arayan, aranan, tarih, sure );
    }

    Arayan: Veli, Aranan: Ali
    Tarih: 6/6/2014 7:02:16 PM
    Sure: 3


    Teşekkürler hocam yararlı bilgiler için :)
    6 Haziran 2014 Cuma 16:11