25 Aralık 2016 Pazar

C# ile XML Serialization ve Deserialization işlemleri

Merhaba;

Bugünkü işleyeceğimiz konu XML Serialization & Deserialization.
Bu konu aslında Serialization sınıfı kapsamında değerlendirilecek olsaydı o zaman diğer 2 yöntemide göstermek gerekirdi.(Binary ve SOAP)

Bu konuda SOAP veya Binary kavramlarını göstermeyeceğime rağmen SOAP hakkında kısa bir bilgi vermek boynumun borcudur.Neden? Çünkü günümüzde WebServis iletişim ağı mükemmel derecede talep görüyor.Her bir kurum bir diğer firmaya entegre olmak istediğinde WebServis 'leri kullanmak durumunda kalıyor.Peki WebServis nedir ne değildir bu konuyu açıklamaya gerek varmı derseniz.WebServis mimarisini ayrı bir alanda incelemenizde fayda var.Ancak SOAP WebServis mimarisin iletişim kanalıdır diyebiliriz.Yani kafa karıştırmadan açıklamak gerekirse WebServis mimarilerini incelediğinizde SOAP tarzı nesne iletişim protokollerini zaten ilk seferde görmüş olacaksınız.Bu yüzden SOAP (Simple Object Access Protocol - Basit Nesne Erişim Protokolü) dediğimiz arayüz WebServis mimarilerinin farklı bir kanalıdır.

Şimdi asıl konumuza gelecek olursak.Yine WebServis mimarilerinden çok fazla uzaklaşmadan asıl adamın yani XML 'in ne kadar önemli olduğunu konuyu incelediğinizde anlayacaksınız.O yüzden size bugün C# üzerinden
önce XML 'i serileştirip daha sonra XML 'i orjinal haline çevirip okumayı göstereceğim.Normal bir okuma işleminden olan farklarını projemiz bittikten sonra gösteriyor olacağız.ve bu işlemleri yaparken asıl amacımın temelini gösteriyor olacağımı belirtmek isterim.O yüzden gelişmiş yapılardan kaçınıyor işin pratiğini ve mantığını anlatmaya çalışacağım.

Proje:
1 adet Label - Dosya yolu
1 adet TextBox
1 adet RichTextBox
2 adet Button - Serialize & Deserialize
[B]Örnek;[/B]


[B]1. ADIM[/B]
using System.Xml.Serialization;
Personel sınıfını tanımlıyoruz.Sınıfa ait 3 özelliğimiz var adi,soyAdi,unvan.
Değerlerini Form1 'in Load olayında biz belirleyeceğiz.Bu durumda özelliğin boş kalması bir problem oluşturmayacak.


[B]2.ADIM[/B]
Form1 sınıfımızın 2 adet elemanı var.
elemanlar Personel sınıfındaki alanları liste halinde almamızı sağlıyor.Yani bu bir Personel dizisi oluyor.
DirectoryInfo sınıfı Dizin bilgilerini saklayan bir sınıftır.Bu sınıfa daha sonra direk Exe 'nin bulunduğu dizini belirleyeceğiz.


[B]3.ADIM[/B]
Şimdi Form1 'in Load olma olayı esnasında Personel sınıfımızın özelliklerini belirleyelim. 3 Adet Personel oluşturduktan sonra elemanlar dizisine ekleme yapıyoruz.Yani; elemanlar dizisi aslında Personel listemizi tutan tek bir değişken oluveriyor.



[B]4.ADIM[/B]
[B][RED]Serialization[/B][/FONT]
Şimdi eklediğimiz verileri XML 'e serileştirelim.Yani XML formatına uygun hale getirelim.Yani artık bu sınıfın ne iş yaptığını görelim.Aşağıdaki kodları inceleyin.Satır satır açıklamaları resmin altındadır.

