Hash Tablosu İle İşlem Yapmak

Eylül 19, 2008 at 11:06 pm Yorum bırakın

Yazan: Utku
Düzenleyen ve onaylayan: 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 “smzuN” 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

/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.

Entry filed under: mIRC Dersleri. Tags: .

Tokenize Identifiers Nick Listesi Menüsün Reklendirmek

Bir Cevap Yazın

Aşağıya bilgilerinizi girin veya oturum açmak için bir simgeye tıklayın:

WordPress.com Logosu

WordPress.com hesabınızı kullanarak yorum yapıyorsunuz. Log Out / Değiştir )

Twitter resmi

Twitter hesabınızı kullanarak yorum yapıyorsunuz. Log Out / Değiştir )

Facebook fotoğrafı

Facebook hesabınızı kullanarak yorum yapıyorsunuz. Log Out / Değiştir )

Google+ fotoğrafı

Google+ hesabınızı kullanarak yorum yapıyorsunuz. Log Out / Değiştir )

Connecting to %s

Trackback this post  |  Subscribe to the comments via RSS Feed


Takvim

Eylül 2008
P S Ç P C C P
    Eki »
1234567
891011121314
15161718192021
22232425262728
2930  

Most Recent Posts


%d blogcu bunu beğendi: