mIRC Script

mIRC Token Identifierları: Metni Parçalara Ayırmak

· Güncelleme: · 5 dk okuma

mIRC Token Identifierları: Metni Parçalara Ayırmak
İçindekiler
  1. Ayırıcı Kavramı
  2. Temel Identifier'lar
  3. Arama Identifier'ları
  4. Düzenleme Identifier'ları
  5. Pratik Kullanım Örnekleri
  6. Ne Zaman Token, Ne Zaman Hash?
  7. Sık Yapılan Hatalar
  8. Gerçek Bir Senaryo
  9. Ayırıcı Seçimi
  10. Listeleri Saklamak
  11. Sonuç

Script yazarken en çok uğraştığınız şeylerden biri metinlerdir: Kullanıcının yazdığı komutu parçalarına ayırmak, virgülle ayrılmış bir listeyi işlemek, bir adresin alan adı kısmını çıkarmak, bir listeye yeni öğe eklemek. mIRC bu işler için güçlü bir araç seti sunar: mIRC token identifier'ları. Token, bir metnin belirlenen ayırıcıya göre bölünmüş parçalarından her biridir.

Ayırıcı Kavramı

Token identifier'larının son parametresi her zaman ayırıcı karakterin kodudur. En sık kullanılanlar:

KodKarakter
32Boşluk
44Virgül
46Nokta
124Dikey çizgi
58İki nokta
45Tire

Karakter kodunu $asc identifier'ı ile öğrenebilirsiniz. Kodu doğrudan sayı olarak yazmak, ayırıcının metin içinde karışmasını önler; bu yüzden mIRC bu yaklaşımı tercih eder.

Temel Identifier'lar

$gettok: Belirli sıradaki parçayı verir.

//echo -a $gettok(bir iki uc dort,2,32)

Bu komut "iki" sonucunu verir. Negatif sayı sondan saymayı sağlar: -1 son parçayı verir. Aralık da belirtilebilir: 2-4 ikinci parçadan dördüncüye kadarını döndürür.

$numtok: Parça sayısını verir.

//echo -a $numtok(bir iki uc dort,32)

Bu iki identifier birlikte, bir metnin bütün parçaları üzerinde döngü kurmanın temel yoludur. Döngüler için mIRC while döngüsü yazımıza bakın.

$addtok: Listeye öğe ekler, zaten varsa eklemez.

//echo -a $addtok(elma armut,kiraz,32)

Bu özellik önemlidir: $addtok tekrarı önler, bu yüzden benzersiz öğelerden oluşan listeler tutmak için idealdir.

$deltok: Belirli sıradaki öğeyi siler.

//echo -a $deltok(elma armut kiraz,2,32)

$remtok: Değerine göre öğe siler.

//echo -a $remtok(elma armut kiraz,armut,1,32)

Üçüncü parametre, kaçıncı eşleşmenin silineceğini belirtir.

Arama Identifier'ları

$istok: Bir öğenin listede olup olmadığını kontrol eder.

if ($istok(%izinli_kanallar,$chan,32)) { ... }

Bu, mIRC scripting'te çok sık kullanılan bir kalıptır: Bir değerin izin listesinde olup olmadığını kontrol etmek.

$findtok: Bir öğenin kaçıncı sırada olduğunu verir.

//echo -a $findtok(elma armut kiraz,armut,1,32)

$matchtok: Bir metni içeren öğeleri döndürür.

//echo -a $matchtok(ayse_ev burak_is deniz_ev,_ev,0,32)

Üçüncü parametre sıfır olduğunda eşleşme sayısını verir; başka bir sayı verildiğinde o sıradaki eşleşmeyi döndürür.

$wildtok: Joker karakterli kalıpla eşleşen öğeleri döndürür.

//echo -a $wildtok(ayse.ev burak.is deniz.ev,*.ev,0,32)

$matchtok ve $wildtok arasındaki fark, ilkinin basit içerme kontrolü yapması, ikincisinin joker karakter desteklemesidir.

Düzenleme Identifier'ları

$puttok: Belirli sıradaki öğeyi değiştirir.

//echo -a $puttok(elma armut kiraz,erik,2,32)

$instok: Belirli sıraya öğe ekler.

//echo -a $instok(elma kiraz,armut,2,32)

$reptok: Değerine göre öğe değiştirir.

$sorttok: Listeyi sıralar.

//echo -a $sorttok(kiraz elma armut,32)
//echo -a $sorttok(3 1 2,32,n)
//echo -a $sorttok(elma armut kiraz,32,r)

Üçüncü parametre sıralama türünü belirtir: n sayısal, r ters, a alfabetik. Sayısal sıralama parametresini kullanmayı unutmak sık yapılan bir hatadır; metin sıralaması "10" değerini "9"dan önce koyar.

$deltok ve $addtok zinciri: Bu identifier'lar birbirinin sonucunu alabilir, böylece tek satırda birden fazla işlem yapılabilir. Ancak iç içe geçen token işlemleri okunabilirliği düşürür; üçten fazla seviyede ara değişken kullanmak daha iyidir.

Pratik Kullanım Örnekleri

Kullanıcı komutunu ayrıştırmak: Bir komutun ilk kelimesi işlemi, geri kalanı veriyi taşıyorsa, ilk kelimeyi alıp sonrasını ayrı işlemek gerekir. $gettok ile ilk parçayı, aralık belirterek geri kalanını alabilirsiniz.

