« Agents Detaylı Anlatım | mIRCMerkez | Tokenize Identifiers »
Hash Tablosu İle İşlem Yapmak
Yazar admin | Åžubat 1, 2008
->
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.
Kategori: mIRC Dersleri | Hash Tablosu İle İşlem Yapmak
|Bugun 0 toplam 39 kere okundu.
Benzer mIRC Konulari;
- Clone Tarama Sistemi
- Harfleri Uzatma Koruması(Uyarılı)
- Renkli Yazı Koruması (Uyarılı)
- Uzun Yazı Koruması (Uyarılı)
- İddaa Sonuçları