1.satır : Environment sınıfı ile bulunduğumuz dizini öğreniyor string dönen değeri path değişkenine aktarıyoruz.
2.satır : Form1 sınıfının elemanı olan dInfo 'ya yeni bir DizinBilgisi gireceğimizi söyledik yukarıdaki bulduğumuz dizini girdik ve kaydedeceğimiz dosya adını bildirdik.
3.satır : XMLSerializer sınıfı ile yeni bir serileştirme yapacağımızı bildirdik.Bize hangi tipte olacağını soruyor ve parametre olarak giriyoruz.Önce List<Personel> dizisinin tipini typeof() parametresi ile öğrendik ve dönen değeri XMLSerializer 'e bildirmiş olduk.
4.satır : Bir dosya açıyoruz.dInfo değişkenimizi 2 parametre ile aç veya oluştur diyoruz.
5.satır : Zaten açtığımız/oluşturduğumuz dosya üzerinde yazacağımızı ve bunun UTF8 formatında olmasını söylüyoruz.
6.satır : Serileştirme(Serialization) işlemi başladı.Yazacak eleman StreamWriter Yazılacak elemanlar ise Personel listemiz
7-10 : Eğer dosya okunacak modda ise Açıldı yazısını yazdır..Sonrada dosyayı daha sonra başka bir yerden açacağımız için burada kapatmamız gerekiyor..

[B]5.ADIM[/B]
[B][RED]Deserialization[/B][/FONT]
Şimdide dosyamızı XML dosyalarından arındırarak okuyalım.Az önce XML kodlarını yazmadan bizim için Serileştirerek kendin otomatik yaz demiştik.ve C# bunu 2 satırla bize halletti.Şimdiki isteğimiz bize bunu uygun formatta okumamızı sağla.ve o bize göstermediğin XML kodlarını burdada gösterme.İnceleyelim..

1.satır : Environment sınıfı ile bulunduğumuz dizini öğreniyor string dönen değeri path değişkenine aktarıyoruz.
2.satır : Form1 sınıfının elemanı olan dInfo 'ya yeni bir DizinBilgisi gireceğimizi söyledik yukarıdaki bulduğumuz dizini girdik ve kaydedeceğimiz dosya adını bildirdik.
3.satır : XMLSerializer sınıfı ile yeni bir serileştirme yapacağımızı bildirdik.Bize hangi tipte olacağını soruyor ve parametre olarak giriyoruz.Önce List<Personel> dizisinin tipini typeof() parametresi ile öğrendik ve dönen değeri XMLSerializer 'e bildirmiş olduk.
4.satır: Bu sefer dosyamıza sadece aç erişimi veriyoruz.Çünkü sadece okuyacağız.
5.satır: Bir string dizisi sınıfıdır.
6.satır:Deserialize işlemi başlatıldı.Dosyanın InnerText 'lerini ver.Önce List<Personel> tipinde (elemanlar)'ı tanımladık.ve yine içeriğine Deserialization yapacağımız openXML değişkeninin (List<Personel>) tipinde olacağını belirttik.
7.satır:Personel tipinde olan değerlerimizin içerisinde dönüyoruz.RichTextBox componentine aktarıyoruz.componentin elemanına aktarım yaparken hemde StringBuilder dizisine elemanları aktarıyoruz.Hem göstermiş hemde eklemiş oluyoruz.
8.satır:Açık dosyayı kapatıyoruz.

2 Temmuz 2016 Cumartesi

-C# OpenFileDialog() KULLANIMI -

Merhaba, Arkadaşlar
Dosya ve Klasör işlemlerinde OpenFileDialog ile bir Dialog ekranı açılır.
Bu Dialog ekranında yapılacak olan işlem bir  dosya seçebilmemizi sağlar.Seçilecek olan dosya 'nın (SELF) sadece kendi ismini almak istersek o zaman yine referans aldığımız değişkenden (SafeFileName) 'i kullanmaktır.

Şimdi görelim :
Önce sınıfımızı referans alalım

OpenFileDialog open = new OpenFileDialog();
         open.ShowDialog();

