Konuyu görüntüle
IUCODERS FORUM > Programlama > .NET > C# string arama...
Yazar
ramcho


avatar
denizli
Kayıt: 02.10.2006
19.02.2009-18:46 #57200
extreme yazdi
 

Bak aklıma bi proje geldi tam senlik. Bi arama motoru yazalım opensource sitelerden kodlar çalsın sonra bunları indexlesin felan biz sorunca bulalımbiggrin.


düşünmüşler sanırım bu projeyi:)

http://www.krugle.org










Yazar
offman


avatar
Kayseri
Kayıt: 20.01.2006
22.02.2009-14:17 #57272
burakkanmaz yazdi
 
extreme yazdi
 
Bu ne yasilly. Ben nerden öğrenicem bütün .NET framework fonksyonlarınıbiggrin. Hem belki microsoft benim kelimemi amerikaya gönderiyodurlaughing


Her zaman senden daha iyi kod yazan olduğunu düşünüp internette araştırınca çok daha iyi kodlar bulabiliyorsun. Hatta framework'un içinde hazır fonksiyonlar olduğunu görebiliyorsun. Ben hard-coder lığı sevmiyorum :)

offman yazdi
 
            Regex rx = new Regex("kalem");
            string k = "kalemnkalem kalen kalem";
            int a = rx.Matches(k).Count;



Gökhan'a teşekkür ederim :) Kodu daha kısa hale getirmiş fakat regex'i direk kullanabilmek için kütüphaneyi using ile belirtmek gerekiyor. Ben üst kısımla uğraşılmasın diye uzun uzun yazdım ;)



Burak ben o soruya cevap için tıkladığımda tek bir cevap vardı orada ondan bunu yazayım dedim sonra bir ara kalmış post etmeden derken post ettim sonradan senin yazdıklarını gordum yani yazmıs olduğunu gorseydim yasmazdım. hani aynı kod nede olsa.





331. KSD
*.NET DEVELOPER




Yazar
burakkanmaz


avatar
Gaziantep
Kayıt: 02.10.2006
22.02.2009-15:19 #57274
offman yazdi
 
Burak ben o soruya cevap için tıkladığımda tek bir cevap vardı orada ondan bunu yazayım dedim sonra bir ara kalmış post etmeden derken post ettim sonradan senin yazdıklarını gordum yani yazmıs olduğunu gorseydim yasmazdım. hani aynı kod nede olsa.


Fazla bilgi göz çıkarmaz :) Hem seninki kısa görünüyor o yönden daha iyi. Bir tane using ekleyince daha kullanışlı oluyor seninki.peace





Yazar
piedro


avatar

Kayıt: 08.06.2008
22.02.2009-15:19 #57275
hız-hız diye çıldıran varsa, unsafe tag ıyla pointer kullansın hızı test etsin,, bi anda; C# ta mı çalışıyor C++ mı şaşırır;)
.net in hazır fonksiyonlarını fazla övmeye gerek yok.. en beğendiğim extreme in; topic in, 2.postu oldu;) kontrol edebildiğiniz kodları yazmak, en doğru olanı... yoksa böyle basit bi event için regular expressions kullanıp; onları collection a atmak, sonrada performanstan bahsetmek, böyle parlak mühendislere yakışmıyor arkadaşlar;)





Yazar
burakkanmaz


avatar
Gaziantep
Kayıt: 02.10.2006
22.02.2009-15:58 #57276
piedro yazdi
 
hız-hız diye çıldıran varsa, unsafe tag ıyla pointer kullansın hızı test etsin,, bi anda; C# ta mı çalışıyor C++ mı şaşırır;)
.net in hazır fonksiyonlarını fazla övmeye gerek yok.. en beğendiğim extreme in; topic in, 2.postu oldu;) kontrol edebildiğiniz kodları yazmak, en doğru olanı... yoksa böyle basit bi event için regular expressions kullanıp; onları collection a atmak, sonrada performanstan bahsetmek, böyle parlak mühendislere yakışmıyor arkadaşlar;)


