mIRC Scripting  


Geri dön   mIRC Scripting > mIRC Scripting > Tutorials - Dersler

Tutorials - Dersler mIRC Scripting hakkında yazılmış özel dersleri bulup, paylaşabileceğiniz bölüm.

Cevapla
 
LinkBack Seçenekler
  #1  
Alt 22 Eylül 2009, 20:00
Avatar Yok
 DirtyCoder 

mS Puan: 1031
mS Derece: L4roXyL Kod delisiL4roXyL Kod delisiL4roXyL Kod delisiL4roXyL Kod delisiL4roXyL Kod delisiL4roXyL Kod delisiL4roXyL Kod delisiL4roXyL Kod delisi
 
Üyelik tarihi: 10 Temmuz 2009
Yaş: 32
Mesajlar: 339
Konular: 100
Eklentiler: 3
Alınan Teşekkür: 40
Yapılan Teşekkür: 0
Standart Regex(yazı çeşitleri vs. hakkında)

Evet arkadaşlar, cesuryurek(erdem) arkadaşımızın bir isteği/önerisi üzerine farklı birşey yapmaya çalıştım ve sizinle paylaşmak istedim.

-

Bildiğiniz üzere bir çoğu script-de, kalın/ince yazı, renkli yazı(bir harf belirtilen renk, diğer harf diğer belirttiğiniz renk) ve büyük/küçük yazım şekli şeklinde kod-lar mevcut.
Bu tarz kodlar/işlevler genellike uzun, bol loop-lu kodlar ile yazılmaktadır ve olduğunca uzun olmaktadır(bunu en yeni çıkan scriptleri dahi gözlemleyerek söylüyorum)
-
Erdem arkadaşımız "bunu regex(regular expression) ile yapabilirmiyiz?" dediğinde, kalın/ince yazı için aklımda hemen bir mantık oluştu. Çünki daha önceden-de yazdığımı hatırlıyorum. Lâkin renkli ve büyük/küçük yazı şekli için duraksadım. Çünki kalın/ince yazının mantığı basittir; her harf arasına CTRL+B[old]($chr(2)) koymanız yeterli olur. Ama renkli yazı ve büyük/küçük yazı şekli için aynı şey geçerli değil tabiki. Farklı kullanımlar mevcut olduğu için farklı bir mantık geliştirmeniz gerekiyor. Her zaman dediğim gibi mIRC Scripting-de en iyi, en işlevsel, en hızlı ve en kısa kodu yazabilmek mantığınıza bağlıdır. Bilginizde önemlidir tabiki. Fazla uzatmadan mantıkları açıklayayım size.

-

Kalın/ince yazı mantığı yukarıdada dediğim gibi basittir.
Ben regex kullandığım için, regex-daki mantığını açıklayacağım. Zaten diğer yollarla yine yukarıda dediğim gibi bir ton gereksiz external loop kullanmanız lazım. Buna gerek duymuyorum gerek olduğunuda bu saatten sonra zannetmiyorum. :)
Regex-da aranılan verideki eşleşmeleri yakalamak için "(veri)" kullandığımızı biliyorsunuz.

-

Örnekler:

Ö1: //echo -: $regex(r,deneme,e) => 1
Yakalama: //echo -: $regml(r,0) => 0
Açıklaması: Eşleşme var, yakalama işlevi yok. () kullanmadık.
-
Ö2: //echo -: $regex(r,deneme,(e)) => 1
Yakalama: //echo -: $regml(r,0) => 1
Açıklaması: Eşleşme ve yakalama işlevi var. Lâkin sadece d harfinden sonra gelen "e" harfini yakalar. Bu yüzden sonuç 1 olarak döner ve $regml(r,1) "e" olarak döner. Bunun sebebi /g/ anahtarını kullanmadık.
-
Ö3: //echo -: $regex(r,deneme,/(e)/g) => 3
Yakalama: //echo -: $regml(r,0) => 3
Açıklaması: Eşleşme ve yakalama işlevi var. Deneme text-i içerisindeki tüm "e" harfleri başarıyla yakalandı.
Eşleşmeleri görmek için: //var %1 = 1 | while ($regml(r,%1)) { echo -: %1 - $v1 | inc %1 }

