mIRC Script

mIRC Dosya İşlemleri: Metin Dosyalarına Yazmak ve Okumak

· Güncelleme: · 5 dk okuma

mIRC Dosya İşlemleri: Metin Dosyalarına Yazmak ve Okumak
İçindekiler
  1. Dosyaya Yazmak: write
  2. Dosyadan Okumak: $read
  3. Dosya Varlığı ve Bilgileri
  4. Dosya Yönetimi
  5. Akış İşlemleri: fopen ve fwrite
  6. Büyük Dosyaları Okumak
  7. Dosya Yolları ve Taşınabilirlik
  8. Güvenlik Önlemleri
  9. Log Dosyası Yönetimi
  10. Gerçek Bir Senaryo
  11. Dosya Biçimi Seçmek
  12. Sonuç

Scriptleriniz bazen verileri kalıcı olarak saklamak zorundadır: Bir log kaydı tutmak, kullanıcı listesi oluşturmak, istatistikleri biriktirmek, bir metin havuzundan rastgele cümle seçmek. mIRC dosya işlemleri, bu ihtiyaçları karşılayan komut ve identifier setini sunar. Basit işler için tek satırlık komutlar, büyük dosyalar için ise akış tabanlı yöntemler mevcuttur.

Dosyaya Yazmak: write

write kayit.txt Bu bir satir.
write kayit.txt $asctime - $nick kanala girdi

write komutu, belirtilen dosyanın sonuna bir satır ekler. Dosya yoksa oluşturulur. Bu, log tutmanın en basit yoludur.

Parametrelerle farklı davranışlar elde edilir:

ParametreNe yapar?
-cDosyayı temizleyip yazar
-dNN numaralı satırı siler
-iNN numaralı satıra ekler
-lNN numaralı satırı değiştirir
-aDosyanın sonuna ekler (varsayılan davranış)
write -c kayit.txt Yeni baslangic
write -l3 kayit.txt Ucuncu satir degistirildi
write -d2 kayit.txt

Satır numaralı işlemler, küçük dosyalarda pratiktir. Büyük dosyalarda ise her işlem dosyanın taranmasını gerektirdiği için yavaş olabilir.

Dosyadan Okumak: $read

//echo -a $read(kayit.txt,1)
//echo -a $read(kayit.txt)
//echo -a $lines(kayit.txt)

Satır numarası verirseniz o satırı, vermezseniz rastgele bir satırı döndürür. Rastgele satır okuma, cevap havuzları ve rastgele mesaj gönderen scriptler için kullanışlıdır.

$read ayrıca arama da yapabilir: Parametrelerle belirli bir metinle başlayan veya eşleşen satırı bulabilirsiniz. Bu, küçük veri dosyalarında arama yapmanın basit yoludur.

Önemli güvenlik notu: $read identifier'ı, okuduğu satırdaki identifier'ları ve değişkenleri değerlendirebilir. Bu, kullanıcıların yazdığı içeriği bir dosyaya kaydedip sonra $read ile okuduğunuzda ciddi bir güvenlik sorununa yol açar: Dosyadaki metin kod olarak çalıştırılabilir. Bu riski önlemek için okuma sırasında değerlendirmeyi kapatan parametreyi kullanmanız gerekir. Güvenlik konusunda ayrıntılar mIRC script güvenliği yazımızda.

Dosya Varlığı ve Bilgileri

if ($isfile(kayit.txt)) { ... }
if ($isdir(veriler)) { ... }
//echo -a Boyut: $file(kayit.txt).size
//echo -a Degistirme: $asctime($file(kayit.txt).mtime)

Bir dosyayı okumadan önce varlığını kontrol etmek, hata mesajlarından kaçınmanın en basit yoludur. $lines var olmayan bir dosyada sıfır döndürür, ancak $read hata üretebilir.

Dosya Yönetimi

remove kayit.txt
rename eski.txt yeni.txt
copy kaynak.txt hedef.txt
mkdir veriler
rmdir veriler

Bu komutlar dosya sistemi işlemleri yapar. remove komutu geri alınamaz; bir dosyayı silmeden önce gerçekten silmek istediğinizden emin olun. Scriptinizin kullanıcı girdisine dayalı olarak dosya silmesine izin vermek çok tehlikelidir.

Akış İşlemleri: fopen ve fwrite

Büyük dosyalarla çalışırken her satır için dosyayı açıp kapatmak verimsizdir. Akış komutları, dosyayı bir kez açıp birçok işlem yapmanızı sağlar:

alias kayit_yaz {
  .fopen -o kayit kayit.txt
  var %i = 1
  while (%i <= $nick($chan,0)) {
    .fwrite kayit $nick($chan,%i)
    inc %i
  }
  .fclose kayit
}
KomutNe yapar?
fopenDosyayı açar (okuma veya yazma modunda)
fwriteAçık dosyaya yazar
fseekDosya içinde konum değiştirir
fcloseDosyayı kapatır
$freadAçık dosyadan okur
$feofDosya sonuna gelindi mi
$fopen().errHata durumu

Akış işlemlerinde en önemli kural, dosyayı mutlaka kapatmaktır. Açık kalan bir dosya hem kaynak tutar hem de başka işlemlerin o dosyaya erişmesini engelleyebilir. Bir hata durumunda da kapatma yapılacağından emin olun.

Büyük Dosyaları Okumak

Bir dosyanın bütün satırlarını işlemek gerektiğinde iki yöntem vardır. Satır numaralı okuma basittir ama her çağrıda dosya taranır; binlerce satırlı bir dosyada bu çok yavaştır. Akış tabanlı okuma ise dosyayı bir kez açıp sırayla ilerler ve çok daha hızlıdır.

