19 Temmuz 2009 Pazar

Regular Expression Nedir?

Regular Expression, veriler içinde, istediğinize göre belirleyebileceğimiz kompleks sözdizimine sahip ifadeleri bulmak için kullanılan bir tekniktir. Bu teknik bir string içinde başka bir string bulmamıza ve istersek değiştirmemize yarar. Sözdizimi oluşturmak için kullanabileceğimiz birkaç yöntem vardır:
- Karakter Uyuşması
- Tekrarlanma Uyuşması
- Pozisyon uyuşması

1. Karakter Uyuşması: Belirlediğimz karakterlerin string içinde aramamıza yarar.
Örnek:
dogma

Başka bir örnek:
d.gma

"Nokta" karakteri, Regular Expression içinde özel bir karakterdir ve herhangi bir karakter yerine geçebilir. Yani yukarıdaki ifade
dAgma dBgma d9gma dogma d0gma..
ifadelerini çağırır.

Burada "Nokta" ile her karakteri arayacağımız gibi istediğimiz karakterler içinde arama yapılmasını da sağlayabiliriz:
[1234]dogma
Sonuç:
1dogma, 2dogma, 3dogma, 4dogma

Bunu bir diziye dökecek olursak:
[1-9]dogma
Sonuç:
1dogma, 2dogma,...,8dogma, 9dogma

Tabi burada rakam yerine harf de kullanabiliriz:
[a-d]dogma
Sonuç:
adogma, bdogma, cdogma, ddogma

2. Tekrarlanma Uyuşması: Regular Expression'ın derinleme araştırma yaparak gücünü gösterdiği bölümdür.
Örneğin dogm ve dogma çıktısını istiyoruz. Bunun için başka bir özel karakter kullanmalıyız: "Soru İşareti"
dogma?

Sonuç:
dogm, dogma

Soru işareti, soru işaretinin sıfır ve bir solundaki karakterler düşürülerek araştırılır.

Peki "dogma?" veya "dogma.?" şeklinde çıktı istiyorsak ne yapmalıyız? Kelimesi kelimesine arama için özel karakterlerden hemen önce bir ters bölü işareti (\) koymalıyız.
Yani dogma\?
Sonuç sadece dogma? değerini döndürür.

Diğer bir özel karakter yıldız işaretidir (*, asteriks). Bir önceki karakterle uyuşan sonuçlar çıkarır.
Örnek:
dogma*

Sonuç:
dogma, dogmaa, dogmaaaaaaa...

Burada son harfin değil bir grubun tekrarlanmasını istiyorsanız parantez kullanabilirsiniz.
Örnek:
dog(ma)*

Sonuç:
dogma, dogmama, dogmamamama...

Burada "ma" ifadesinin tekrar sayısı sınırsızdır. İfadenin kaç kere tekrar edileceğini de sınırlayabilirsiniz.
Örnek:
do{3}gma

Sonuç:
dooogma