Sanırım buraya kadar anlaşılmayan birşey yok.
Şimdi gelelim, kalın/ince yazı şeklini nasıl yazacağız?
Söyleki;

mIRC Scripting-de $regsubex([name], text, re, subtext) tanımını bilirsiniz. Yani regex-i bilen herkez bu tanımında ne işe yaradığını az/çok bilir.
Kısaca text içerisindeki belirtilen veriyi, yine belirtilen şekilde değiştirmenizi sağlıyor. Aklınıza $replace(x) vs. gelmesin bu çok daha fazla gelişmiş şeklidir. :) Neyse daha fazla uzatmadan açıklamak istiyorum.
-
Kalın/ince yazmamanın yolu regsubex ile sadece bu kadar. .)
Kod: $regsubex(deneme,$1-,/(.)/g,$+($chr(2),\1))
-
Açıklaması: /(.)/g bu kısımda "." herhangi bir karakter demektir. Burada yaptığımız işlev veri içerisindeki her karakteri yakalıyoruz. Yani text içerisindeki tüm karakterler $regml(deneme,[N]) şeklinde görülebilir. Buradaki "deneme" regex-e verdiğimz isimdir, karışma olmasın diye belirttim. "\1" kısmı ise yakalan veri olarak döner. Yani kısacası text içerisindeki tüm verileri yakalıyor ve onları $chr(2)(bold karakteri) ile re-text ediyoruz.
Görmek için: //var %1 = 1 | while ($regml(deneme,%1)) { echo -: $v1 | inc %1 }

Sanırım buraya kadarda anlaşılmayan birşey yok.

-

Şimdi gelelim; büyük/küçük ve renkli/renksiz yazma olayına.
-
Bu olayda yukarıdaki gibi, lâkin kullanacağımız mantık biraz daha farklı olacak. Yukarıyı okuduysanız bu bölümden sonra ne dediğimi gayet iyi anlayacaksınızdır diyerek konuya giriyorum.
-
Bildiğiniz gibi IF sorgusunda; "//" operatörü mevcut. Bu operatör, belirtilen saysının; diğer belirtilen sayının katları olduğunda eşleşme gerçekleştirir.
Örneğin: //if (2 // 4) echo -: $v1
Gibi. Burada belirtilen "4" rakamı belirtilen "2" sayısının kat sayılarından birisidir. //if (2 // 3) echo -: $v1 yaptığınızda pozitif sonuç dönmez. Çünki "3" rakamı "2" rakamının kat sayısı değildir. Aynı şekilde bir diğer operatör olan "\\" ise aynı işlevin tam tersini yapar. Yani yazılan ilk sayı, yazılan ikinci sayının kat sayısı ise sonuç pozitif dönecektir.
Örneğin: //if (4 \\ 2) echo -: $v1
Gibi.
-
Yani şimdi diyebilirsiniz; "bu adam neden bunları anlatıyor bize?" bende size cevap olarak; mIRC Scripting bir mantık işidir. Yapabilecekleriniz mantık + bilgi ile sınırlıdır ve her ikisinin seviyesine göre kodlar yazabilirsiniz. Mantık + bilgi ne kadar iyi ise, sizde o kadar iyi bir coder-sınız demektir.
-
Diyelimki şöyle bir istek yapılıyor(ki yukarıda dediğim gibi script-lerin çoğunda bu vazgeçilmez bir özelliktir); yazdığım yazının harflerinin birisi kırmızı, diğeri siyah olsun?

Mantık olarak ne yapacağız? Yukarıdaki örneklerde yaptığımız gibi yine text içerisindeki tüm karakterleri (yakalayacağız) ve son olarak re-text edeceğiz.
AMA; bu işlevi tam olarak yukarıdaki gibi yaparsak, text-in tamamı ilk belirlediğimiz renk ile görülecektir. Peki biz bu konumda ne yapabiliriz? Nasıl yapacağız? Şu konumda loop(while vs.)lara girmeden işin içinden çıkılamaz gibi geliyor.
Şöyle birşey yapsak? Regex-da "\n" yakalanan verinin numarasını veriyordu biliyorsunuz. "\1" veya "\t" ise yakalanan verinin kendisini veriyordu.
-
Daha iyi anlamak için verdiğim iki küçük örneğe bakınız:

Ö1: //echo -: $regsubex(deneme,/(e)/g,\n)
Sonuç: d1n2m3 (yakalanan veriler yakalam sırasına göre numaralandırıldı)
-
Ö2: //echo -: $regsubex(deneme,/(e)/g,\1)
Sonuç: deneme (yakalanan veriler(tüm e harfleri oluyor bunlar) aynı biçimde gösterildi.

Buraya kadar anlaşılmayan birşey yok sanırım.
En son yapmamız gereken küçük bir IF sorgusu. Diyeceğizki; yakalanan veri numarası "2" sayısının katları ise, belirtilen rengi re-text edeceğiz. Eğer değilse, normal bir şekilde re-text edeceğiz. Yani kısacası şu şekilde olacak; "d1n2[burayı re-text et]m3" şeklinde. Ben artık daha fazla uzatmadan size yazdığım kodu veriyorum.
-
Kod: $regsubex($1-,/(.)/g,$iif(2 \\ \n,$+($chr(3),4,\1,$chr(3),1),\1))
-
Demekki neymiş?
Bu veya buna benzer(büyük/küçük harf mesela) bir kod için 3/5 tane loop kullanmaya ve en az 25 satır kod yazmaya gerek yokmuş.
Ve bir süpriz daha, aynı mantığı kullanarak harflerin büyük/küçük olmasınıda sağlayabiliyoruz.
-
Kod: $regsubex($1-,/(.)/g,$iif(2 \\ \n,$upper(\1),$lower(\1)))
-

Son olarak hepsini bir arada toparlayarak, bir kod yazıyorum ve ders niteliğinde olan makalemizi sonlandırıyorum.

Kod:
alias _t {
  if ($isid && $regex(+t,$1,^(caps|color|bold)$)) {
    var %_t = $regml(+t,1),%_r = return,%_2 = $iif($2,$v1),%_3 = $iif($3,$v1)
    if ($(,%_t) = caps) %_r $regsubex($$2-,/(.)/g,$iif(2 \\ \n,$upper(\1),$lower(\1)))
    if ($(,%_t) = bold) %_r $regsubex($$2-,/(.)/g,$+($chr(2),\1))
    if ($(,%_t) = color) %_r $regsubex($$4-,/(.)/g,$iif(2 \\ \n,$+($chr(3),%_2,\1,$chr(3),%_3),\1))
  }
}
-

Kullanım: $_t(bold|caps|color,text)
Kullanım(color hakkında): 2 renk belirlemelisiniz. Bu belirlediğiniz 2 renk sayesinde re-text olacaktır. Örneğin: $_t(color,4,2,deneme)
Açıklama: 4 ilk rengin, 2 ise ikinci rengin kodudur. Tabiki siz bunları değiştirip istediğiniz renk yapabilirsiniz. Bu sadece bir örnektir. Renk kodlarını görmek/öğrenmek için; CTRL+K yapınız.
-
Örnek kullanımlar:
-
Büyük/küçük yazı: //echo -: $_t(caps,Deneme yapıyoruz.)
Sonuç: DeNeMe yApıyOrUz.
-
Kalın/ince yazı: //echo -: $_t(bold,Deneme yapıyoruz.)
Sonuç: Deneme yapıyoruz.
-
Renkli yazı: //echo -: $_t(color,4,2,Deneme yapıyoruz.)
Sonuç: Deneme yapıyoruz.

-

Makalemiz sona ermiştir.
İleriki zamanlarda regex ile kısa, hızlı ve işlevsel kod yazmanın yollarına sizlere vaktim oldukça sunmaya devam edeceğim.
-
Kolay gelsin.
L4roXyL - (Hasan AYDENİZ) saygılarımla.
__________________
C/co/cod/code^man.
Alıntı ile Cevapla
Sponsored Links
  #2  
Alt 22 Eylül 2009, 20:25
CoCoRiCo - ait Kullanıcı Resmi (Avatar)
 Chief 

mS Puan: 571
mS Derece: CoCoRiCo ÇalışkanCoCoRiCo ÇalışkanCoCoRiCo ÇalışkanCoCoRiCo ÇalışkanCoCoRiCo ÇalışkanCoCoRiCo Çalışkan
 
Üyelik tarihi: 10 Temmuz 2009
Bulunduğu yer: \xml:http\
Yaş: 41
Mesajlar: 135
Konular: 22
Eklentiler: 0
Alınan Teşekkür: 85
Yapılan Teşekkür: 18
Standart

Sanada bu yakısırdı
bu vesile ile // operatorüde kullanmıs oldun arkadaslar da görsün :~P
__________________
3m2t
//alias $str($+(alias,$chr(32)),4) | alias

Konu CoCoRiCo tarafından (25 Eylül 2009 Saat 23:23 ) değiştirilmiştir.
Alıntı ile Cevapla
  #3  
Alt 22 Eylül 2009, 22:16
Avatar Yok

mS Puan: 31
mS Derece: WeiLSiDe
 
Üyelik tarihi: 10 Temmuz 2009
Mesajlar: 119
Konular: 24
Eklentiler: 0
Alınan Teşekkür: 1
Yapılan Teşekkür: 0
Standart

On numarasın hasan
__________________
The end of Something...
Alıntı ile Cevapla
  #4  
Alt 14 Ekim 2009, 17:32
Avatar Yok
 Coders 

mS Puan: 1
mS Derece: Nickolas Meraklı
 
Üyelik tarihi: 20 Temmuz 2009
Mesajlar: 2
Konular: 0
Eklentiler: 0
Alınan Teşekkür: 0
Yapılan Teşekkür: 0
Standart

Regex koşulları, alt şablonlar, tek sefer şablonları ve diğer Regex 'i Regex yapan özelliklerde olsaydı fena olmazdı
Alıntı ile Cevapla
  #5  
Alt 14 Ekim 2009, 23:05
Avatar Yok
 DirtyCoder 

mS Puan: 1031
mS Derece: L4roXyL Kod delisiL4roXyL Kod delisiL4roXyL Kod delisiL4roXyL Kod delisiL4roXyL Kod delisiL4roXyL Kod delisiL4roXyL Kod delisiL4roXyL Kod delisi
 
Üyelik tarihi: 10 Temmuz 2009
Yaş: 32
Mesajlar: 339
Konular: 100
Eklentiler: 3
Alınan Teşekkür: 40
Yapılan Teşekkür: 0
Standart

O dediklerin zaten hayranı olduğun alience tarafından yazılmış. Tekar yazmaya gerek duymam. Zaten bu ders/makale-deki mevzu/bahis farklı.
__________________
C/co/cod/code^man.
Alıntı ile Cevapla
Cevapla

Etiketler
çeşitleri, hakkında, regexyazı

Seçenekler

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 Açık
Pingbacks are Açık
Refbacks are Açık


Benzer Konular
Konu Konuyu Başlatan Forum Cevaplar Son Mesaj
Kick Ban Mesajları hakkında soru Choice Help - Yardım 3 06 Eylül 2009 21:25
mIRCGlass.DLL Hakkında Bilgi Yardım UsLanMaz Help - Yardım 3 01 Eylül 2009 22:34
Helpfounder yardımcısı hakkında yardım Silver Help - Yardım 5 18 Temmuz 2009 09:54


Yasal Uyarı

    5651 sayılı yasada belirtilen "Yer Sağlayıcı" olarak hizmet sunmaktadır. İlgili yasaya göre site yönetiminin tüm içerikleri kontrol etme yükümlülüğü yoktur. Bu sebep ile sitemiz, uyarıları dikkate alarak yasa dışı paylaşımlar hakkında gerekli işlemleri yapmaktadır. Oluşabilecek yasal sorumluluklar üyelerimize aittir. Gerekli şikayet bildirimleri yapabilmek için "burayı" tıklayarak gerekli alanları doldurup yapabilirsiniz.
mIRCScripting©
Powered by vBulletin®
Copyright © 2000-2015, Jelsoft Enterprises Ltd.
SEO by vBSEO 3.6.1

1 2 13 14 16 17 18 19 21 22 23 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 49 50 51 52 54 55 56 57 58 59 60 61 62 63 67 68 69 70 71 72 73 74 75 76