C++'ı tabi ki geçemez C# fonksiyonları :)
Regex'in extreme'in yazdığı koddan daha hızlı olduğu konusunda ısrarcıyım.

Bende senin düşündüğünün tam tersini düşünüyorum. Parlak mühendisler oturup 100lerce satır yazmamalı. Başkalarının yazdığı 100 satırlık yere 2-3 satır kod koyarak aynı işi yaptırabilmeli. C#'ı geliştirenler oturup bu iş için en verimli kodu yazmışlar, tekrardan (hemde en verimli olduğunu bilmeden) uzun uzun kod yazmanın gereği yoktur diye düşünüyorum.

Hard coder olmak isteyen insanın zaten C# ile işi olmaz :)





Yazar
piedro


avatar

Kayıt: 08.06.2008
22.02.2009-16:10 #57277
mutfağa girdiğin zaman anlarsın...
örneğin: .net xml kodları mükemmel diye düşünürüz di mi,, peki hiç rss feed lerden(özellikle php sayfalardan) xml okumayı denediniz mi,, .net ne kadar hata tahammülsüz onu gördünüz mü... veya örneğin: webbrowser komponent iyle nesne oluşturup onu türetmeyi denediniz mi, dispose edebiliyor musunuz..
amacım polemik yaratmak değil, zaten o post umda da böyle ufak kodlar için demiştim, dikkat edersen..
Böyle ufak kodlar için yönetebileceğiniz kodları tercih ediniz..
Ve deneyiniz.. sonra rakamlarla iddaa ediniz





Yazar
burakkanmaz


avatar
Gaziantep
Kayıt: 02.10.2006
22.02.2009-16:17 #57278
piedro yazdi
 
mutfağa girdiğin zaman anlarsın...
örneğin: .net xml kodları mükemmel diye düşünürüz di mi,, peki hiç rss feed lerden(özellikle php sayfalardan) xml okumayı denediniz mi,, .net ne kadar hata tahammülsüz onu gördünüz mü... veya örneğin: webbrowser komponent iyle nesne oluşturup onu türetmeyi denediniz mi, dispose edebiliyor musunuz..
amacım polemik yaratmak değil, zaten o post umda da böyle ufak kodlar için demiştim, dikkat edersen..
Böyle ufak kodlar için yönetebileceğiniz kodları tercih ediniz..
Ve deneyiniz.. sonra rakamlarla iddaa ediniz


Tabi ki, henüz işin içine girmediğimden tam anlayamıyorum. Bu konuda haklısın :)
Elbette büyük bir kodlama yapıyorsak bazı şeyleri kendi kontrolümüzde tutmamız gerekir, ama bu tarz işlemlerde for ile substring ile tek tek kıyaslama yapmaktansa hazır fonksiyonları kullanmak daha mantıklı geliyor bana.
Şu anda yeni format attım :) Akşama doğru büyük veri kümesi ile hız ölçümü yapacağım. Sonucu (haksız çıksam bile) sizlerle paylaşacağım ;)

Not : Polemikten bahsetmişsin ama ben öğrenmek için karşılıklı diyalog içerisine giriyorum. Yoksa asla tartışma gibi bir niyetim yok ;) Yanlış biliyorsak, doğrusunu öğrenmek için bilgiyi paylaşmak gerekir.





Yazar
piedro


avatar

Kayıt: 08.06.2008
22.02.2009-16:28 #57279
burakkanmaz yazdi
 
piedro yazdi
 
mutfağa girdiğin zaman anlarsın...
örneğin: .net xml kodları mükemmel diye düşünürüz di mi,, peki hiç rss feed lerden(özellikle php sayfalardan) xml okumayı denediniz mi,, .net ne kadar hata tahammülsüz onu gördünüz mü... veya örneğin: webbrowser komponent iyle nesne oluşturup onu türetmeyi denediniz mi, dispose edebiliyor musunuz..
amacım polemik yaratmak değil, zaten o post umda da böyle ufak kodlar için demiştim, dikkat edersen..
Böyle ufak kodlar için yönetebileceğiniz kodları tercih ediniz..
Ve deneyiniz.. sonra rakamlarla iddaa ediniz


