IRCForumları - IRC ve mIRC Kullanıcılarının Buluşma Noktası
  sohbet

 Kayıt ol  Topluluk
Yeni Konu aç Cevapla
 
LinkBack Seçenekler Stil
Alt 20 Kasım 2005, 01:29   #1
Utku
Guest
Kullanıcıların profil bilgileri misafirlere kapatılmıştır.
IF Ticaret Yüzdesi:(%)
Hash Tables




Yazar : Ben tabii ki
Bu forumdaki linkleri ve resimleri görebilmek için en az 25 mesajınız olması gerekir.

Kalite kontrol uzmanı ve onaylayan (:p) : Alience

Öncelikle hash table nedir onu açyklamaya çalışayım, Hash table'lar bildiğiniz ini belgesine veri kaydetme yöntemine benzer. Fakat hash işlemleri hafızada(ram) yapıldığı için hdd(hard disk) işlemlerine göre çok daha hızlıdır, ama komple bir scriptte aşırı derecede kullanılıp hafızayı doldurmaya başlarsak bu avantajıda ortadan kaldırırız.

Table oluşturma /hmake:
/hmake -s <tabloismi> <slot sayısı>
Hash tablosu oluşturmak için komutumuz bu. Hash table slot ve değerlerden oluşur. Her slota istediğiniz kadar değer yerleştirebilirsiniz, fakat slot sayısını komutta önceden belirlemeniz gerekiyor. Yani 10 tane slot bile oluştursak, 1000 tane değer kaydetmemiz mümkün, çünkü slotlar sınırsız değer alabilirler. Fakat slot başına düşen değer sayısının az olması için slot sayısını fazla tutmak mIRC'i daha az kasar ve daha kısa sürede işlem yapmasını sağlar.
Komuttaki -s anahtarı ise hash table'ın oluşup oluşmadığına dair bir bilgi vermesi içindir. Onu yazmadan da komut çalışır, fakat hash table oluştu mu oluşmadı mı diye merakta kalmak istemiyorsanız -s koymalısınız. Örneğin:

/hmake -s asd 10
komutunu yazdığınızda:
* Made hash table 'asd' (10)
diye bir uyarı gelir, bu da işlem başarıyla tamamlandı demektir. -s koymazsanız bu uyarı gelmez.

Table silme /hfree:
Oluşturduğumuz tabloyu silmek için ise /hfree komutunu kullanacağız. Komutun kullanımı şu şekilde:
/hfree -sw <tabloismi>
Buradaki s parametresinin görevi aynı, w ise wildcard (* ve ? gibi işaretler) kullanmamıza olanak sağlıyor. Örneğin a.1 a.2 a.3 diye 3 tane tablomuz var ve bunların hepsini bir kerede silmek istiyoruz. O halde:
/hfree -sw a.*
komutunu kullanırsak, a. ile başlayan tüm tablolar silinir. Sadece belirli bir tabloyu silmek için:
/hfree -s a.1

Table'ye ekleme /hadd:
/hadd -smzuN <tabloismi> <slot> değer
Bu komutu tabloya değer eklemek için kullanıyoruz. Komuttaki &quot;smzuN&quot; parametrelerinin görevleri ise şöyle:
-s yukarıda da bahsettiğim gibi işlemin tamamlanıp tamamlanmadığı hakkında uyarı verir.
-m eğer isim yerine yazdığımız tablo daha önce oluşturulmadıysa şimdi oluşturur.
-u değerin kaç saniye boyunca geçerli olacağını belirtir, ve yanındaki N de saniye yerine yazılır. Örneğin -u10 yazdığımızda 10 saniye sonra değer slottan silinir.
-z değeri saniyede 1 değer küçülterek 0'a kadar indirir ve 0 olduğunda değeri siler. Yani bir nevi inc komutundaki -c parametresini burada bu şekilde kullanıyoruz. Onun dışında saniyelik değil de manual olarak düşürmek veya yükseltmek için /hinc ve /hdec komutlarını kullanabilirsiniz. inc ve dec komutlarından pek bir farkı yok. Örneğin:

Table'de bir değeri artırma /hinc:
/hinc <tabloismi> <değer> <arttırma miktarı>
/hinc -s asd x (burada asd tablosundaki x'i sadece 1 artırır)
veya
/hinc -s asd x 15 (asd tablosundaki x değerini 15 artırır)

* Inc item 'x' in hash table 'asd'
Bunun dışındaki parametreler için help dosyasına bakabilirsiniz. Fakat yeni başlayanlar için şimdilik öğrenmemelerini tavsiye ederim <img src="images/smilies/smile.gif" border="0" alt="" title="Smile" class="inlineimg" />, ayrıca -s parametresini yukarıda da belirtilmiş olduğu gibi yazmanıza gerek yok ama şu anda öğrenme aşamasında olduğunuz için ne yapıldığını görmeniz açısından yazılmıştır.
Table'de bir değeri azaltma /hdec:[/b]
/hinc in aynısı tek farkı artırmıyor azaltıyor.
örnek: /hdec -s asd x 3 (asd tablosundaki x değerini 3 azaltır)

Table'den değer silmek /hdel:
/hdel -sw <tabloismi> <değer>
Buradaki w parametresi yine wildcard kullandığınızı belirtiyor. Eğer belirli bir değeri silecekseniz:
/hdel -s tablo1 deger1
Eğer deger ile başlayan 10 tane değeriniz varsa ve hepsini birlikte silmek istiyorsanız:
/hdel -sw tablo1 deger*
komutunu kullanacaksınız. Bu komut ile deger1 deger2 deger3 degeraaaddd gibi bütün değerler silinir.
Şimdi oluşturduğumuz hash tablolarını kaydetmeye ve yüklemeye gelelim. Eğer oluşturduğunuz tabloyu kaydetmezseniz mIRC kapandığında tablo silinir. Hatta tablonuzu kaydedip başkasına yollayıp hload komutu ile onun da kullanmasını sağlayabilirsiniz.

Table'yi hdd'den yükleme /hload:
Bir hash oluşturduk çokta iyi gidiyoruz ama bu meret ini dosyası gibi kaydolmuyor mirc kapanınca gidiyor diyorsanız /hload, /hsave kullanmanız gerekli, yok ben kendim $hget ile değerleri bulup kaydettirecem diyorsanız oda mümkün ama hem zaman alır hemde uğraştırır sizi.
/hload -sni <tabloismi> <dosyaismi>

Table'yi hdd'ye kaydetme /hsave:
/hsave -snioau <tabloismi> <dosyaismi>

/hload, /hsave parametreleri:
-s yine uyarılar için kullanılıyor.
-n sadece tablodaki slotları kaydeder/yükler, değerleri kaydetmez/yüklemez.
-i kaydedeceğimiz/yükleyeceğimiz dosyanın ini dosyası olduğunu belirtir..
-o kaydedeceğiniz dosya varsa üstüne yazmak istediğinizi belirtir.
-a kaydedeceğiniz dosya var ise dosyanın üstüne eklemek istediğinizi belirtir.
-u ise tabloya eklerken belirli bir süre sonra silinecek (-uN) değerlerle birlikte dosyaya kaydedilmesini sağlar. Normalde kaydettiğinizde
-uN ile eklediğiniz değerler süresi dolmuş olsa da olmasa da dosyaya kaydedilmez.

Table okuma $hget():
$hget(isim/numara)
Eğer varsa ismini veya sıra numarasını yazdığımız tablonun ismini verir. Bununla tablonun olup olmadığını kontrol ettiririz. Örneğin:
$hget(1) ilk tablonun ismini verir, eğer $hget(0) yazar iseniz kaçtane hash tablosu olduğunu görürsünüz.
Bununla birlikte .size parametresini kullanarak tablonun kaç slottan oluştuğunu öğrenebiliriz.
Örneğin:
/hmake tablo1 10
komutu ile bir tablo oluşturduk.
$hget(1) = tablo1
$hget(1).size = 10
cevaplarını verir. Eğer tablo yok ise:
$hget(1) = $null
$hget(1).size = 0
cevaplarını verir.


Table'deki değerleri okutma $hget(Table,değer):
$hget(isim/numara,değer)
Bu identifier ise verdiğiniz numaralı sıradaki tablodaki değerin karşılığını verir. Örneğin:
/hmake tablo1 10
10 slotlu tablo1 adında bir tablo oluşturduk.
/hadd -u10 tablo1 kanallar #a #b #c
Kanallar slotu ekledik ve buna değer olarak #a #b #c verdik, ve bu değerlerin 10 saniye sonra silinmesini istedik.
bu durumda 2 seçeneğimiz var. Eğer tablo ve slot numaralarını biliyorsak bu şekilde:
$hget(1,1).data = #a #b #c
eğer bilmiyorsak bu şekilde:
$hget(tablo1,kanallar) = #a #b #c
cevaplarını alabiliriz.
.data kullanmak için mutlaka slot numarasını bilmemiz gerekir.
.item ise slot numarasının kaç olduğunu öğrenmek için kullanılır. Örneğin tek slotunuz varsa ve bunun adı kanallar ise:
$hget(tablo1,kanallar).item = 1
cevabını verir.
.unset parametresi ise değerlerin ne zaman silineceğini, yani -uN ile belirttiğimiz sürenin bitmesine ne kadar kaldığını görmemize yarar.
10 saniyelik oluşturduğumuz bu tabloda uygularsak:
$hget(tablo1,kanallar).unset = 10
olmayan bir tablo üzerinde denersek veya süre belirtilmemiş bir tablo üzerinde denersek 0 cevabını alırız.

Table'de arama yapmak $hfind():
$hget(isim/numara,aranacak yazı,kaçıncı item,parametre)
parametre yerine nwWrR yazabilirsiniz ama benim tavsiyem bir şey yazmamanız böylece mirc default olarak n görecektir buda normal yazı karşılaştırmasıdır.

Alience'nin notu:
Hash table'lerinin tümünü görmek için aşağıdaki kodu aliasese ekleyin

Kod:   Kodu kopyalamak için üzerine çift tıklayın!
/hlist { var %i = $hget(0) if %i { echo $color(info text) -at Hash list gösteriliyor toplam %i kadar tablo var! | echo -a $chr(160) } else { echo $color(info text) -at Hiçbir hash tablosu yok! | halt } while %i { var %x = $hget(%i,0).item echo $color(info2 text) -at $hget(%i) $iif($regex($1,^-i$),boyutu: $hget(%i).size kullanılan: %x) while %x { echo $color(info2 text) -at $str($chr(160),3) $hget(%i,%x).item = $hget(%i,%x).data dec %x 1 } echo -a $chr(160) dec %i 1 } echo $color(info text) -at Hlist bitti }

ve ekledikten sonra komut olarak /hlist yazarsanız hash listesini görürsünüz /hlist -i ekstra boyutu: 10 kullanılan: 1 gibisinden açıklama içindir, kodu sizi bilgilendirmesi açısından yazdım istediğiniz gibi değiştirebilirsiniz.

 
Alıntı ile Cevapla

IRCForumlari.NET Reklamlar
sohbet odaları reklam ver Benimmekan Mobil Sohbet
Alt 20 Kasım 2005, 01:35   #2
WingmaN
Guest
Kullanıcıların profil bilgileri misafirlere kapatılmıştır.
IF Ticaret Yüzdesi:(%)



Ellerine Sağlık , &#231;ok g&#252;zel bir d&#246;k&#252;man olmuş.

 
Alıntı ile Cevapla

Alt 23 Şubat 2006, 18:40   #3
Çevrimdışı
Kullanıcıların profil bilgileri misafirlere kapatılmıştır.
IF Ticaret Sayısı: (0)
IF Ticaret Yüzdesi:(%)



Tebrik ederim dokuman cok yararli okurken mest oldum. Kisilerin kendilerini gelistirmeleri icin yeterli. ama kaliplara cok alisik insanlariz biz gerekli degeri sorgulamak icin hep ogrendiklerimiz bazen asamiyoruz bu yuzden aciklamalarin tamamini ogrenmek gerekiyor ornegin aciklanmamis olan hmatch aciklama yapip ukalalik yapmak yerine konu sahibinin bu konuda da yeterli bilgisi olduguna inanip kendisinin bu konuda aciklama yapmasini rica ederim.

 
Alıntı ile Cevapla

Alt 23 Şubat 2006, 18:44   #4
Çevrimdışı
Kullanıcıların profil bilgileri misafirlere kapatılmıştır.
IF Ticaret Sayısı: (0)
IF Ticaret Yüzdesi:(%)



acoustic burda ders gösteren arkadaşlarımızın bilgi eklendiğinden mutlu olduğuna inanıyorum.Seninde bildiğini eklemen ukalalık değil büyüklüğündür

 
Alıntı ile Cevapla

Alt 23 Şubat 2006, 18:58   #5
Çevrimdışı
Kullanıcıların profil bilgileri misafirlere kapatılmıştır.
IF Ticaret Sayısı: (0)
IF Ticaret Yüzdesi:(%)



Konu ile alakası olan kişilerden biri olarak:
$hmatch(tablo ismi,karşılaştırılacak slot stringi,[0-x])
[0-x] :
0 yazılırsa kaçtane değer bulduğunu belirtir

örnek:
/hmake test 10
/hadd test deneme_1 vs vs
//echo - $hmatch(test,deneme_1) yazarsak ilk uyan slot ismini verir
//echo - $hmatch(test,deneme_1,0) yazarsak kaç tane uygun değer buldu ise onun sırasını verir değerleride 0 yerine 1 2 .. yazarak alabiliriz

şimdi zaten deneme_1 var ne gereği var 0 a derseniz:
yukardaki örneğe ek olarak
/hadd test deneme_2 bu da 2

şimdi deneme_ ile başlayan 2 tane slotumuz var bunları
//echo - $hmatch(test,deneme_?,0) yazarak alabiliriz
Bu forumdaki linkleri ve resimleri görebilmek için en az 25 mesajınız olması gerekir.

? yerine * da kullanabiliriz * birden çok karakteri ? bir karakteri temsil eder.

öğrendiklerimizi asamamak ile ilgisi yok sanırım hashı kodu yazan oluşturduğu için istediği değeri almasında genelde hmatch in kullanılabilirliği olmuyor
Bu forumdaki linkleri ve resimleri görebilmek için en az 25 mesajınız olması gerekir.


birde $hfind in kullanımı da ? * lar hariç hemen hemen aynı
Bu forumdaki linkleri ve resimleri görebilmek için en az 25 mesajınız olması gerekir.

 
Alıntı ile Cevapla

Cevapla

Etiketler
hash, mirc, mirc download, mirc indir, tables


Konuyu Toplam 1 Üye okuyor. (0 Kayıtlı üye ve 1 Misafir)
 

Yetkileriniz
Konu Acma Yetkiniz Yok
Cevap Yazma Yetkiniz Yok
Eklenti Yükleme Yetkiniz Yok
Mesajınızı Değiştirme Yetkiniz Yok

BB code is Açık
Smileler Açık
[IMG] Kodları Açık
HTML-Kodu Kapalı
Trackbacks are Kapalı
Pingbacks are Açık
Refbacks are Açık


Benzer Konular
Konu Konuyu Başlatan Forum Cevaplar Son Mesaj
Debug && Hash Tables - Badnick,Reklam,Küfür Korumaları Doktrin mIRC Scripting Hazır Kodlar 10 26 Eylül 2017 17:23
Adele - Turning Tables Blood Yabancı Şarkı Sözleri 0 01 Ekim 2014 15:38
Hash Tables RedLine mIRC Scripting Sorunları 1 18 Şubat 2008 19:58
hash table mi? leet_haxor mIRC Scripting Sorunları 2 05 Mayıs 2005 14:29