Kısaca özel karakterlerin anlamları: \ ( ) [ { ^ $ * + ? . < >
\ : Özel karakterleri normak karakter olarak kullanabilmemizi sağlar.
: Veya anlamına gelir: "[htf]tp:" Çıktısı http: veya ftp: olur.
( : Grup başlatır.
] : Grup sonlandırır.
[ : Diziler oluşturmamızı sağlar. [A-Z]
{ : Tekrar sayısı belirmebilmemizi sağlar.
^ : Aranan ifadenin, string içinde en başta aranmasını sağlar.
$ : Aranan ifadenin, string içinde en sonda aranmasını sağlar.
* : 0 ya da daha fazla ifadeyi string içinde arar.
+ : 1 ya da daha fazla ifadeyi string içinde arar.
? : Kendinden önceki bir ifadeyi düşürerek arama yapar.
. : Kendi bulunduğu yere herhangi bir karakter koyarak arama yapar
< : İfadenin, string içinde tam olarak geçmesini sağlar:


3. Pozisyon Uyuşması: Aranılan ifadenin string içindeki yerini de belirlememizi sağlar.
İfadenin, string içinde en başta olmasını istiyorsak başına ^ koymamız gerekir.
Örnek:
^dogma
Burada, string dogma ile başlıyorsa sonuç başarılıdır.

Eğer string içinde en sonda olmasını istiyorsak sonuna $ koymalıyız.
Örnek:
dogma$
Burada da, string dogma ile bitiyorsa sonuç başarılıdır.

Sık Kullanılan uygulamalar için bazı hazır diziler geliştirilmiştir:
\d = [0-9]
\D = [^0-9]
\w = [a-zA-Z0-9]
\W = [^a-zA-Z0-9]
\s = [ \t\n\r\f]
\S = [^ \t\n\r\f]



Artık Regular Expression konusunun temelini biliyoruz. Aşağıdaki örnekler yardımıyla kendi sözdiziminizi yazarak kendi kontrollerinizi oluşturabilirsiniz.

Telefon Numarası Doğrulama:
0(XXX)-XXX-XX-XX

Aradığımız karakterler:
Sıfır Parantez Açma 3 Adet Rakam Parantez Kapama Çizgi 3 Adet Rakam Çizgi 2 Adet Rakam Çizgi 2 Adet Rakam

Regular Expression:
0\([0-9]{3}\)-[0-9]{3}-[0-9]{2}-[0-9]{2}

Şimdi teker teker ifadeleri açıklayalım:
0 : Numarada aranan sabit karakter.
\( : Parantez açıyoruz ancak parantez özel karakter olduğundan önüne bir ters bölü işareti koyuyoruz. (Parantez, gruplama da kullanlan özel karakterdir)
[0-9]{3} : Sıfırdan dokuza kadar olan karakterler üç defa bulunacak.
\) : Parantezi kapatıyoruz. Artık başındaki ters bölüyü anlatmama gerek yok sanırım.
- : Numarada aranan sabit karakter.
[0-9]{3} : Sıfırdan dokuza kadar olan karakterler üç defa bulunacak.
- : Numarada aranan sabit karakter.
[0-9]{2} : Sıfırdan dokuza kadar olan karakterler iki defa bulunacak.
- : Numarada aranan sabit karakter.
[0-9]{2} : Sıfırdan dokuza kadar olan karakterler iki defa bulunacak.


--------------------------------------------------------------------------------


--------------------------------------------------------------------------------

Mail Adresi Kontrolü içinde şu ifadeyi kullanabilirsiniz:
[a-zA-Z0-9]+@[a-zA-Z0-9]+\.[a-zA-Z0-9]+

C# ile Web sayfası bilgilerini almak

asp.net yada php gibi modern diller sunucuda çalışarak bilgilere üretir.üretilen bilgilerde html olarak görüntülenir.Html bilgileri almak kolaydır fakat bir asp.net kodunu sunucudan almak pratikde imkansızdır (mimari izin vermez) fakat bir web sayfasının o anki görüntüsünü alabilir.
Web sitesi üzerinde önemli işlemler yapabiliriz.
aşağıda ki kod sozluk sitesine bağlanır ve sitenin html bilgilerini bize sunar.
using System.Net;
using System.IO;

-----
string URL = "http://www.sozluk.com";
HttpWebRequest myRequest = (HttpWebRequest)WebRequest.Create(URL);
myRequest.Method = "GET";
WebResponse myResponse = myRequest.GetResponse();
StreamReader sr = new StreamReader(myResponse.GetResponseStream(), System.Text.Encoding.UTF8);
string result = sr.ReadToEnd();
sr.Close();
myResponse.Close();
textBox1.Text = GetWebPageTitle("http://www.sozluk.com");

14 Temmuz 2009 Salı

INSERT INTO SELECT

Kim SQL kullanarak bir tablodaki verilerini başka tabloya kopyalamak istemez.Tabiki kopyalanacak veri tiplerinin uyumlu olması kaçınılmaz.
insert into tablo1 (val1,val2) Values('deg1','deg2') şeklindeki standart kullanımdan biraz farklı olarak values yerine yeni bir select sorgusu getirerek dönen değerlerin tabloya eklenmesi sağlanır.
insert into mla_Rev (LanguageID, AppID) select LanguageID, AppID FROM mla_Rev WHERE (RevID = 8)"

C# Stored Procedure Eklenen Kaydın Değerini Almak

Senaryo: Bir Kayıt eklediniz.ve eklenen kaydın id numarasını alarak başka işler yapacaksınız.Peki nasıl alırsınız bu değeri.Stored Procedure kullanarak.

öncelikle Stored Procedure
insert sorgusunda bir değişiklik yapmalıyız

CREATE PROCEDURE SPISIMKAYIT
@dSupplierName varchar(50),
@dSupplierAddress varchar(50),
@dSupplierTel nchar(10),

@ID int out
AS
insert into tbSuppliers (SupplierName,
SupplierAddress,SupplierTel)values
(@dSupplierName,@dSupplierAddress
,@dSupplierTel)SET @ID = SCOPE_IDENTITY()


hazırlamış olduğumuz Stored Procedure oluşturduk. Peki C# nasıl geri dönecek bu zımbırtı.
public int InsertSupplier()
{
SqlCommand cmd = new SqlCommand("Supplier_Add");
cmd.Parameters.Add("@dSupplierName", SqlDbType.VarChar).Value = supplier.SupplierName;
cmd.Parameters.Add("@dSupplierAddress", SqlDbType.VarChar).Value = supplier.SupplierAddress;
cmd.Parameters.Add("@dSupplierTel", SqlDbType.VarChar).Value = supplier.SupplierTel;
cmd.Parameters.Add("@ID", SqlDbType.Int).Direction = ParameterDirection.Output;
cmd.CommandType = CommandType.StoredProcedure;
cmd.Connection = Connections.Connection();
Connections.Open();
cmd.ExecuteScalar();
int sonid = Convert.ToInt32(cmd.Parameters["@ID"].Value);
return sonid;
}

işte böylede geri dönerek eklediğimiz kaydın id'si

10 Temmuz 2009 Cuma

Arraylist

Dizilerde çalışmanın bir çok sıkıntısı olduğu bilir.Öncelikle dizinin eleman sayısı yazılmalıdır.Ayırca Dizinin eleman sayısının kestirilemeyeceği noktalarda oldukca büyük diziler tanımlamak gerekir.Bu diziler bellekde yer işgal eder ve yinede bir çok seneryoda elimizdeki diziden daha fazla sayıda diziye ihtiyacımız olamayacağının kestiremeyebiliriz.Sonunda ne olur IndexOutOfRangeException istisnası size fırlatılıverir.

işte dizi sıkıntılarından bizi kurtaracak süper bir yol Arraylist istediğiniz kadar bilgiyi ayrıca istediğiniz tiptekini arraylist altında kolayca tutarız.

ArrayList KList= new ArrayList(); // KListisimli ArrayList nesnesi oluşturalım.

// KListnesnemize sırası karışık tipler yükleyelim
// Add metodu ile ekleyelim.
KList.Add("Ahmet");
KList.Add(12);
KList.Add(true);
KList.Add(32.4f);
KList.Add('c');

// aList'in elemanlarını ekrana yazdıryoruz:
Console.WriteLine("\t KList'in elemanları:");
foreach(int eleman in KList)
Console.WriteLine(eleman);



unutmamamız gereken bir şey var arraylist using System.Collections sınıfı altında bulunduğu için dahil edilmeli.


ArayList Diğer fonksiyonları aşağıda listelenmektedir.
---------------------------------------------------
Add Bir nesneyi ArrayList'in sonuna ekler.

BinarySearch Sıralanmış bir ArrayList içinde bir nesneyi Binary search algoritması kullanarak arar.

Clear ArrayList'in tüm elemanlarını siler. Sıfırlar.

Contains Herhangi bir nesnenin ArrayList'in elemanı olup olmadığını kontrol eder.

Insert Dizinin sonuna değilde istediğimiz bir yerine indeksini belirterek eklememizi sağlar.

Remove Herhangi bir elemanı diziden siler.

Reverse Diziyi ters çevirir.

Sort ArrayList'i sıralar.

9 Temmuz 2009 Perşembe

Alternatif içecek Arayışları 1 - vişne suyu & meyveli buzlu çay


malzemeler:

•1 kg vişne
•yaklaşık 1,5 litre su
•2 su bardağı toz şeker (miktarını kendi isteğinize göre ayarlayabilirsiniz)
•yarım limonun suyu
hazırlanması:

1. 1 kg vişneyi yıkayıp saplarını koparın. vişneleri geniş ve derin bir tencereye alın. tencereye vişnelerin üzerlerini geçecek kadar su ekleyin. 2 su bardağı toz şekeri de ilave edip orta hararetli ateşte kaynamaya bırakın. (tencerenin kapağı taşma tehlikesine karşı açık olmalı)

2. vişne suyu kaynamaya başlayınca suyun renginin daha kırmızı olması için yarım limon suyunu ekleyin. kaynama işlemini vişneler çatlamaya başlayana kadar sürdürün. soğutup servis yapın.


ablamla üniversitemizin yaz okulu döneminde aynı dersi alırken (management dersiydi sanırım) tenefüs aralarında işletme binasının çaprazındaki kantine gidip birer ice tea alır, manzarada ders saatinin başlamasını beklerdik. ablam benden önce mezun olduktan sonra en çok birlikte geçirdiğimiz bu tenefüsleri özler olmuştum...
benim iki gün önce denediğim buzlu çay tarifini ayşen hanım mutfaktazen mail grubuna göndermişti. onun anlatımını değiştirmeden aktarıyorum.

Sıcaklarda en ferahlatan içeceklerin başında gelir bence ice tea yani soğuk çay. Evde en lezzetlilerini çabuk ve kolayca yapabiliriz.. Ben bir tarafta porselen demlikte siyah çayı 3-5 dakika bırakıyorum ve içine meyva parçaları atıyorum. En sevdiğim karışımlardan biri de çilek , şeftali ve bir kaç karanfil. Sürahinin en az yarısına kadar buzla dolduruyorum ve demi doğrudan buzların üstüne döküyorum . Buzlar eridikten sonra gerektiği kadar su ekliyorum. yarım limonu içine sıkıp , yarım limonu da 4'e bölüp kabuklarıyla içine atıyorum. İstenen şekilde ( şeker , tatlandırıcı , salvia , bal ...) tatlandırdıktan sonra birazbuzdolabında bekliyor ve afiyetle içiliyor .
Soğuk çay yaparken püf noktası demin hemen soğutulması . Bu yüzden bol buz kullanmak gerek . Bu yapılmadığında tadı değişiyor ,acılaşıyor .

7 Temmuz 2009 Salı

Access Replace Function

Access'da Replace Fonksiyonun Syntax aşağıdaki gibi
"Replace ( string1, find, replacement, [start, [count, [compare]]] )"
Örneklerde isterseniz.

Replace("alphabet", "bet", "hydro") would return "alphahydro"
Replace ("alphabet", "a", "e") would return "elphebet"
Replace("alphabet", "a", "e", 2) would return "lphebet"
Replace("alphabet", "a", "e", 1, 1) would return "elphabet"

VBA codu olarakda

Dim LResult As String
LResult = Replace ("alphabet", "a", "e")

kullanılabilir.