Java Örnek Kodlar

Yaptıklarımı kod üzerinde açıklamaya çalıştım.
 private List Sirala()
            // buttonumuzun click olayını tetikledikten
            //sonra Sırala methoduna yolluyorum
        {
            string[] sirasiz = txtsirala.Text.Split(' ');
            // textbox içindeki tüm değerleri ayırarak yazıyoruz.
            List siraliInt = new List();
            // ayrı bir generic list oluşturarak en son
            //sıralı halde textboxa yazdırıcaz değerleri.

            for (int i = 0; i < sirasiz.Length; )
            {
                try
                {
                    siraliInt.Add(int.Parse(sirasiz[i]));
                    //ayrılan sayılar tek tek dönüştürülüyor eğer
                    //donüştürmede hata cıkarsa catch'e gidip
                    //sadece i sayacını arttırıyoruz.
                    i++;
                }
                catch
                {
                    i++;
                }
            }

            // en son olarak olusan yeni sırasız listimizi sıralı hale getirmek için
            // değiş tokuş işlemiyle bir öncekinin değerini kontrol ederek küçükten
            //büyüğe dogru sıralıyoruz ve son haliyle textboxımızın içine yazdırıyoruz.
            for (int i = 0; i < siraliInt.Count - 1; i++)
            {
                for (int y = i + 1; y < siraliInt.Count; y++)
                {
                    if (siraliInt[i] > siraliInt[y])
                    {
                        int temp = siraliInt[i];
                        siraliInt[i] = siraliInt[y];
                        siraliInt[y] = temp;
                    }
                }
            }
            return siraliInt;
        }
Gelelim 2. sorumuza:
Senaryo :
Hackerlerın kendi aralarında konuştukları şifreli konuşma metinlerini çözülmesi lazım.
Görev :
Bir konsol uygulaması gerekiyor :
  • Belirtilen karakter ırmağı içinde belli bir ifadenin olup olmadığını, eğer varsa kaç kere bu karakter ırmağında yer aldığını bulun.
  • Uygulama aynı anda bir ifadeyi bulması için tasarlanmalı
Ayrıntılar : 
Örnek bir karakter ırmağı:
adalsşlldlşsşopzşöm12sdsdbabalsdlllksdsd
sdklasşkşakkdşasşkd2lcmeoasdsdsd09sdkdsm
sdklasşkşakkdşasşkd2lcmeoasdsdsd09sdkdsm
sdklasşkşakkdşbabap2lcmeoasdsdsd09sdkdss
sdkloısıssdddşasşkd2lcmeoasdsdsd09sdkdsm
sdklasşkşakkdşasşkd2lcmeoasdsdsd09sdkd3e
sdklasşkşakkdşasşkd2lcmeoasd1wsddgedkwd4
sdkl129939939şasşkd2lcmeoasdsdsd09sdkdsm
Bulunmasını istenen örnek bir ifade : baba
Çıktı : Bu karakter ırmağında baba ifadesi 2 kere geçmiştir.
Örnek Girdi : 
> SifreCoz metinirmagi.txt baba
Not:  Uygulama metinirmagi.txt dosyası içindeki karakter ırmağını okumalı
Örnek Çıktı  :
Bu karakter ırmağında baba ifadesi 2 kere geçmiştir.
Örnek arayüzünü gösterip kod kısmındaki açıklamalarımla bu soruyuda yapmış olucaz.
private string GetResult()
        {
            string result = "";
            if (txtdosyayolu.Text != "")
            {
                string okunacakdosya = File.ReadAllText(txtdosyayolu.Text, Encoding.UTF8);
                //okunacak dosyayının yolunu ReadAllText methodu ile string ifadeye
                //atıyoruz
                var okunanlar = Regex.Split(okunacakdosya, txtokunacakKelime.Text);
                //regular expression ile bulmak istediğimiz
                //ifadeyi ayırarak uyguluyoruz. bize dönecek olan sonuc
                // string dizesindir bu dizenin eleman sayısına göre
                // ekrana yazılacak ifadeyi gösteriyoruz.
                if (okunanlar.Count() > 0)
                {
                    result = "Bu karakter ırmağında " + txtokunacakKelime.Text + " ifadesi " + (okunanlar.Count() - 1) + " kere geçmiştir.";
                }
                else
                {
                    result = "Bu karakter ırmağında " + txtokunacakKelime.Text + " ifadesi yoktur.";
                }
            }
            return result;
        }
ve Son Sorumuza geldik
Senaryo :
Yaklaşık 1.5 ay önce Instagram firması Facebook tarafından satın alındı. Bunun doğal sonucu olarak da Instagram  firmasının sahip olduğu tüm dokümanların içerikleri, yeni marka  ismiyle değiştirildi (Instagram > Facebook ).
Fakat geçenlerde bazı dokümanlarda halen Instagram ifadesinin yer aldığını ortaya çıktı. Bu durumun acilen düzeltilmesi lazım.
Görev :
Bir konsol uygulaması yaz, öyle ki :
  • Belirtilen dizin içindeki tüm xml dosyalarını bulsun  ( ‘xml’ ve ‘xsl’ uzantılarından bu dosyaları tanısın)
  • XML dosyasının içinde bulunun
    • Text-node
    • title attribute-values
      noktalarında ki “Instagram”  ifadelerini  “Facebook” ifadesi ile değiştirsin.
  • Orijinal XML dokümanını değiştirerek yeni halini kayıt etsin. Fakat kayıt etmeden önce yedekleme amacıyla .bak dosyasını oluşturup, bulunduğu dizine yazsın.

