![]() |
Scripting İleri Seviye Ders: Scripting İleri Seviye Yazan: L4roXyL - Hasan AYDENİZ Tarih: 17 Ağustos 2012 Evet arkadaşlar bu makalemizde mIRC Scripting-de kod yazarken daha kısa, hızlı ve işlevsel kod yazma biçimleri hakkında örnekler vereceğim. Ders içeriği scripting-de bildiğiniz kullanımınların, farklı kullanımlar ile daha işlevsel hale gelmesi ve bir takım orta/ileri seviye kod yazarları için pratik ve değişik bilgiler içermektedir. mIRC Scripting her zaman dediğimiz gibi hayal gücüne bağlı, belirli yeterlilikler ile işgören veya gelişime yönelik kodlar yazma sanatıdır. Betik bir dil olduğundan, aynı işlevi getiren bir sonucu çeşitli farklılıklar ile yazabilme olanağını fazlasıyla tanımaktadır bize. Ders başı uyarısı: Ders içeriği yeni kodlamaya başlamış veya normal düzey kodlayıcı arkadaşlar için uygun değildir. Ders içeriğindeki bilgiler, zaten scripting konusunda belirli bir noktaya gelmiş(orta ve ileri düzey kod yazarları) kişilere yöneliktir. Fazla uzatmadan dersimize başlayalım. 1- Ölçüm Parantezleri Kod yazarken sık sık kullandığınız, daha doğrusu eski kodlara bakıldığında görülen "[" - "]" parantezleridir. Türkiye'de ki mIRC Scripting-de bu parantezler genellikle gereksiz biçimlerde kullanımaktadır(bu önizlemem forumlardaki birçok kodlar üzerindendir) Bu parantezler esasında daha çok öncelik tanıma işlevi kullanılır. Örnek: Kod: alias _x var %, $0 | while (%,) { echo -> $1 | dec %, } | return $~1Kod: //echo $_x(d1) $_x(d2) $_x(d3) $_x(d4)Alıntı:
Şimdi ölçüm parantezlerini devreye sokalım, örneğin; Kod: //echo --> $_x(d1) $_x(d2) [ $_x(d3) ] [ [ $_x(d4) ] ]Alıntı:
Sıralamanın açıklamasını yapacak olursak, tek ölçüm/öne getirme kullandığımız d3 ilk sıraya alındı. Çift ölçüm kullandığımız d4 verisi 2. sıraya alınmıştır. Çift ölçüm kullanılan d4 verisini bu kullanımda her zaman 2. sırada olacaktır. Bunun sebebi kullanım esnasında ilk girilen ölçüm parantezi d3 verisine aittir. Yani kısacası siz ölcüm yapsanız dahi, internal bir sıralama olacaktır her daim. Ölçüm parantezleri örnek kullanımda değişik yerlere geldiği taktirde bir çok farklılıklar yapabilir. Örnek: Kod: //echo --> $_x(d1) [ [ $_x(d2) ] $_x(d3) ] $_x(d4)Alıntı:
Kod: //echo --> $_x(d1) [ $_x(d2) [ $_x(d3) [ $_x(d4) ] ] ]Alıntı:
Lakin bu parantezler farklı kullanımlarda değişik etkiler yapabilir. Örnek: Kod: //var %. = deneme,/(e)/g | echo $regex(%.)Alıntı:
Çünkü $regex() kullanımı normalde $regex(text,re) şeklindedir. Şimdi burada "ama biz %. değişkenine atadık o kullanımı, neden görmüyor?" denilebilir. İşte bu durumda öncelik/gelişim parantezlerini kullanabiliriz. Aynı kullanımı şu şekilde yaptığımızda: Kod: //var %. = deneme,/(e)/g | echo -> $regex( [ %. ] )Alıntı:
Devam edelim. Ölçüm parantezleri öncelik tanıma konusunda hemen hemen her yerde geçerlidir. Örnek: Kod: //echo -> $!ticksAlıntı:
Kod: //echo -> [ [ $!ticks ] ]Alıntı:
Bu konu hakkında gelişmiş örnekler verelim. Örnek: Kod: //var %: = $!time $!chr(45) $!day $!chr(45) $!fullname | echo -> %:Alıntı:
Örnek: Kod: //var %: = $!time $!chr(45) $!day $!chr(45) $!fullname | echo -> [ [ %: ] ]Alıntı:
Ölçüm parantezleri yukarıda verilen örnekler ve daha değişik şekiller ile kullanılabilir. 2- Matchtext Kısmında Kullanılabilir Değişiklikler Matchtext kod yazan kişilere yabancı bir kelime gelmeyecektir. Bir takım event-lerde olayın gerçekleşmesinde bir nevi sorgu teşkil eden text-dir. Örnek: Kod: on *:text:*deneme*:#:işlevYukarıdaki kullanım aşağıdaki kullanım ile aynı işlevi görür: Kod: on *:text:*:#:if (*deneme* iswm $1-) işlevBazende ilk kelime şu olsun ve eğer 2. hatta 3. kelime varsa işlem yapalım gereksinimi duyulur. Örnek: Kod: on *:text:*:#:if ($1 = !deneme && $2) işlevYani kısacası bu olay sorgu eşleşirse çalışır. (!deneme x - !deneme 1 - !deneme deneme gibi.) Bu tür kullanımlarda yani eğer 2. kelimede varsa gibi kullanımlarda, text-i genellikle matchtext kısmından çıkarıp direk bir /if sorgusu içerisine entegre ederiz. İşte tam burada normalde bitwise operatörlerinden olan "&" operatörünü kullanabiliriz. Bitwise operatörlerinden olan "&" prefix-i "ve" manasına gelir. Yani scripting-deki "&&" gibi. Yukarıdaki kodu bu operatörü kullanarak matchtext kısmına girebiliriz. Örnek: Kod: on *:text:!deneme &:#:işlevYani kısacası external bir sorgu yerine, internal bir sorgu gerçekleşir. Bu kullanımda kodun daha hızlı çalışmasını ve gereksiz karakter fazlalığından kurtulmasını sağlar. Bir örnek daha verelim: Kod: on *:text:!deneme & &:#:işlevYani aşağıdaki kullanımlar ile aynıdır. Kod: on *:text:*:#:if ($1 = !deneme && $2 && $3) işlevBuraya kadar matchtext kısmında kullanılan "&" prefixinin ne işe yaradığını gördük. Devam edelim. Matchtext kısmında regular expression kullanabileceğimizi daha önce söylemiştim. Bunun için gereken olay başına "$" prefixini eklemekdi. Örnek: Kod: on $*:text:/^(merhaba|slm)$/iS:#:echo -> $regml(1)Bilindiği üzere matchtext kısmında %değişken de kullanabilirsiniz. Örnek: Kod: /set %d *deneme*Buraya kadar anlaşılmayan birşey yok sanırım. Şimdi esas konuya gelecek olursak, $eval/$() sayesinde matchtext kısmında belirlediğimiz bir alias-ıda kullanabiliriz. Örnek: Kod: alias _d return /^(s(e|)l(a|)m|m(e|)rh(a|)b(a|))$/iSDaha gelişmiş bir örnek verelim. Bu örnek alias veya %değişken-lerinizi matchtext ve kanal kısmında da kullanabileceğinize örnektir. Kod: alias _ct {3- Döngü İçerisinde Döngü(ler) Kullanma Bildiğiniz üzere /while komutu scripting-de döngüler kullanmak için kullanılır. Bu döngüler içerisinde sorgular dahil olmak üzere birçok şey kullanabilir, hatta bazen döngü içerisinde döngü ve isterseniz döngü(döngü(döngü(vs.)))) şeklindede kullanabilirsiniz. Örnek bir while döngüsü: Kod: //var %& = 5 | while (%&) { echo -> %& | dec %& }Alıntı:
Peki /while içerisinde /while kullanılabilirmi? Evet kullanılabilir. Ciddi bir örnek verelim: Kod: alias _wh {Alıntı:
Buradaki mevzu bahis nedir? Scripting içerisinde aynı anda 2 döngü kullanamıyoruz. Yukarıdaki örnekde gördüğünüz üzere özetlemek gerekirse: Alıntı:
Döngüler hakkında bir kaç bilgi daha verelim.
Kod: alias _th {Alıntı:
Not: $* ayrıştırıcı tanımı while içerisinde farklı bir komut içerisinde bağımsız kullanılabilir. Lâkin bu kullanımda dahi önceki döngü pause konumuna geçer. $* işlemi bittikten sonra devam eder. Kullanıma göre bu işlevler değişkenlik gösterebilir. Örneğin $* tanımını ilişiksiz ve döngüye ait komut veya komutların işlev satırından önce kullanırsak, ilk önce $* tanımının işlevi gerçekleşir. Ardından döngüye atanan diğer komutlar gerçekleşir. Örnek: Kod: alias _th {Alıntı:
Örnek: Kod: alias _th {Alıntı:
Sonuç olarak yukarıdada değidiğim gibi kullanım şekillerine göre değişiklikler gösterebilir. 4- Tokenize İle İnternal Döngü Bildiğiniz üzere /tokenize komutunu scripting-de ayrıştırma için kullanılır. Genellikle socket-larda kullanılan /tokenize esasında daha değişik işlemler içinde kullanılabilir. Örnek bir tokenize işlemi: Kod: //tokenize 32 ex1 ex2 ex3 ex4 | echo -> $1-Alıntı:
Örnek: Kod: //tokenize 32 ex1 ex2 ex3 ex4 | echo -> $2-3Alıntı:
Şimdi /tokenize ile nasıl sorgulamalar yaparız, bu konuya değinelim. Scripting-da bazen basit sorgulamak için /while vb. döngüler kullanılırız. İlk öncelikle /tokenize ile ilişikli kullanılan $* tanımını kullanalım. $* tanımı ayrıştırılan kelimeleri ayrışma sayısınca satır satır verir. Bunu en basitinden /echo kullanarak görebilirsiniz. Örnek: Kod: //tokenize 32 ex1 ex2 ex3 ex4 | echo -> $*Alıntı:
Peki $* kullanarak sorgulama veya değişik işlemler nasıl yaparız. Örneğin yukarıdaki ex* kelimelerini sıralarken hepsini büyük yazdıralım. İşlem: Kod: //tokenize 32 ex1 ex2 ex3 ex4 | scid 0 echo -> $!upper( $* )Alıntı:
$* ile sorgulama örnekler Örneğin herhangi bir kanal penceresindeki seçili nicklerden($snicks) belirlediğimiz harf ile başyana nickleri listelemek isteyelim. Bunun için /while yada çok iyi kombine edilmiş bir regex kullanmamız gerekebilir. While ile örnek: Kod: alias _nl {Şimdi aynı işlevi $* ile yapalım. Örnek: Kod: alias _nl2 {Gördüğünüz gibi external bir döngü olmadan aynı işlemi /tokenize ile birlikte kullanılan $* sayesinde yapabildik. Şimdi $* tanımında farklı bir kullanım göstereceğim. Komut satırı: Kod: //tokenize 32 deneme deneme1 deneme2 | echo -> $left($*,3)Alıntı:
Bunun sebebi mIRC çoğu internal fier-ları bu şekilde tanımlar. Tokenize ve $* hakkında söyleyeceklerim bu kadar. 5- $remtok Tanımının Önemi Remtok kullanımı bilindiği üzere belirtilen string içerisindeki belirtilen konumda olan ve yine belirtilen biçimi silmeye yarar. Lâkin $remtok tanımın en önemli kısmı silinmesi istenilen text ne ise kesinlikle sadece onu siler. Yani benzer text-leri koruma altına alır. Scripting-de en çok kullanılan genelde text-ler içerisinde kelime/harf silme ayıklama işlemidir. Bunun için bir çok şey kullanılabilir. Örnek: $regsubex, $remove, $removecs, $replace/x vb. Ama bu kullanımların hepsi ($regsubex detaylı string girdileri hariç) silinecek veya değiştirilecek kısmı tam olarak ayıklar. Örnek: Text-imiz şöyle olsun: deneme deneme2 deneme3 deneme4 ene Ve biz bu text içerisinde "ene" kelimesini silmek istiyoruz. Bunun için Türkiye'de en çok ezbere kullanılan tanım $remove olacaktır. Peki deneyelim bakalım. Kod: //var %s = deneme deneme2 deneme3 deneme4 ene | echo -> $remove(%s,ene)Alıntı:
Peki bu durumda ne yapabiliriz? Örneğin $replace kullanalım. Kod: //var %s = deneme deneme2 deneme3 deneme4 ene | echo -> $replace(%s,ene,)Alıntı:
Değişik bir kullanım deneyelim. Kod: //var %s = deneme deneme2 deneme3 deneme4 ene | echo -> $replace(%s,$chr(32) $+ ene,)Alıntı:
İşte bu durumda kullanmamız gereken token $remtok tanımıdır. Hemen deneyelim: Kod: //var %s = deneme deneme2 ene enedeneme3 deneme4 ene | echo -> $remtok(%s,ene,0,32)Alıntı:
Bu konuya bu kadar değinmemin sebebi, ileri seviye coder-ların dahi düştüğü basit hatalardan birisidir yukarıdaki kullanımlar. 6- Kelime Sayısı Belirlemede Kullanımlar mIRC Scripting-de özelliklere olaylara dayalı kodlarda genellikle cümle içerisinde kaç kelime var olduğu alınır. Bu tür bir işlevde genellikle $numtok($1-,32) veya $gettok($1-,0,32) gibi tanımlar kullanılır. Bu kullanımlar her ne kadar yanlış olmasada, olaylar içerisinde daha basit bir kullanımı mIRC bize olanak tanımıştır. Bakınız: $0 Örnek: Kod: on *:text:*:#:echo -> Text-deki toplam kelime sayısı: $0Örnek: Kod: //var %s = deneme-deneme1-deneme2-deneme3 | tokenize 45 %s | echo -> $07- Tekil İleti Penceresi Kullanımı mIRC üzerinden bağlantı kurduğunuz bir server-da size mesaj gönderen, veya siz tarafından mesaj gönderilen nickler için query penceresi açılır. Text gönderimi/alımı bu pencereler üzerinden yapılılır. Bu tür pencereler üzerinde işlev yapmak için, genellikle: Kod: on *:text:*:?:işlevPeki bütün özele gönderilen text-lerin hepsini otomatik olarak kişiye özel query penceresi açmaksızın tek bir pencere nasıl görüntüleyebiliriz dersek. Kod: /dqwindow [on|off|show|hide|min]Açıklama: on/açmak - off/kapatmak - show/pencereyi göstermek - hide/pencereyi saklamak - min/pencereyi minimize konuma getirmek için kullanılır. /dqwindow on yaptığınızda, bu işlemi devreye sokmuş olursunuz. İşlem devreye girdikten sonra, herhangi birisinin özeline göndereceği text Messages penceresinde gösterilir. mIRC default olarak kişi tarafından gelen mesajları; Alıntı:
Messages penceresindeki editbox-da her daim /msg komutu aktiftir. Yani siz bir text gönderdiğinizde editbox-da /msg komutu yeniden çıkacaktır. Messages penceresi hakkında bazı bilgiler:
Sonuç olarak Messages penceresi üzerinden değişik kullanımlar ile, farklı korumalar veya işlevler yazılabilir. 8- Yığın Bellek Ayırma Hatası mIRC üzerinde kendi komutlarınızı veya tanımlarınızı alias üzerinden oluşturabilirsiniz. Kod: alias _d echo -c info Bu bir denemedir.Lâkin oluşturduğunuz bir alias içerisinde direkt aynı alias-ı kullanmaya kalktığınızda, 2. kez uygulanmaz. Daha doğrusu, eğer bir işlev varsa işlev gerçekleşir, 2. işlev 1. işlevi gerçekleştirecek bir işlemse, 2. işlev sunucuya gönderilir. Örnek: Kod: alias _d {Alıntı:
Gördüğünüz gibi, 1 kez mIRC local olarak uyguladı ve 2. kez server-a komut olarak göndermeye kalktı. Yani aliaslar içerisinde aynı alias bazında kısır döngü kurmaya kalktığınızda, mirc buna müsade etmez. Peki alias-lar üzerinde internal kısır döngü oluşturulabilir mi? Evet oluşturulabilir. Yukarıdaki örnek-de geri dönüş işlemini 2. bir alias ile yapmaya kalkalım. Yani yapacağımız işlev şu şekilde: Alıntı:
Kod: alias _d1 {Karşımıza çıkan sonuç: Alıntı:
Kısır döngü her koşulda sonucun değişmesi veya kısır döngünün kesilmesi için bu ikilemeyi standart olarak "255" defa uygular. Kısır döngü devam ediyorsa, yukarıdaki hatayı alırsınız. 9- Timer / Tokenize($*) İlişkisi Tokenize(/tokenize) hakkında yukarıdaki bölümlerde genişce açıklamalarda bulunduk. Lâkin bu bölümüzde daha farklı değişiklerden bahsedeceğiz. /tokenize komutu ile uygulanan $* tanımının ne işe yaradığını söylemiştik. Kısacası değinmek gerekirse, $* tanımı öncesine konan veya işlev içerisinde gerçekleştirilen işlemi ayırıcının algıladığı sayı kadar tekrarlar. Kısa bir örnek verelim: Kod: //tokenize 32 a b c | echo -> $*Alıntı:
Şimdi esas konumuza gelecek olursak, /tokenize komutu, /timer komutu ile beraber uygulandığında ne gibi farklı değişiklikler gösterebilir? Yukarıdaki diğer /tokenize açıklamamızda, $* tanımını sorgu için kullanmak istediğimizde /scid veya /scon komutları ile birlikte kullanmamız gerektiğimizi söylemiştik. Bunun sebebinin bu şekilde kullanıldığında, local bazlı olarak gönderilen sorgu veya işlemlerin SABİTLENEREK UYGULANMASI ve yine local bazlı cevap verme özelliğinin olmasıydı. Bunların haricinde(/scid - /scon) ek olarak $* tanımını sorgu veya tanıma yeni bir işlev amaçlı /timer içerisinde de kullanabiliyoruz. Örnek: Kod: //tokenize 32 deneme danama dinimi | scon -r echo -> $!regex(x, $* ,/([aie])/g) - $!regml(x,1)Alıntı:
Yukarıdaki gördüğünüz işlev gayet açık. Şimdi bunu /timer kullanarak nasıl yapabilir? Örnek: Kod: //tokenize 32 deneme danama dinimi | .timer 1 1 echo -> $!regex(x, $* ,/([aei])/g) - $!regml(x,1)Alıntı:
Alıntı:
Kısacası ilk önce "deneme" kelimesi arandı, sonra "danama" ve en son olarak "dinimi" kelimesi. Sonuçlara bakarsanız ilk gönderilen /echo çıktısı "e" harfidir. Şimdi /timer ile bu işlev yapılırken sıralama değişebiliyormu? Evet değişebiliyor. Örneğin, timer-ın interval/aralık kısmını ile oynayalım. Yukarıdaki /timer işleminde 1 saniye sonra, 1 kez işlemi gerçekleştir diyoruz. Şimdi aşağıdaki vereceğimiz örnekde ise, işlemi hemen ve yine 1 kez gerçekleştir diyeceğiz. Bakalım sıralama da değişiklik olacakmı. Uygulanan komut: Kod: //tokenize 32 deneme danama dinimi | .timer 1 0 echo -> $!regex(x, $* ,/([aei])/g) - $!regml(x,1)Alıntı:
10- $()/$eval Tanımlarındaki Kullanımlar. mIRC-deki en önemli tanımlardan birisi $eval tanımıdır. Bunu zaten kodlama ile içli dışlı olan kişiler her zaman bilirler. $eval(text,N) tanımı genellikle değişkenlerin verilerini değerlendirmek için kullanılır. Bunun haricinde, herhangi bir text-ide değerlendirebilir. N kısmına 0 girilirse, text kısmı değerlendirilmez. Eğer N kısmı girilmezse, otomatik "1" olarak tanımlanır. Bu konu altında $eval tanımının ne gibi değişiklikler ve bazende çok farklı sonuçlar verdiğini göreceksiniz. Örnekler Kod: Kod: //var %loop = a b c d | echo -> $(%loop,1)Alıntı:
Kod: Kod: //var %loop = a b c d | echo -> $(%loop,0)Alıntı:
Kod: Kod: //var %loop = a b c d | echo -> $([ %loop ],1)Alıntı:
Kod: Kod: //var %loop = a b c d | echo -> $([[ %loop ]],1)Alıntı:
Kod: Kod: //var %loop = a b, c d | echo -> $([ [ %loop ] ],1)Alıntı:
Kod: Kod: //var %loop = a b, c d | echo -> $([ [ %loop ] ],$*)Alıntı:
Kod: Kod: //var %loop = a b,, $+ c d | echo -> $([ [ %loop ] ],1)Alıntı:
Kod: Kod: //var %loop = a b $+ c d | echo -> $([ [ %loop ] ],0)Alıntı:
Kod: Kod: //var %loop = $!(a b, $+ ,c d) | echo -> $([ [ %loop ] ],1)Alıntı:
Kod: Kod: //var %loop = $calc(1 + 5) / 2 | echo -> $([ [ %loop ] ],1)Alıntı:
Kod: Kod: //var %loop = a $+ , % $+ loop $+ , $calc(6-1) | echo -> $(,$([ [ %loop ] ],1))Alıntı:
Yukarıda gördüğünüz örnekler gibi, binlerce örnek daha yazılabilir. Bu örnekler sayesinde $eval tanımının(kısa hali $() tanımıdır) değerlendirme bazındaki etkilerini görmüş olursunuz. Eval($eval) hakkında bir kaç bilgi daha verelim. Aşağıdaki bilgilerde kullanımların aynı olduğu gösterilir. Alıntı:
11- Timer Sabitleme Özelliğini Devre Dışı Bırakma Yolları Bildiğiniz gibi /timer, değişken bir yapısı olan tanımları veya değişkenleri, sabitler. Bu durum çoğu zaman kod yazımında istenilen sonuçların alınmamasına sebep olabilir. Örnek: Kod: //.timer 5 1 echo -> $ticksAlıntı:
Bunun sebebi /timer kullanım içerisinde olan <command> kısmını girilen veri ile sabitler. Yani size /echo ile $ticks tanımının verisini almaya kalksanız dahi, o anki $ticks tanımına ait olan veriyi echo-latır. Bunun önüne daha öncede nasıl geçilebileceğini söylemiştik. Örnek: Kod: //.timer 5 1 echo -> $!ticksAlıntı:
Şimdi daha açık yanlış ve doğru olan bir örnekle anlayalım. Yanlış kullanıma örnek: Kod: //.timer_ex 5 1 noop $ticks | echo -> $timer(_ex).comAlıntı:
- Doğru kullanıma örnek: Kod: //.timer_ex 5 1 noop $!ticks | echo -> $timer(_ex).comAlıntı:
Şimdi, daha farklı yollar ile bu sabitlemenin önüne geçilebilirmi? Evet geçilebilir. Aşağıdaki kullanımlar $identifier -lar için örneklerdir. Kod: Kod: //.timer_ex 5 1 noop $ $+ ticks | echo -> $timer(_ex).comAlıntı:
Kod: Kod: //.timer_ex 5 1 noop $+($,ticks) | echo -> $timer(_ex).comAlıntı:
Kod: Kod: //.timer_ex 5 1 noop $($ticks,0) | echo -> $timer(_ex).comAlıntı:
Söz konusu %loops (değişkenler) olduğunda yapmamız gerekenler aşağıdaki gibidir. Doğru kullanımlara örnekler: Kod: //set %loop deneme | .timer_ex 5 1 echo -a % $+ loop | echo -> $timer(_ex).com12- Regsub(Ex) Hakkında Bazı Kullanımlar Regsubex bilindiği gibi belirtilen text-i, yine belirtilen kombinasyonlarla değiştirmenize ve birçok daha işlev yapmanıza olanak sağlayan ileri düzey bir tanımdır. Regex zaten mIRC içerisinde ayrı bir kütüphane olup, mIRC için biraz daha farklı uyarlanmış, metin içerisinde altmetinler elde etmek veya sorgular yapmak için kullanılan mükemmel bir tanımdır. Daha fazla uzatmadan, $regsubex ile alt-metinler nasıl elde edilir bir göz atalım. Yazının devamında ilk öncelikle normal bir scripting kodlayıcısının rahatlıkla anlayabileceği bilgiler verilecektir. Devamında biraz daha ileri düzey örneklerle dersimize son vereceğim. Standart, $regsubex kullanımı: $regsubex([name], text, re, subtext) Açıklaması: [name]: Bu kısım girilmesi mecburi bir alan değildir. Lâkin çok iç içe kullanılan regsubex-larda isim belirtmek $regml veya \belirleyici ile yakalanan veriyi almak için daha iyi olur. Bunun dışında evaluation bracket-lar kullanılabilir tabii, onu ilerleyen kısımlarda anlatacağım. text: Bu kısım altmetin elde edilecek esas metindir. re: Bu kısım değiştirilmesi gereken daha doğrusu alt metini belirleyen kısımdır-ki herşey burada konuşulur- .) subtext: Bu kısım ise "alt metin" dediğimiz kısımdır. Yani bize geri dönüş yaptıran yer. Buraya kadar anlaşılmayan birşey olmadığını varsayıp örneklere geçiyorum. Örnek: Kod: //echo -> $regsubex(deneme,/(e)/g,-)Alıntı:
Yukarıda kullanılan (e) kısmımız yakalama işlemi için kullanılır. Bu şekilde "e" harfi yakalanan kısım olmuştur. Bunu daha iyi anlamak için: Kod: //echo -> $regsubex(deneme,/(e)/g,-) - Yakalanan: $regml(0) | while ($true) { inc -u %1 | echo -> $(%1,$!+ . yakalanan:) $$regml(%1) - Pos: $$regml(%1).pos }Alıntı:
Örnekler Kod: Kod: //echo -> $regsubex(deneme,/(e)/g,\n)Alıntı:
- Kod: Kod: //echo -> $regsubex(deneme,/(e)/g,\ $+ n)Alıntı:
- Kod: Kod: //echo -> $regsubex(deneme,/(e)/g,[ [ \ $+ n ] ])Alıntı:
- Kod: Kod: //echo -> $regsubex(deneme,/(e)/g,$*)Alıntı:
Yukarıdaki örnekler ilk örnek hakkında detaylı kullanımlar için verilmiştir. Şimdi seviyeyi biraz daha yükselterek "subtext" kısmında sorgulamar yapabileceğimizi görelim. Örnekler Kod: Kod: //echo -> $regsubex(scripting tutorial,/(i)/g,$iif(\n != 1,-,$v1))Alıntı:
- Kod: Kod: //echo -> $regsubex(scripting tutorial,/(i)/g,$iif(\n != 1 && \n != 3,-,$v1))Alıntı:
Regsubex ile hiç external döngü kullanmadan alfabedeki harfleri sıralayalım mesela. Not: Normalde bu tür bir işlev için /while /goto vb. döngüler kullanılabilir. Kod: Kod: //echo -> $regsubex($str(-,26),/(.)/g,$chr($calc(96+ \n)) $chr(32))Alıntı:
Peki şimdi, yukarıdaki kullanımda ortaya çıkan text içerisinde, harflerden birisi küçük, diğeri büyük nasıl yapabiliriz? Deneyelim. Kod: Kod: //echo -> $regsubex($str(-,26),/(.)/g,$iif(2 // \n,$chr($calc(96+ \n)),$upper($chr($calc(96+ \n)))) $chr(32))Alıntı:
Böyle bir işlemi /while ile yapmaya kalktığımızda, söyle bir kod yazılabilir. Kod: alias char {Alıntı:
İki kullanım arasında 10.000 tekrarlı bir döngü ile bench yapıldığında sonuçlar: Regsubex: 12.963 ms Normal kodumuz: 16.489 ms Gördüğünüz gibi $regsubex kullandığımız kod daha hızlı çalışıyor. Sanırım buraya kadar anlaşılmayan birşey yok. Konu çizgisinden daha fazla çıkmadan $regsubex tanımımıza geri dönelim. Örneklere Devam Kod: Kod: //echo -> $regsubex(scripting tutorial,/(i)/g,[\t])Alıntı:
- Kod: Kod: //echo -> $regsubex(scripting tutorial,/(i)/g,[[ \t ]])Alıntı:
- Kod: Kod: //echo -> $regsubex(scripting tutorial,/(i)/g,[ [ \t ] ])Alıntı:
Regsubex hakkında söyleyeceklerim bu ders için bu kadardır. Regsubex konusu ap ayrı bir konudur. Hakkında çok daha fazlası yazılabilir. Ki zaten bu ders-de gereğinden fazla uzun oldu. O yüzden bu dersin 2. sürümünün büyük bir bölümü sadece regsubex hakkında olacaktır. Birkaç Bilgi
Dersimiz 12 madde başlığı altında sona ermiştir. Biraz uzun olduğu için söylenecek bir kaç konuyu, bu dersin ikinci sürümüne bırakmış bulunmaktayım. Onuda ne zaman yazarım? Pek bilinmez. .) |
++ mIRCScripting.net hakkında kısaca: |
User Alert System provided by
Advanced User Tagging v3.1.3 (Lite) -
vBulletin Mods & Addons Copyright © 2026 DragonByte Technologies Ltd. Runs best on HiVelocity Hosting.