Tabi ki, henüz işin içine girmediğimden tam anlayamıyorum. Bu konuda haklısın :)
Elbette büyük bir kodlama yapıyorsak bazı şeyleri kendi kontrolümüzde tutmamız gerekir, ama bu tarz işlemlerde for ile substring ile tek tek kıyaslama yapmaktansa hazır fonksiyonları kullanmak daha mantıklı geliyor bana.
Şu anda yeni format attım :) Akşama doğru büyük veri kümesi ile hız ölçümü yapacağım. Sonucu (haksız çıksam bile) sizlerle paylaşacağım ;)

Not : Polemikten bahsetmişsin ama ben öğrenmek için karşılıklı diyalog içerisine giriyorum. Yoksa asla tartışma gibi bir niyetim yok ;) Yanlış biliyorsak, doğrusunu öğrenmek için bilgiyi paylaşmak gerekir.


tamam paşam;) unsafe tag ıyla yazıp, pointer la cursor a alırsan, bi de pointer ı stackalloc la stack bölgesine atabilirsek, bende performans sonuçlarının rakamlarını çok merakla bekliyorum;) ama %90 eminim, stack daki pointer her zaman en hızlısıdır;)





Yazar
burakkanmaz


avatar
Gaziantep
Kayıt: 02.10.2006
22.02.2009-16:34 #57280
piedro yazdi
 

tamam paşam;) unsafe tag ıyla yazıp, pointer la cursor a alırsan, bi de pointer ı stackalloc la stack bölgesine atabilirsek, bende performans sonuçlarının rakamlarını çok merakla bekliyorum;) ama %90 eminim, stack daki pointer her zaman en hızlısıdır;)


Yok ben pointera birşey demiyorum. unsafe ile 10-20 kat bile hızlı yapabiliriz biggrin
Ben extreme'in fonksiyonu ile regex'i ölçücem.





Yazar
piedro


avatar

Kayıt: 08.06.2008
22.02.2009-16:40 #57281
burakkanmaz yazdi
 
piedro yazdi
 

tamam paşam;) unsafe tag ıyla yazıp, pointer la cursor a alırsan, bi de pointer ı stackalloc la stack bölgesine atabilirsek, bende performans sonuçlarının rakamlarını çok merakla bekliyorum;) ama %90 eminim, stack daki pointer her zaman en hızlısıdır;)


Yok ben pointera birşey demiyorum. unsafe ile 10-20 kat bile hızlı yapabiliriz biggrin
Ben extreme'in fonksiyonu ile regex'i ölçücem.


regex in kodunu yönetilebilir olması açısından beğendim,, yoksa hız için benim de bir fikrim yok.. test edersen büyük bi iştahla okur, hafızama yazarım;) reel de de ona göre kullanırız Burak çım;)

(Bu arada; benim de kardeşim bu bölümde okuyor, ordan haberim var sitenizden, o şekilde takip ediyorum)





Yazar
neurorebel


avatar

Kayıt: 15.08.2007
22.02.2009-17:55 #57282
Bildiğiniz gibi seçtiğiniz algoritma kötüyse unsafe pointer falan kurtarmaz :) .NET, Perl falan gibi araçların RegEx implementasyonlarının problemi bu :) PATRICIA Trees diye aradığınız zaman çok güzel bir veri yapısı öğreneceksiniz :) (Binary Radix Tree olarak da geçiyor)





Do weird and difficult things.

Yazar
burakkanmaz


avatar
Gaziantep
Kayıt: 02.10.2006
22.02.2009-18:13 #57283
neurorebel yazdi
 
PATRICIA Trees