Ayrıntılar
  • Kullanıcı hangi dizin üzerinde işlem yapacağını parametre ile belirtmeli, ör :  c:someDir
  • XML dosyasında geçen ifade(ler) zaten “Facebook” olarak değiştirilmiş ise tekrardan bir güncelleme yapma
  • İlgili dizin içinde XMLve XSLdışındaki başka hiç bir dosya üzerinde işlem yapma
  • Herhangi bir IO hatası durumunda uygulama bir sonraki dosya üzerinde işlem yapmaya devam etmeli. (Yarıda kesilmemeli) ve ayrıca hataya sebebiyet veren dosya üzerinde herhangi bir güncelleme işlemi yapmamalı. Ve son olarak hatanın hangi dosya üzerinde gerçekleştiğini ve ne zaman gerçekleştiğini ekrana basmalı.
  • Sadece bire bir eşleşme durumunda marka değiştirme işlemi yapılmalı.
  • İşlem sonunda kaç dosyanın değiştirildiğini ifade eden bilgiler konsola basmalı.

Örnek :
> MarkaDegisimi c:someDir  
Önce :
Directory of c:somedir
23/02/2012  12:52               337 foo.xml
26/02/2012  15:06               37 dokunma.doc
2 File(s)             401 bytes
foo.xml dosyasının uygulama çalışmadan önceki içeriği
<test title=”Instagram develops great softwares”>
<line1>Snap a picture, choose a filter to transform its look and feel, then post to Instagram</line1>
</test>
Uygulama çalıştıktan sonra :
Directory of c:somedir
23/02/2012  12:52               337 foo.bak
26/02/2012  15:06               37 dokunma.doc
26/05/2012  13.09               350 foo.xml
3 File(s)             583 bytes
İşte şimdi foo.xml dosyasının  içeriği değişti
<test title=”Facebook develops great softwares”>
<line1>Snap a picture, choose a filter to transform its look and feel, then post to Facebook</line1>
</test>
İlk baştaki arayüz ve değişmeden önceki xml dosyasının görünümü aşadaki gibidir.
private int Degistir()
        {
            string[] getDosyalar = new string[lstDosyalar.Items.Count];
            //listbox'ın içindeki dosya yollarını ayırıp getDosyaya atıyoruz.
            for (int i = 0; i < lstDosyalar.Items.Count; i++)
            {
                getDosyalar[i] = lstDosyalar.Items[i].ToString().Split('>')[1].Trim();
            }

            int count = 0;
            for (int i = 0; i < getDosyalar.Length; i++)
            {
                //eger dosya mevcut ise if'in içine gir .bak uzantıları es geç
                if (File.Exists(getDosyalar[i]) && Path.GetExtension(getDosyalar[i]) != ".bak")
                {
                    try
                    {
                        //yeni yaratılacak .bak uzantılı dosyamız icin yapılanlar.
                        string dosyaAdi = Path.GetFileNameWithoutExtension(getDosyalar[i]);
                        string directoryPath = Path.GetDirectoryName(getDosyalar[i]);
                        StreamWriter wrte = new StreamWriter(string.Concat(directoryPath, '\', dosyaAdi, '.bak'));
                        StreamReader read = new StreamReader(getDosyalar[i], Encoding.UTF8);
                        string allreaded = read.ReadToEnd();
                        wrte.Write(allreaded);
                        wrte.Close();
                        read.Close();

                        //xml dosyamız yüklendikten sonra gerekli islemler icin hem
                        //xml'in içindeki kök özelliğine hem de onun alt
                        //dizinindeki ifadelere bakıp değişiklik yapılması gerekirse yapılıp yeniden
                        //oluşturulmaktadır.
                        XmlDocument xcopy = new XmlDocument();
                        xcopy.LoadXml(allreaded);
                        XmlNode nodeRoot = xcopy.SelectSingleNode("test");
                        XmlWriter yeniHali = null;

                        if (nodeRoot.Attributes[0].Name != "title")
                        {
                            throw new Exception();
                        }
                        else
                        {
                            bool success = false; //kontrol amaçlı eğer değişen ifadeler var ise true yap.
                            if (nodeRoot.Attributes[0].Value.StartsWith("Instagram"))
                            {
                                nodeRoot.Attributes[0].Value = nodeRoot.Attributes[0].Value.Replace("Instagram", "Facebook");
                                success = true;
                            }
                            //birden çok child node var ise foreach yardımıyla tek tek bakılıp 
                            //değişecek var ise değiştirilir.
                            foreach (XmlNode child in nodeRoot.ChildNodes)
                            {
                                if (Regex.IsMatch(child.InnerText, "Instagram"))
                                {
                                    child.InnerText = child.InnerText.Replace("Instagram", "Facebook");
                                    success = true;
                                }
                            }

                            if (success)
                            {
                                //eğer dosyanın içinde değişiklik olmus ise yeni xml dokümanı oluşturularak
                                //oncekinin üzerine yazılır.
                                yeniHali = XmlWriter.Create(getDosyalar[i]);
                                xcopy.WriteContentTo(yeniHali);
                                yeniHali.Close();
                                File.SetCreationTime(getDosyalar[i], DateTime.Now);
                                count++;
                            }
                        }

                    }
                    catch (Exception ex)
                    {
                        lstSonDosyalar.Items.Add(getDosyalar[i] + " >> Dosya Hatası ve zamanı:" + ex.Message + "," + DateTime.Now);
                    }
                }
            }
            return count;
        }

Programın son hali ve çıktısı yukardaki gibidir arkadaşlar. İlk baştanda belirttiğim gibi kendim yorumlayarak böyle bir sonuca gittim siz daha da geliştirip yenileyebilirsiniz.
Hayatınızdan kod eksik olması. :) İyi Çalışmalar.

Hiç yorum yok:

Yorum Gönder