Pratik bir kural: Birkaç yüz satıra kadar satır numaralı okuma yeterlidir; daha büyük dosyalarda akış kullanın. Çok büyük dosyaları işlerken mIRC'in donmasını önlemek için işlemi zamanlayıcıyla parçalara bölmek gerekebilir; bkz. mIRC timer.

Dosya Yolları ve Taşınabilirlik

Dosya yollarını yazarken scriptinizin başka bilgisayarlarda da çalışmasını düşünün:

var %dosya = $scriptdirveriler\kayit.txt
var %dosya2 = $mircdirlogs\kanal.log

$scriptdir ve $mircdir identifier'ları sonunda ters eğik çizgiyle gelir, bu yüzden doğrudan dosya adı eklenebilir. Sabit yollar yazmak, scriptinizi paylaşılamaz hâle getirir.

Kendi veri klasörünüzü oluşturmak da iyi bir uygulamadır: Scriptinizin dosyaları mIRC klasöründe dağınık durmaz, kullanıcı hangi dosyaların sizin scriptinize ait olduğunu bilir ve scripti kaldırmak istediğinde temizlemesi kolay olur.

Güvenlik Önlemleri

Dosya işlemleri, scriptlerin en riskli alanıdır. Birkaç temel kural:

  1. Kullanıcı girdisini dosya yoluna koymayın. Bir kullanıcının yazdığı metni dosya adı olarak kullanmak, sistemdeki başka dosyalara erişilmesine yol açabilir.
  2. $read'de değerlendirmeyi kapatın. Kullanıcı içeriği barındıran dosyaları okurken bu zorunludur.
  3. Silme işlemlerini sınırlayın. Scriptinizin yalnızca kendi dosyalarını silmesine izin verin.
  4. Yazma yetkisini kontrol edin. Sistem klasörlerine yazmaya çalışmayın.
  5. Dosya boyutunu izleyin. Sürekli büyüyen log dosyaları diski doldurabilir; düzenli temizlik veya boyut sınırı ekleyin.

Log Dosyası Yönetimi

Script yazarken en sık yapılan dosya işlemi log tutmaktır. İyi bir log sistemi için:

  • Tarih bazlı dosyalar: Her gün veya her ay için ayrı dosya kullanmak, dosyaların aşırı büyümesini önler ve arama yapmayı kolaylaştırır.
  • Zaman damgası: Her satırın başına tarih ve saat yazmak, kayıtları sonradan incelerken vazgeçilmezdir.
  • Boyut sınırı: Belirli bir boyutu aşan dosyayı arşivleyip yeni dosya başlatmak.
  • Temizlik: Belirli bir süreden eski dosyaları silmek.
  • Gizlilik: Kanal sohbetlerini kaydediyorsanız bu verilerin kişisel olduğunu unutmayın; gereğinden uzun saklamayın.

Gerçek Bir Senaryo

Bir kullanıcı, kanalındaki bütün mesajları tek bir dosyaya kaydeden bir script yazıyor. Altı ay sonra dosya yüz megabaytı geçiyor; dosyada arama yapmak imkânsız hâle geliyor ve script her mesajda dosyayı açıp kapattığı için mIRC yavaşlıyor. Kullanıcı sistemi yeniden tasarlıyor: Her gün için ayrı dosya oluşturuyor, dosya adında tarihi kullanıyor, akış komutlarıyla dosyayı açık tutuyor ve otuz günden eski dosyaları otomatik siliyor. Hem performans düzeliyor hem de belirli bir güne ait kayıtları bulmak saniyeler sürüyor.

Dosya Biçimi Seçmek

Bir veriyi dosyada saklayacağınızda hangi biçimi kullanacağınıza karar vermeniz gerekir. Satır satır büyüyen kayıtlar, örneğin loglar veya basit listeler, düz metin dosyası için idealdir. Her satırda birden fazla bilgi tutmanız gerekiyorsa bir ayırıcıyla birleştirmek ve okurken token identifier'larıyla ayırmak pratik bir çözümdür. Bölümlere ayrılmış yapılandırma verileri için ini biçimi daha uygundur.

Biçim seçerken dosyayı kimin okuyacağını da düşünün. Yalnızca scriptiniz okuyacaksa biçim tamamen size kalmıştır. Kullanıcı da inceleyecekse okunabilirlik önemlidir: Zaman damgaları anlaşılır biçimde yazılmalı, alanlar hizalı durmalı ve dosyanın başına kısa bir açıklama eklenmelidir.

Sonuç

Dosya işlemleri, scriptlerinize kalıcı hafıza kazandırır. Basit işler için write ve $read, büyük dosyalar için akış komutlarını kullanın, dosya varlığını kontrol edin, yolları taşınabilir yazın ve güvenlik kurallarına özellikle dikkat edin. Zamanlanmış işler için sıradaki rehberimiz mIRC timer.

IRC sorunun mu var? Kanalda birlikte çözelim.

💬 Kanala Bağlan

Sıkça Sorulan Sorular

Dosyaya satır eklemek için hangi komut kullanılır?

write komutu dosyanın sonuna satır ekler. Belirli bir satırı değiştirmek için satır numarası parametresi kullanılır.

Büyük dosyaları nasıl okumalıyım?

Satır satır okumak için akış komutlarını veya satır numaralı okuma kullanın; dosyanın tamamını belleğe almaktan kaçının.

Dosya yolu yazarken neye dikkat etmeliyim?

Sabit yollar yerine mircdir veya scriptdir identifier'larını kullanın; kullanıcı girdisini dosya yoluna doğrudan eklemeyin.