Geçen seneki puzzle projesinde ben sözlükteki kelimeleri böyle indexlemeye çalışıyordum. Fakat takılıyordum hep. Çünkü ağaç yapısını bilmeden kendim uydurmaya çalışıyordum. Patricia Tree'yi keşfetmeme az kalmıştı yani :D Ama dönem bitti işte o zamanda. Bilseydim o zaman bu ağaç yapısını, en hızlı kodu yazmış olcaktım. Ah ah :)





Yazar
burakkanmaz


avatar
Gaziantep
Kayıt: 02.10.2006
22.02.2009-21:32 #57289
Ve test sonuçları...

////////////////////////////////////////////////////////////////////////////////////////////////////////////

Ölçümler için http://download.burakkanmaz.net/PerformanceTest.rar linkindeki kodları kullandım.
Ölçümü normal büyüklükte bir veri ile gerçekleştirdim. Bu verinin istatistikleri ;


Ölçüm 1 :
Kod :
static int kacTaneVar(string buyukString,string kucukString){
            int bUzunluk = buyukString.Length;
            int kUzunluk = kucukString.Length;
            int kacTane = 0;
            for (int sayac = 0; sayac <= bUzunluk - kUzunluk; sayac++ )
            {
                if (buyukString.Substring(sayac, kUzunluk) == kucukString)
                    kacTane++;
            }
            return kacTane;
}

Ortalama hesap süresi : 00:00:00.0030346 (Yani 0.0030346 saniye)
Testlerin sonuç resmi :


Ölçüm 2 :
Kod :
System.Text.RegularExpressions.MatchCollection wordColl = System.Text.RegularExpressions.Regex.Matches(cumle,kelime);
MessageBox.Show(wordColl.Count.ToString());

Ortalama hesap süresi : 00:00:00.0002817 (Yani 0.0002817 saniye)
Testlerin sonuç resmi :



Sonuç :

"Ölçüm 2", "Ölçüm 1" e göre 10,7724 kat daha hızlıdır.

////////////////////////////////////////////////////////////////////////////////////////////////////////////

Bu teste pointer olan versiyonu koyarsak eminim Ölçüm 2'yi katlar geçer biggrin





Yazar
safter


avatar

Kayıt: 18.04.2006
22.02.2009-21:33 #57290
girilen stringin web site olup olmadıgını Regular Expression kullanrak denetleye bilirsin ben bunu java scriptte kullanıyorum ve bir actiona baglıyorum genelde olay c# ta nasıldır nasıl işler net bi bilgim benim kullandıgım mail controleri yazayım ilgili bir web site adreside bırakacagım eger kendin yazamazsan kodu yardımcı olamaya çalışırım tekrar...



function checkEmail(form) {
if (/^w+([.-]?w+)*@w+([.-]?w+)*(.w{2,3})+$/.test(form.mail.value))
return true;

alert("Geçersiz email adresi")
document.form.mail.focus;
return false;
}


http://www.mydesign.gen.tr/makale/475.html

yukarıda if kontrolu içinde gördügün her sembol başka bir kontrol aslında makalede uzun uzun anlatıyor oradan kendi fonksiyonunu istedigin gibi yazarsın(com,net,de,fr vs. gibi uzantılarıda istedigin gibi belirletebilirsin)






q
Yazar
extreme


avatar
Kahramanmaras
admin
Kayıt: 24.10.2006
22.02.2009-21:50 #57291
burakkanmaz yazdi
 


"Ölçüm 2", "Ölçüm 1" e göre 10,7724 kat daha hızlıdır.

////////////////////////////////////////////////////////////////////////////////////////////////////////////

Bu teste pointer olan versiyonu koyarsak eminim Ölçüm 2'yi katlar geçer biggrin



Assembly ile yazarım görürsün kimmiş hızlıwhistling





The Man Who Loved Algorithm&Ubuntu.
www.burakamasyali.com





1 2 3
Del.icio.us
Digg
Facebook
Furl
Google
Blink
Simpy
Spurl
Y! MyWeb