Bu kullanım button click olayına yazıldığında ShowDialog ile bir dosya seçebilme ekranı açar.
Bu dosya  'yı birde DialogSonuc 'una göre işleme tabi tutalım.

if(open.ShowDialog()== DialogResult.OK){

   MessageBox.Show("Dosyanın kendi ismi :  " + open.SafeFileName);
 MessageBox.Show("Dosyanın bulunduğu tan konum : " + open.FileName);
}

Açıklayacak olursak eğer(ShowDialog klasörünün içindeki DialogSonucu yani kısaca içinde bulunan OK tuşu basılmışsa diyebiliriz. aşağıdaki işlemleri gerçekleştir.Aşağıda ise dosyanın konumu ve adı görüntüleniyor..

Şimdi bide Filter özelliğine bakalım

Kullanımı ;
open.Filter = "Gif | *.gif | Bat |* .bat";

bu şekilde Dialogda belirlediğimiz filtreler Gif ve Bat dosyası oldu.Bu dosya uzantıları haricinde herhangi bir dosya açılmayacaktır.Bunun haricinde dosyaları kısaca seçemeyeceksiniz dialog 'da görünmeyecektir bile.

9 Haziran 2016 Perşembe

- C# REGEX CLASS SINIFI -

Regex(Regular Expression) bir kütüphanedir.

using System.Text.RegularExpressions;


Bu kütüphane String bir ifadenizi istediğiniz değerlerde bulmak ,değiştirmek,silmek ve denetlemek işlemlerini yapar.

www.regexlib.com

Örnek vermek gerekirse ;

String ifadenin içinde \ ters slash kullanacak olsaydık

  • @ işaretini , ifadenin önüne ekleriz.
  • \\ ters slash işaretini iki kez yazarız.
  • \n = (New Line) Yeni Satır 
  • \s = (Space) Boşluk Karakteri gibi..
Nerede işimize yarar?diye bir soru duyar gibiyim.Genel anlamda Telefon NO,Mail adresi,Rakamsal ve Metinsel ifadeleri String ifadenin içerisinde olup olmadığının denetlemesini yapmamıza olanak sağlar.
Ayrı bir derste hangi işaretin neyi temsil ettiğini göstereceğim.
Şimdilik kullanım şekli ve ihtiyacımızı nerede karşılıyor olduğuna bakacağız.

IsMatch METODU

Elimizde bir REGEX ifadesi varsa kontrol etmek için IsMatch metodunu kullanırız.Eğer ifade IsMatch metodu parametresi ile eş değer ise Sonuç TRUE döner.
Eş değerden kastımız String ifadelerinin REGEX 'e göre uyumlu olup olmadığı..


Sadece Rakam Girişi Yapmak için REGEX  ;

        "[0-9]+$"
  • 0-9 arasındaki rakamlar istediği kadar girilebilir.
Harf ve Rakam Girişi Yapmak için REGEX  ;

"[A-Za-z0-9]+$"
  • $ = metnin sonunu ifade eder;
  • + = kendisinden önce gelen karakterin en az bir kere tekrar edeceğini belirtir.


UYGULAMA ORNEGI : 

 string password = Console.ReadLine();
 Regex pass = new Regex(@"^[^ şçğüöı]{10,16}$");
pass.IsMatch(password)


Şimdilik siz " @"^[^ şçğüöı]{10,16}$" " bu ifadenin kodlarını anlamaya çalışmayın sadece bu ifadede belirlenen mantık içindeki verilen karakterlerin ;

pass.IsMatch(password)

pass ifademiz Regex kütüphanesini referans almış ve belirlediği karakter dizelerin var olup olmadığını kontrol edecek ama nasıl? burada yardıma IsMatch metodu koşuyor (password) ise bizim dışardan girdiğimiz veri bu şekilde girdiğimiz verideki karakterlerin olup olmadığı koşuluna göre "TRUE" değer döndürecek.
Bir başka ders 'te size en önemli olan REGEX ifadeleri tablosunu sunacağım..

DİĞER KULLANIMLAR : 
Escape: Meta karakterleri metin içerisinden çıkarır.
IsMatch: Katarın kalıpla eşleşip eşleşmediğini verir.
Match: Katar ve kalıbın eşleşmesini saklar.
Matches: Bir metin içerisinde  kalıpla eşleşen bütün katarları saklar.
Replace: Kalıpla eşleşen metini parametre olarak girilen katarla değiştirir.
Split: Kalıpla eşleşen ifadeyi önceden belirtilen pozisyondan parçalara böler.
ToString: Kalıbı metin olarak döndürür.
Unescape: Meta karakterleri metin içerisine geri koyar.


7 Haziran 2016 Salı

-C# ILE YAS HESAPLAMASI (GEÇEN TARIH VE ZAMANI BULMA)

Selamun aleyküm,
C#
Girilen bir tarih ile bugünün arasında geçen zamanı ayırma nasıl yapılır fark nasıl bulunur?
Öncelikle bu konuda kafanızın karışacağı noktalar ;

  • Subtract
  • DateTime.MinValue
  • Neden eksiltiyoruz?
Arkadaşlar kodları paylaşmadan önce bu 3 problemi yazının sonunda detaylı anlatacağım.
Öncelikle ne yapacağımızı öğrenelim.Bizim vereceğimiz Tarih ve yine Bizim vereceğimiz bir sayı,bu yaş olacak! ikisi arasındaki zaman dilimini nasıl öğrenebilirim?

C# Form Üzerinden Çalışacağımız için Gerekli Componentler ;

--2 ADET LABEL--

  1. Doğum tarihi
  2. Yaş Sınırı
--1 ADET TEXTBOX

--> Yaş sınırı için

--1 ADET BUTTON

-->Hesapla (isminde)

--1 ADET TIMEPICKER

Eğer form dizaynını yaptı iseniz,kodlamaya geçiyoruz..


            



23 Mayıs 2016 Pazartesi

Algoritma Nedir?

Merhaba,

Algoritma nedir?

Belirli bir problemi çözmek ,ulaşmak için adımlar ile senaryolanan veya tasarlanan bir yol haritasıdır.
Kümeler ile gösterilip, en sonda çözüme gideceği bir son noktası olur.Genellikle kullanıldığı alan Bilgisayar Programları 'dır.Günümüzde Algoritma Kavramı her alanda çokça kullanılıyor.Bir projenin gelişme aşamasında Algoritma her zaman yol göstericidir.Daha hızlı çözümler sunar.Genellikle Programlama Dilleri 'nin temelinde,Bir Algoritma yatar.
Algoritma 2 Yönteme bağlıdır.
Bunlardan en önemlisi (AKIŞ DİYAGRAMLARI)' dır.
İkincisi ise Metinsel olarak düz ifade biçimidir.

Bir Bilgisayar Programcısı olarak biz Algoritma 'yı Bilgisayar dili 'ne uygun bir program yapacak şekilde tasarlayalım;

2 SAYIYI TOPLA?

A:ADIM

A0  --> Başla
A1  --> Sayı1 oku // 1. sayiyi kullanıcıdan oku
A2  --> Sayı2 oku // 2. sayiyi kullanıcıdan oku
A3  --> Topla = Sayı1 + Sayı2 // 2 sayının değerini Topla verisine ata
A4  --> Yazdır Topla // Topla verisi ni ekrana yazdır
A5  --> Dur

Bu arada Bilgisayar Programcıları Sıfır(0) ' ı  hiç bir zaman olduğu gibi yazmaz.Bunun nedeni 0 ile O karakteri birbiriyle aynıdır.Buna karışıklık vermemesi sebebiyle sıfıra her zaman ortasından bir çizik atılır.Varsayılan sıfır bu şekildedir.

Yukarıda görmüş olduğunuz Algoritma 5 Adım 'dan oluşuyor.Açıklamaları 'da yanında bulunuyor.Bir algoritma kavramı bunun gibi olmalıdır.Adım adım ve açıklayıcı;




Algoritma 'nın tarihine bakacak olursak ilk defa Harizmi 'nin  "Hisab el-cebir ve el-mukabala" kitabında sunulmuştur.AKIŞ DİYAGRAMLARI 'nı ayrı bir konuda inceleyeceğiz.Şimdilik Algoritma 'yı kavramaya çalışın.

Analiz Nedir?

Merhaba,

Arkadaşlar programcılık kapsamında temel mimarilerden, yani alt tabakadan, henüz programcılığa başlamadan öğrenmemiz gereken konulardan birisi analizdir.Analiz nedir ne değildir bunları göreceğiz.
Ama analiz program veya kod parçası değildir.Sadece reel hayatla birlikte projemizi beynimize adapte etme sürecidir.Yani bir kod yazarken veya program yaparken bu program neleri ve kimleri kapsıyor,
, hedef kitle program üzerinde hakimiyet kurabiliyor mu?  veya bir problem aşamasında takip etmemiz gereken algoritma şekli nasıl olmalıdır? bunlar gibi bir çok problem karşımıza çıkar.Bunları düşünüp sistemli bir şekilde programımıza entegre etmemiz, Bir analiz sonucu oluşur.Yani iyice açıklamak gerekirse, bir problem karşısında o problemi önce analiz etmeliyiz.Analiz demek ; Bir konuyu parçalarına ayırıp o parçaları inceleyip,arasında ilişkileri tanımlayıp yorumlamaktır.Bu sistem li araştırma analiz 'i ortaya çıkarır.Bunun sonucunda programı analiz etmiş oluruz.ve Analiz sonucunda program bileşenleri artık beynimize daha kolay çözümler sunar.Programcılık 'da algoritma kavramı en tecrübe edilmesi gereken bir mantıktır.Algoritma dersimizi ayrı bir konu altında paylaşacağım.Ancak Analiz ve Algoritma konusu bilinmesi gereken en mühim olaylardır.Bu sayede çözüme ulaşabiliriz.Belki şu an yeni bir programcısınız ama ileride sadece kodların ne iş yaptığı değil.Nerede hangi kodun kaç satırlık ,nereye, veya ne iş göreceği problemleri cereyan edecek.Analiz ve Algoritma hayat bulması gereken en önemli kavramlar olacaktır.Sadece Bilgisayar Dünyasında değil,Analiz reel Hayatta da işlenmesi gereken bir mantık senaryosudur.--

13 Mayıs 2016 Cuma

| JAVA GELİŞMİŞ FOR DÖNGÜSÜ |

Merhaba,

Java getirdiği gelişmiş for döngüsü ile bize çok kolaylık sağlar.Bazı dillerde görmüş olduğunuz foreach döngüsü bununla eşdeğerdir.Diziler ve koleksiyonlardaki veriler arasında dönmeyi sağlayan bu döngü,bir dizi veya koleksiyonda görüntelemek istediğiniz her nesne için tek bir komut ihraç eder.


Öncelikle bir dizi tanımladık.
Dizimiz 
String[] degerler = ("Ahmet","Suleyman","Kadir","Kerem","Necmi");
Problem : Tüm nesneleri görüntelemek istiyoruz 
Bu işlemi for döngüsüyle ilede basit bi şekilde yapabilirsiniz.
Ancak gelişmiş for döngüsü zaten bunun için yapılmıştır

for(String hepsi : degerler)
Öncelikle hepsi değişkenimizin başına veri tipimizi zorunlu bi şekilde ekliyoruz.Çünkü bu değişkenimizin içine tüm değerler atanacaktır.String olduğunu belirttik çünkü dizimizin veri tipi String
degerler
dizimizden alacağımızı belirtiyoruz.ve süslü parentezleri koyup yapıcağımız işlem için,(Biz ekrana çıktı verdik örnek te) döngünün içinde artık hepsi değişkenimiz bütün dizideki değerleri döndürecektir..