10 Şubat 2008, 02:44 | #1 | |
Çevrimdışı
Kullanıcıların profil bilgileri misafirlere kapatılmıştır.
IF Ticaret Sayısı: (0) | Hash tablo kullanımı(Detaylı ve örneklemelerle) Ders: Hash tablosu (Hash table) Yazan: L4roXyL Tarih: 9 Şubat Cumartesi 2008 Amaç: Forum'da olmasına rağmen, daha açıklayıcı bir lisan ile yazmak istedim. Bir kaç mIRC ile uğraşan arkadaşımız, bu konu hakkında detaylı bilgi'de istemişti. - İlk öncelikle hash tables nedir? Aşşağıdaki şekilde bir tablo düşünün; Kod: Kodu kopyalamak için üzerine çift tıklayın!
Yukarı görmüş olduğunuz tablo, hash tablosunun mantığıdır. Yani ini dosyası gibi. Yani veriler bu şekilde kayıt olmaktadır. Tabi kayıt derken, hdd(hard disk)'e kayıt etmez(Tabi isterseniz edebilirsiniz) Hash tablosunun üzerinde yaptığınız tüm işlevler, random access memory(ram)'da gerçekleşir. Bunun için, gayet hızlıdır. Komut'lara geçelim; 1- Tablo oluşturma: /hmake -s <name> <N> Buradaki -s parametresi, tabloyu oluşturduğunuza dair uyarı almak için kullanılır. Yani kullanıp/kullanmamanız tablonun oluşumunu etkilemez. Komut'daki <N> kısmına, tablonun slot sayısı yazılır. Yani kaç slot'luk tablo oluşturacağınızı <N> kısmına girersiniz. Fakat bu <N> kısmına yazdığınız, sayı 10'da olsa 100'de olsa, sonsuz bir şekilde parça alabilmektedir. Eğer slot sayısı girmezseniz, 100 slot'luk bir tablo oluşturmuş olursunuz. Örnek kullanım: /hmake -s deneme 100 2- Tablo(yu/ları) serbest bırakma: /hfree -sw <name> Buradaki -s patametresi, yine tabloyu serbest bıraktığınıza dair uyarı almak için kullanılır. Diğer -w parametresi ise, wildcard(*,?) kullanarak tablo yada tabloları serbest bırakmanıza yarar. Örneğin; /hfree -sw *deneme* (İçinde deneme geçen tüm tablolar, serbest bırakılır) Örneğin; /hfree -s deneme (Sadece deneme tablosu serbest bırakılır) 3- Tabloya parça ekleme: /hadd -smbczuN <name> <item> [data | &binvar] Bu komut gerçekten öğrenmek isteyenlerin, dikkat ile dinlemesi gereken komut'dur. Komut temel olarak, belirtilen tabloya parça eklemek için kullanılır. Tabi parametreler ile, daha geniş bir kapsamı vardır. Parametreler; -s: Yine tabloya parça eklendiğine dair bilgilendirme mesajı almak için kullanılır. -m: Bu parametre, belirtilen tablo-ismi daha önce oluşturulmamış ise, şimdi oluşturmak için kullanılır. -z: Bu parametre, data(değer) kısmına girdiğiniz değer'i, saniye'de bir 1 değer düşürerek sıfır yapar. Ve sıfır olduğunda, slot silinir. -uN: Bu parametre, eklediğiniz parçayı "N" kısmına girilen saniye sona erdiğinde, slot tablodan silecektir. NOT: Diğer "bc" parametreleri binary variable(/help binary files) ile alakalıdır. İşinize yaracağını düşünmediğim için tam bilgiyi vermedim. İlla'da ne olduklarını öğrenmek istiyorsanız, söyleyin anlatırım.(Beni binary vs bulaştırmayın) .) /hadd için örneklemeler; Yukarıdaki gibi bir tablo hayal edin; Kod: Kodu kopyalamak için üzerine çift tıklayın!
Örneğin; /hadd -sm deneme deneme 15 yaptığımız'da tablo; Kod: Kodu kopyalamak için üzerine çift tıklayın!
Şeklinde değişecektir. Örneğin bir parça daha ekledik; /hadd -s deneme dnm2 100 Kod: Kodu kopyalamak için üzerine çift tıklayın!
Şeklini alıcaktır. 4- Tablodaki herhangi bir parçanın değerini yükseltmek veya parça ile beraber değer yükletmek vs: /hinc -smzcuN <tablo-ismi> <parça> <N> Normal'de mIRC help dosyasında, bu komut üzerinde hiç durulmamış. Ama gerçekten, işinize yarayacak komutlardan bir tanesi(özellikle flood vb. koruma yazmak isteyenler için) Parametreler; -s: Yine uyguladığınız işlevin gerçekleşip/gerçekleşmediği hakkında uyarı almak için kullanılır. -m: Daha önce tablo oluşturulmadıysa, tabloyu şimdi oluşturur. -z: Yükselttiğiniz değeri veya değer biçtiğiniz değeri saniye'de bir, bir değer düşürerek sıfır'a indirir. Ve sıfır'a indiği zaman, değer ve parça tablodan silinir. -c: Bu parametre ise, -z parametresinin yaptığı işlev'in tam tersini yapar. Data(değer) kısmına, girdiğiniz değer kadar yükseltir. Ve her saniye girdiğiniz değer'i bir arttırır. Eğer değer girmezseniz, sıfır'dan başlıyarak her saniye belirttiğiniz parça'nın data(değer)sını bir arttırır. -uN: Bu parametre, eklediğiniz parçayı "N" kısmına girilen saniye sona erdiğinde, tablodan silecektir. Eğer varolan bir parçanın üzerine, data(değer) eklerseniz, saniye sona erdiğinde değer ile beraber parçayıda yani slot'u silecektir. NOT: /hinc komutun'da, eklediğiniz yeni bir parça için data(değer) girmezseniz, otomatik olarak "1" değeri atanacaktır. Yani örneğin; /hinc -ms deneme dnm yaptığınız'da, dnm parçasının değeri 1 olucaktır. Çünki adı üstünde /hinc kullanıyorsunuz .) 5- Tablodaki herhangi bir parçanın değerini düşürmek veya parça ile beraber değer düşürmek: /hdec -smcuN <tablo-ismi> <parça> <N> Parametreler; -s: Yine uyguladığınız işlevin gerçekleşip/gerçekleşmediği hakkında uyarı almak için kullanılır. -m: Daha önce tablo oluşturulmadıysa, tabloyu şimdi oluşturur. -c: Daha önce biçmiş olduğunuz parça'daki değeri, saniye'de bir 1 değer düşürür. Sıfır'ı bulduğunda, slot'u siler. -uN: Aynı şekilde, "N" kısmına girilen saniye sona erdiğinde, parça silinir. Bakın dikkatinizi çekiyorum yanlış anlamayın. Mesela diyelim, deneme ismindeki tabloda deneme parçası var. Ve bu deneme parçasının data(değer)'sı 100. Siz eğer, /hdec -su10 deneme deneme 20 yaparsanız, deneme parçasının değer'i 80'e düşer. Ve 10 saniye sonra deneme parçaso komple silinir. Yani 10 saniye sonra, tekrar 100 olmasını beklemeyin. .) NOT: /hdec komutun'da, eklediğiniz yeni bir parça için data(değer) girmezseniz, eklediğiniz parça otomatik olarak -1 değerini alıcaktır. /HINC & /HDEC örneklemeleri; Yine yukarı'daki tabloyu hayal edin; Kod: Kodu kopyalamak için üzerine çift tıklayın!
Örneğin; /hdec -s deneme dnm2 20 yaptık. Kod: Kodu kopyalamak için üzerine çift tıklayın!
Şeklini alıcaktır. Önemli not: /hinc veya /hdec ile yeni bir parça oluşturduğunuz'da, oluşturmuş olduğunuz parça tabloda en son sırayı alıcaktır. Yani örneğin; /hinc -s deneme dnm 100 yaptığınız'da tablo; Kod: Kodu kopyalamak için üzerine çift tıklayın!
Şeklini alıcaktır. 6- Tablo'dan belirtilen parça yada parçaları silmek: /hdel -sw <name> <item> Bu komut; Kod: Kodu kopyalamak için üzerine çift tıklayın!
Örnek tablosundaki ITEM(parça(ları)) silmek için kullanılır. Örneğin; /hdel -s deneme dnm yaptığınız'da, deneme tablosunda "dnm" slot'u tamamen silinir. Yani bakın dikkat edin, eğer bir parça silinirse karşısındaki değer'de otomatik olarak silinecektir. Çünki, parça değer'e bağlı değildir ama değer ğarçaya bağlıdır. Parametreler; -w: Wildcard(?,*) kullanarak parça(lar) silmek için kullanılır. Örneğin; /hdel -sw deneme dnm* yaptığınız'da, deneme tablosunda'ki 2 parça(dnm2 ve dnm) tamamen silinecektir. 7- Tablo'yu belirtilen dosyaya kayıt etmek: /hsave -sbniau <name> <filename> [section] Bu komut, herhangi bir tabloyu belirttiğiniz dosyaya kayıt etmek için kullanılır. Örnek kullanım: /hsave -i deneme deneme.deneme (Deneme tablosunu, deneme.deneme dosyasına kayıt ediyoruz) Parametreler; -s: Kayıt işleminin gerçekleştiğini görmek için kullanabilirsiniz. -n: Tabloyu kayıt ederken, sadece data(değer)lerı kayıt eder. Yani değer'e ait olan, parça'lar kayıt edilmez. Parça isimleri yerine, slot numaraları kayıt edilir. -i: Kayıt dosyasının bir ini dosyası olduğunu belirtirsiniz. Bu ne işe yarar? Demeyin. Eğer kayıt edilen dosyanın ini dosyası olduğunu belirtirseniz, kayıt ettiğiniz dosyayı açtığında; Kod: Kodu kopyalamak için üzerine çift tıklayın!
Şeklinde düzenli bir şekilde görebilirsiniz. Eğerini dosyası olduğunu belirtmezseniz, parça-değer-parça-değer şeklinde yan-yana kayıt etmiş olursunuz. Daha doğrusu alt alt'a kayıt edersiniz ama, dosyayı açtığınız'da yan-yana gözükür. Arada bir $crlf identifier'ı vardır. -a: Eğer kayıt edeceğimiz dosya ismi, mIRC klasöründe mevcut ise; aynı dosyanın üzerine yazacağınızı belirtirsiniz. Eğer belirtmezseniz, dosyayı kayıt etmeden önce mIRC klasöründeki aynı dosyayı silecek ve yeniden oluşturacaktır. NOT: Diğer (-b) parametresi yine binary files ile ilgilidir. Sizi ilgilendirtmez. .) Zaten binary files'dan anlıyacak seviyeye gelmiş olsanız, bu dersi "bakalım nasıl yazmış?" şeklinde okursunuz. Çünki zaten bu yollardan geçmişsinizdir. -u: Bu parametre gerçekten önemli. Şimdi mesela diyelim, (-uN) parametresi ile tablonuzu kayıt etmeden önce, tablonuza parça eklediniz. Eğer /hsave komutun'da normalde, bu parçalar(X süre içerisinde silinecek olan) kayıt edilmez. İşte buradaki "-u" parametresi, bu parçaların'da kayıt edilebilmesini sağlamaktadır. ÖNEMLİ not: /hsave komutunda, -i(ini) parametresini kullanıpta [section] kısmını boş bırakırsanız; [hashtables] parça=değer parça2=değer2 Şeklinde kayıt edilecektir. Eğer boş bırakmazsanız(/hsave -is deneme deneme.hash deneme) [hashtables] kısmına, section kısmına yazdığınız isim gelicektir. 8- Kayıtlı olan dosyadaki verileri, hash tablosuna yükletmek: /hload -sbni <name> <filename> [section] Bu komut, daha önce kayıt ettiğiniz(/hsave) hash tablolarını, belirttiğiniz tabloya yükletmek için kullanılır. Parametreler; ÖNEMLİ NOT: Herhangi bir hash kayıtlı dosyasını, bir tabloya yüklemek için, ilk başta o tabloyu oluşturun "/hmake deneme" şeklinde. -s: Dosyanın tabloya yüklendiğini görmek için kullanabilirsiniz. -n: Yükletilen dosyadaki, item(parça)'ları numara olarak yükletir. Yani bir parçaları yüklemez. Sadece değer'leri yükler. -i: Yükletilen dosyanın, ini dosyası olduğunu belirtir. Önemli not(/hload & /hsave): Eğer yükletilen dosya, ini dosyası olarak kayıt edilmiş ise ve siz "-i" kullanmayarak yükletirseniz, dosyadaki item(parça)/data(değer)'ler hash tablosunda karmakarışık bir şekilde birbirine girecektir. Yani kısacası verim alamazsınız. Ek bilgi(/hload & /hsave): Yani kısacası, tabloyu "ini" olarak kaydetdiyseniz, "ini" olarak yükletin. Normal kaydettiyseniz, normal olarak yükletin. - Komutlar bu kadar. - Sıra identifier'larda.(Bir çok şeye olanak sağlıyan identifier'ları görünce, hash tablosunu bundan sonra kullanmaya karar vericeksiniz) Identifier'lar: 1- $hget(name/N) - Prop: size Bu identifier, belirtilen isim yada numaraya ait tablonun var olup olmadığını kontrol eder. Örneğin; //echo -a $hget(0) yaptığınız'da, kaç adet tablo olduğunu öğrenebilirsiniz. Örneğin; //echo -a $hget(3) yaptığınız'da, eğer 3. tablo var ise, tablonun imini öğrenebilirsiniz. Prop kullanımı: Örnek kullanım; //echo -a $hget(deneme).size (Deneme ismindeki tablonun, kaç slot'dan oluştuğunu gösterir.) 2- $hget(name/N, item) - Prop: unset Bu identifier, belirtilen topladaki parça(data)'nın değerini verir. Deneme: "/hadd -ms deneme dnm 100" yaptık. Örneğin; //echo -a $hget(deneme,dnm) yaptığımız'da 100 olarak döner. Yani değer'ini alırız. Eğer parçaya atanmış bir değer yok ise, hiçbir cevap alınmaz. Örneğin; //echo -a $hget(deneme,dnm).item veya //echo -a $hget(deneme,dnm).data yaptığımız'da, "dnm" parçasının bulunduğu slot'un rakamını verir. Örneğin; //echo -a $hget(deneme,0).item yaptığımız'da, deneme tablosunda kaç adet parça'nın bulunduğunu öğreniriz. 0 yerine 1 yazarsanız 1. sıradaki parçayı görürsünüz. 2 yazarsanız 2. sıradaki vs vs. Prop kullanımı: Deneme: 100 saniye sonra silinecek bir değer ekleyelim deneme2 tablosuna. Ve "unset" prop'unun işlevini anlıyalım. Ekleyelim;(/hadd -mu100 deneme2 silincek 100) Ve şimdi: //echo -a $hget(deneme2,silincek).unset yaptığımız'da devamlı değişen rakamları görürüz. Bu rakamlar, "silincek" parçasının silinmesine kalan saniyeyi vermektedir. Yani silinecek olan, parçanın kaç saniye sonra silineceğini öğreniyoruz. 3- $hfind(name/N, text, N, M) - Prop: data Bu identifier, belirtilen tablo içindeki parçalarda, text kısmına yazılan text'i "N" kısmına yazılan item'de, "M" kısmına yazılan parametre ile arar. İlk önce deneme yapacağımız için, bir tablo oluşturup parçalar yerleştirelim. Kod: Kodu kopyalamak için üzerine çift tıklayın!
Bknz: /tablo yazın. Ve aşşağıdaki örneklere 4 gözünüzle bakın/deneyin. Parametreler($hfind içindeki, "M" kısmı); n: Normal text karşılaştırma. w: Wildcard(?,*) text. W: Wildcard(?,*) text. (Tablo için) r: Regular text. R: Regular text. (Tablo için) İlk öncelikle, şu "n" parametresini aklınız'dan çıkartın.(Varsayılan için kullanılmaz) Şimdi yukarı'daki alias'ı ekledikten sonra; Mesela; "Tablo" tablosunda, "deneme" kelime ile başlayan kaç parça var? Nasıl öğreniriz? //echo -a $hfind(tablo,deneme*,0,w) yaptığımız'da, cevap "3" olarak dönecektir. Çünki deneme kelimesi ile başlayan, tam 3 parçamız var. Mesela; "Tablo" tablosunda, "a" harfinin 2 tane olup'da yan yana bulunduğu kaç adet kelime var ve hangileri? //echo -a $hfind(tablo,a{2},0,r) yaptığımız'da, cevap "2" olarak dönecektir. Nedir bunlar? Bknz: (yaa33 ve yaa1) kelimeleri. 0 yerine 1/2 koyarak sizde görebilirsiniz. 4- $hmatch(tablo-ismi,parça-ismi,N) Bu identifier normalde mIRC Help dosyasında bulunmamaktadır. Yani bahsi edilmemiş. İdentifier'ın yaptığı işlev, tablo içerisinde parça ismi arama. Tabi bu parça isimlerini wildcards(*,?) kullanarak arıyabiliyoruz. Mantığını anlamak için, yukarıdaki /tablo alias'ını kullanın ve aşşağıdaki örneklemeleri yapın. Örneğin; //echo -a $hmatch(tablo,*deneme*,0) yaptığınız'da, tablo içerisinde deneme kelimesi geçen kaç adet parçanın olduğunu gösterir. 0 yerine 1 yazarsanız, 1. parçanın ismini verir. Örneğin; //echo -a $hmatch(tablo,deneme*,1) yaptığınız'da, deneme ile başlayan 1. parçanın ismini verir. - HASH TABLES hakkında anlatıcaklarım bu kadar. Zaten eksik birşey kalmadı. En geniş ve anlayacağınız bir dilde anlattım. Şimdi hash tablosu ile neler yapılabilir? 1- Kanal için küfür/flood vb. korumalar. 2- Clone tarayıcı vb. snippet'lar. Vs. vs. Yani daha doğrusu sizin kapasitenize kalmış. Mesela, hash tablosu kullanarak basit bir tekrar koruması yapalım(örnek); Kod: Kodu kopyalamak için üzerine çift tıklayın!
Şimdi'de daha kapsamlı ve işinize yarayacak bir kod yazalım. Mesela kanal'da konuşan user'lara puan verelim, bu puan belirlediğimiz seviyeye gelince voice/halfop verelim. Ve bunları yaparken hemen hemen, hash tablosunun tüm komutlarını kullanalım. Zevkli bir kod yani. Kod: Kodu kopyalamak için üzerine çift tıklayın!
Dersimiz burada tamamen sona ermiştir. Umarım birşeyler öğrenebilirsiniz. Hash kullanın, iyidir .) | |
|
12 Ekim 2012, 12:40 | #5 |
Çevrimdışı
Kullanıcıların profil bilgileri misafirlere kapatılmıştır.
IF Ticaret Sayısı: (0) | Cevap: Hash tablo kullanımı(Detaylı ve örneklemelerle) Merhaba, Öncelikle anlatımın için teşekkürler. Çok yararı oldu. Bu forumdaki linkleri ve resimleri görebilmek için en az 25 mesajınız olması gerekir. Kendim de hash tablosu kullanmayı denemek için bazı scriptler yazmaya çalıştım. Denediğim şeyde CS'den levels list çekip bunu hast tablosuna aktararak bir dialog oluşturma oldu. Fakat hash tablosuna verileri aktarırken verileri CS'den aldığım sıralama ile aktarmadı. Karman çorman bir şey oldu dolayısıyla. Diyalogdaki yerleştirmeyi $did ile hallettim ama yine de kafamda bir soru işareti oldu neden böyle olduğuna dair. Benim eksik olarak yaptığım bir şeyden kaynaklı mı yoksa zaten durum bu mudur? Ve eğer varsa bunu çözmenin yolu nedir? |
|
15 Kasım 2013, 22:43 | #8 |
Çevrimdışı
Kullanıcıların profil bilgileri misafirlere kapatılmıştır.
IF Ticaret Sayısı: (0) | Cevap: Hash tablo kullanımı(Detaylı ve örneklemelerle) Emeğinize sağlık hocam teşekkürler çok güzel bi anlatım olmuş işimede yaradı yalnız bi konuyu çözemedim yardımcı olurmusunuz acaba. ben botuma şunu eklemek istiyorum botumun özelinde ve belirlediğim kanallarda !yetkili diye yazıldıgında oluşturdugum Hash tablolarında o an kanalımda olan op durumundakilerle karşılaştırıp hangi kıdemde kaç tane yetkilinin online olduguna dair cevap almak istedim ama yapamadım bunu yapmak mümkünmü ? Ek bilgi ;bendeki hash tabloları ise Founder kıdem1 kıdem2 kıdem3 kıdem4 kıdem5 kıdem6 diye mevcut |
|
Etiketler |
hash, kullanimidetayli, kullanımıdetaylı, mirc, mirc download, mirc indir, orneklemelerle, tablo, ve, örneklemelerle |
Konuyu Toplam 1 Üye okuyor. (0 Kayıtlı üye ve 1 Misafir) | |
| |
Benzer Konular | ||||
Konu | Konuyu Başlatan | Forum | Cevaplar | Son Mesaj |
Hash tablo kodumda yanlışlık var | Rules | mIRC Scripting Sorunları | 1 | 07 Nisan 2018 01:56 |
mysql ile tablo kopyalama ve tablo adı değiştirme 1 - 2 | Kaf_Dağı | Delphi | 0 | 18 Mart 2015 14:23 |
Hash Tablo Görüntüleyici/Düzenleyici | JohnGalt | mIRC Scripting Hazır Kodlar | 2 | 03 Mart 2013 23:01 |
vBulletin Panel Kullanımı Hakkında Açıklamalı Detaylı Bilgiler! | Bahtiyar | vBulletin Sorunları ve Çözümleri | 0 | 09 Ekim 2011 20:32 |
Hash Tablo Örnek Yardım pls. | daRkMoRGaN | mIRC Scripting Sorunları | 4 | 27 Aralık 2008 13:31 |