İzin listesi tutmak: Bir global değişkende boşlukla ayrılmış kanal veya nick listesi tutup $istok ile kontrol etmek, küçük listeler için en basit çözümdür.

Adres parçalarını ayırmak: Bir host adresini nokta ayırıcısıyla parçalara bölerek alan adını veya alt alan adını elde edebilirsiniz.

Çoklu değer saklamak: Bir kayıtta birden fazla bilgi tutmanız gerektiğinde, bunları bir ayırıcıyla birleştirip tek değer olarak saklayabilir, okurken token identifier'larıyla ayırabilirsiniz. Bu teknik, hash tablolarıyla birlikte çok kullanılır.

Ne Zaman Token, Ne Zaman Hash?

Token listeleri basit ve esnektir, ancak her arama işleminde metnin tamamı taranır. Birkaç düzine öğeye kadar bu fark hissedilmez. Yüzlerce veya binlerce kayıt tutuyorsanız ve sık arama yapıyorsanız hash tablolarına geçmelisiniz: Hash tablosunda arama, liste uzunluğundan neredeyse bağımsız olarak hızlıdır. Ayrıntılar mIRC hash tabloları yazımızda.

Bir diğer sınır, metin uzunluğudur: Çok uzun token listeleri bir değişkende tutulduğunda hem bellek hem de işlem açısından verimsizleşir.

Sık Yapılan Hatalar

  • Ayırıcıyı yanlış yazmak: Boşlukla ayrılmış bir listede virgül ayırıcısı kullanmak sessizce yanlış sonuç verir.
  • Sayısal sıralamayı atlamak: Sayı listelerinde sıralama parametresini kullanmamak.
  • Boş liste kontrolü: Boş bir listede işlem yapmak beklenmedik sonuçlar doğurabilir.
  • Ayırıcı içeren veri: Sakladığınız değerler ayırıcı karakteri içeriyorsa liste bozulur. Bu durumda veri içinde geçmeyen bir ayırıcı seçmek gerekir.
  • Sıra numarası karışıklığı: Token sıraları birden başlar, sıfır parametresi sayıyı verir.

Gerçek Bir Senaryo

Bir kullanıcı, kanalında belirli kelimeleri filtreleyen bir script yazıyor. Yasaklı kelimeleri boşlukla ayrılmış bir global değişkende tutuyor ve her mesajda bütün kelimeleri döngüyle kontrol ediyor. Liste yüz kelimeyi geçtiğinde ve kanal kalabalıklaştığında mIRC gözle görülür şekilde yavaşlıyor. Kullanıcı yaklaşımı değiştiriyor: Mesajın kelimelerini döngüyle gezip her birini $istok ile tek seferde kontrol ediyor. Böylece yüz kelimelik liste üzerinde döngü kurmak yerine mesajın birkaç kelimesi üzerinde döngü kuruyor ve script belirgin şekilde hızlanıyor.

Ayırıcı Seçimi

Hangi ayırıcıyı kullanacağınız, sakladığınız verinin doğasına bağlıdır. Boşluk en doğal ayırıcıdır ve kanal adları, nickler gibi boşluk içermeyen değerler için idealdir. Ancak değerleriniz boşluk içerebiliyorsa, örneğin mesaj metinleri veya açıklamalar saklıyorsanız, boşluk ayırıcısı listeyi bozar. Bu durumda virgül, dikey çizgi veya nadir kullanılan bir karakter seçmek gerekir.

Verilerinizde ayırıcının geçip geçmediğini kontrol etmek, liste bozulmalarını önlemenin en güvenli yoludur. Kullanıcıdan gelen bir değeri listeye eklemeden önce içinde ayırıcı olup olmadığına bakmak ve varsa temizlemek veya reddetmek, sonradan açıklanması zor hatalardan kurtarır.

Listeleri Saklamak

Token listelerini saklamanın birkaç yolu vardır. Küçük listeler için global değişken yeterlidir ve mIRC kapanıp açıldığında korunur. Daha büyük veya birden fazla listeniz varsa bir ini dosyası daha düzenli bir yapı sunar: Her liste kendi anahtarında durur ve kullanıcı dosyayı elle düzenleyebilir. Çok sık değişen listeler için hash tablosunda tutup ara sıra diske kaydetmek en hızlı yaklaşımdır.

Sonuç

Token identifier'ları, mIRC'te metin ve liste işlemenin temel araçlarıdır. Ayırıcıyı karakter koduyla belirtin, $gettok ve $numtok ile parçalar üzerinde gezinin, $addtok ile tekrarsız listeler tutun, $istok ile hızlı kontroller yapın ve $sorttok ile sıralarken sayısal parametreyi unutmayın. Büyük veri kümeleri için sıradaki rehberimiz mIRC hash tabloları.

IRC sorunun mu var? Kanalda birlikte çözelim.

💬 Kanala Bağlan

Sıkça Sorulan Sorular

Token nedir?

Bir metnin, belirlenen ayırıcı karaktere göre bölünmüş parçalarından her biridir. Boşlukla ayrılmış bir cümlenin kelimeleri token'lardır.

Ayırıcı neden sayı olarak yazılıyor?

Token identifierları ayırıcıyı karakter kodu olarak alır. 32 boşluk, 44 virgül, 46 nokta karakterine karşılık gelir.

Token listesi ile hash tablosu arasında nasıl seçim yapmalıyım?

Kısa listeler için token'lar yeterlidir. Yüzlerce kayıt ve sık arama gerekiyorsa hash tablosu çok daha hızlıdır.