chat eczaonline.com yazılım uzmanı

Ders: File Handling

L4roXyL

Profesyonel
Katılım
16 Eki 2011
Mesajlar
124
Beğeniler
2
#1
Ders: File handling - Dosya işleme
Tarih: 27 Haziran 2009 Cumartesi
Yazan: L4roXyL - (Hasan AYDENİZ)

-

File handling konusu mIRC-nin 6.1 sürümünden beri mIRC içerisinde bulunan bir konudur.
File handling kısaca belirtilen dosyayı, belirtilen şekillerde işlemenize/okutmanıza vb. işlemler yapmanıza olanak sağlar.
mIRC Scripting-de fazla kullanıldığını görmemişsinizdir. Lakin bu konuyuda bilmenizde fayda olduğunu düşünüyorum.
Örneğin; bazı addon-larda veya scriptlerde dil seçenekleri/dil-den dile geçiş file handling ile yapılır.
Neyse daha fazla uzatmadan file handling kullanımına geçiyorum.

-

File handling komutları

1- /fopen [-no] <name> <filename>
Bu komut, belirlediğiniz dosyayı<filename> belirlediğiniz isim<name> üzerine açmaya yarar.

Örnek: /fopen deneme deneme.txt
Açıklaması: deneme ismindeki özel isim üzerine deneme.txt açtık.
Aldığımız mesaj: * fopen opened 'deneme' (dosyayolu\deneme.txt)
Parametre bilgileri:
-n: Bu parametre belirtilen isim henüz oluşturulmadıysa, dosyayı belirtilen isme fail(yapılamadı) şeklinde oluşturur.
-o: Bu parametre belirtilen dosyayı yeniden oluşturur(belirtilen dosyadaki tüm veriler silinir)


2- /fclose <name | wildcard>
Bu komut, belirtilen isim eğer mevcut ise, kapatır.

Örnek: /fclose deneme
Açıklaması: deneme ismindeki veri kapatılır.
Örnek: /fclose deneme*
Açıklaması: "deneme" ile başlayan tüm veriler kapatılır.


3- /flist [name | wildcard]
Bu komut, açık olan isimleri ve isme ait dosyaları listelemek için kullanılır.

Örnek: /flist
Açıklaması: Açık olan tüm veriler listelenir.
Örnek: /flist d*
Açıklaması: "d" ile başlayan tüm veriler listelenir.


4- /fseek <name> <position>
Bu komut biraz karmaşıktır. O yüzden size detaylı açıklacağım.
Komutu anlamak için, ilk önce mantığı anlamanız gerekiyor. İlk olarak, "seek" kelimesinin türkçe karşılığı "araştırmak" demektir.
Bu komut ile belirtilen <pozisyonu> araştıralacak daha doğrusu işlev görülecek(okutulacak/yazılacak) pozisyon olarak kaydediyoruz.

Örnek: /fseek deneme 1
Açıklaması: İşlev görülecek pozisyon "1"(başlangıc) olarak belirlendi.
Aldığımız uyarı: * fseek set 'ok' deneme position 1
-
Ek parametreler:
-l <name> <line number>: Bu parametre ile işlev görülecek(okutulacak/yazılacak) olan satırı belirliyoruz.
Örnek: /fseek -l deneme 1
Açıklaması: İşlev görülecek(okutulacak/yazılacak) olan satır 1. satır olarak belirlendi.
Aldığımız uyarı: * fseek set 'deneme' to line 1

-n <name>: Bu parametre ile işlev görülecek(okutulacak/yazılacak) olan satırı bir sonraki satır(next line) olarak belirliyoruz.
Örnek: /fseek -n deneme
Açıklaması: İşlev görülecek(okutulacak/yazılacak) olan satır son belirtilen satırdan bir sonraki satır olarak belirlendi.
Not: Daha önce satır belirtilmediyse, 1. satır olarak belirlenir. Ve her uygulamada işlev görülecek(okutulacak/yazılacak) olan satırı, bir sonraki satır olarak belirler.
Aldığımız uyarı: * fseek set 'deneme' to next line

-w <name> <wildcard>: Bu parametre işlev görülecek(okutulacak/yazılacak) olan satırı belirlediğimiz wildcard(*|?)lı kelime ile belirlememize yarar. Yani belirlediğimiz wildcard-lı kelime hangi satırdaysa, işlev görülecek satır olarak kaydedilir.
Örnek: /fseek -w deneme *d*
Açıklaması: İşlev görülecek(okutulacak/yazılacak) olan satır, içerisinde "d" harfi geçen satır olarak belirlendi.
Aldığımız uyarı: * fseek set 'deneme' to next line matching wildcard '*d*'
Not: Eğer belirtilen karakter yoksa, * fseek failed on 'deneme' uyarısını alırız. Yani işlev görülecek(okutulacak/yazılacak) olan satır belirtilemez ve SIFIRLANIR.

-r <name> <regex>: Bu parametre işlev görülecek(okutulacak/yazılacak) olan satırı belirlediğimiz regex(regular expression)lı kelime ile belirlememize yarar.
Örnek: /fseek -r deneme ^a
Açıklaması: İşlev görülecek(okutulacak/yazılacak) olan satır, "a" karakteri ile BAŞLAYAN satır olarak belirlendi.
Aldığımız uyarı: * fseek set 'deneme' to next line matching regex '^a'


5- /fwrite [-bn] <name> <text | &binvar>
Bu komut, belirtilen ismin<name> üzerine açılmış olan dosyaya text/metin veya &binvar(binary variable) yazdırmaya yarar.
Yazdıracağınız satırı yukarıdaki /fseek komutu ile belirlersiniz. Yani /fseek komutu ile herhangi bir işlev görülecek(okutulacak/yazılacak) satır olarak belirttiyseniz, veri o satıra ve (eğer belirttiyseniz) pozisyona yazdıralacaktır.

Örnek: /fwrite deneme Bu bir denemedir.
Açıklaması: Eğer /fseek komutu ile bir satır ve pozisyon belirttiyseniz, o satıra ve pozisyona "Bu bir denemedir" cümlesi yazdırılır.
Not: Eğer /fseek komutu ile satır veya pozisyon belirlemediyseniz, "Bu bir denemedir." cümlesi 1. satırın 1.(başlangıc) pozisyonuna yazdırılır.
-
Örnek: //fseek -l deneme 5 | fwrite deneme DENEME!
Açıklaması: /fseek komutu ile işlev görülecek olan satırı 5. satır olarak belirliyoruz. Ve 5. satıra "DENEME!" kelimesini yazdırıyoruz.
-
Parametre bilgileri:
-n: Bu parametreyi kullandığınız zaman, veriyi son belirtilen satıra yazdırırsınız. Ve ondan sonraki her uygulamada(-n kullanarak) bir alt satıra yazdırılır veri.
-b: Bu parametre ile, dosyaya belirtilen &binvar(binary variable) yazdırırsınız.
Örnek: //bread ok.txt 0 $lof(deneme.txt) &ok | fwrite -b deneme &ok
Açıklaması: /bread komutu ile deneme.txt dosyasındaki tüm verileri &ok variable-ına atıyoruz. Ve deneme ismine atanan(deneme.txt) dosyasının içerisine &ok variable-ını yazdırıyoruz.
Aldığımız uyarı: * fwrite wrote 246 bytes to 'deneme'
-
/fwrite hakkında bazı bilgiler.
1- Eğer /fseek komutu ile herhangi bir satır belirtilmediyse, veri "-n" parametresi kullanılmadığı sürece her zaman ilk satıra yazdıracaktır.
2- Eğer "-n" parametresi kullanılırsa veri her zaman söz konusu olan satırın bir alt satırına yazdırılacaktır.

-

File handling komutları bu kadardır.
-
File handling konusuna ait 6 adet identifier/tanımımız mevcuttur. Bu tanımlar ile açtığımız dosya hakkında bilgiler, açılan dosyanın satırları vb. bilgilerini okuyabiliyoruz.
Şimdi size bu identifier-ları anlatacağım.

-

File handling identifiers(tanımları)

1- $fopen(name | N) - Prop: fname, pos, eof, err
Bu identifier belirtilen isim hakkında bazı bilgiler verir.
Şöyleki;

1- //echo -: $fopen(0)
Açıklaması: Toplam kaç adet dosyanın açılmış/oluşturulmuş olduğunu gösterir.
-
2- //echo -: $fopen(1)
Açıklaması: Birinci sıradaki açılmış olan ismi(<name>) verir.
-
3- //echo -: $fopen(deneme).pos (pos = position/pozisyon)
Açıklaması: Deneme ismine ait son kalınan pozisyonu verir.
Ek açıklama: /fseek <name> <position> komutu bildiğiniz gibi, belirlenen işlemler için pozisyon belirlememize yarıyordu. İşte bu pozisyon bilgisini ".pos" özelliği ile alıyoruz.
Örnek: //fseek deneme 100 | echo -: $fopen(deneme).pos => 100
-
4- //echo -: $fopen(deneme).fname (fname = file name/dosya adı)
Açıklaması: Belirtilen deneme ismine ait dosyayı verir.
Ek açıklama: Yani denem ismine ahngi dosyayı açtıysak o dosyanın ismini dosya yolu ile beraber verecektir.
-
5- //echo -: $fopen(deneme).err (err = error/hata)
Açıklaması: Belirtilen deneme ismine belirtilen dosya "-n" parametresi ile işlenmişse bu kullanımın cevabı "1" olarak döner.
Örneğin: /fopen -n deneme deneme.txt
Yaptığımızda, "* fopen unable to create 'deneme' (dosya-yolu\deneme.txt)" cevabını alıyorduk. Bunu zaten yukarıda açıklamıştım.
Yani dosya yükleniyordu fakat herhangi bir işlev yapamıyoruz. Yani hatalı olarak dosyayı yükletiyoruz.
-
6- //echo -: $fopen(deneme).eof
Açıklaması: Eğer işlev görülen satır son satırı geçmişse, yani dosyanın sonuysa bu kullanımın cevabı "1" olarak dönecektir.
Örneğin: Deneme.txt dosyası 10 satır ve biz /fseek -l deneme 11 yaptığımızda zaten; "* fseek failed on 'deneme'" cevabını ilk başta alıyoruz.
Yani 11. satır olmadığı için, "başarılamadı" yanıtını alıyoruz. Ve işlev görülecek satır dosya sonu/son satır konumuna geçiyor otomatik olarak.
İşte bu şekilde olduğu zaman, bu kullanım "1" olarak döner. Yani dosya sonuna geldiğimizi belirtir. Aynı şey okutma işlemindede geçerlidir. Okutma işlemi identifier/tanım ile oluyor, onu az sonra açıklayacağım.


2- $fread(name | N)
Bu identifier/tanım, belirtilen isim-deki satırları sırayla teker teker okutmamıza yarar.

Örneğin:
Komutu ile deneme.txt dosyasının 1. satırına A, 2. satırına B, 3. satırına C yazdırdık. Ve deneme ismine herhangi bir file yüklenmemişse, deneme ismine deneme.txt dosyasını yükletiyoruz.
Ve şimdi: //echo -: $fopen(deneme) yaptığımızda, deneme.txt dosyasının ilk satırını okutacaktır. 2. defa yaptığımızda 2. satırını okutacaktır. 3. kez yaptığımızda 3. satırını okutacaktır.
Ve 3. satırı okuttuktan sonra bir kez daha uygularsak, dosyadaki satıların sonuna geldiğimiz için herhangi bir veri okutmaz. Ve yukarıda belirttiğim gibi "$fopen(deneme).eof" tanımı "1" olarak dönecektir.
Şimdi, eğer satır belirtirsek; /fseek -l deneme 2 (işlev görülecek satırı 2. satır olarak belirledik) ve tekrardan; //echo -: $fread(deneme) yaptığımızda, 2. satırı okuturuz. Tekrar yaptığımızda yine 3-4-5(varsa) okuturuz.
Mantığı gayet basit yani. File handling-de aslında herşey /fseek komutunda bitiyor.


3- $fread(name | N, M, &binvar)
Bu identifier/tanım, dosya içerisine yazdırılan &binary variable-ının belirtilen M(byte) miktarını okutmanıza yarar.

Örnek: //bread deneme.txt 0 $lof(deneme.txt) &d | fwrite -b deneme &d | echo -a $fread(deneme,5,&d)
Açıklaması: deneme.txt dosyasını &d variable-na okutuyoruz. Sonra &d variable-ını deneme ismine yazdırıyoruz(deneme.txt içerisine) ve son son olarak daha önce yazdırılan &d variable-ının 5 byte-lık verisini okutuyoruz.


4- $fgetc(name | N)
Bu identifier/tanım okutulan pozisyonun ascc-kod numarasını verir.

Şöyleki; deneme.txt dosyasının 1. satırında ABCDEFGH verisi var diyelim
Ve biz; /fseek -l deneme 1 komutuysa işlev görülecek satırı 1. satır olarak belirledik.
Devamında; //echo -: $fgetc(deneme) yaptığımızda, 1. satırdaki 1. pozisyonunda olan karakterin ascii-kodunu verir.
2. kez uyguladığımızda, 2. pozisyonda olan, 3. kezde 3. pozisyonda karakterlerin (vs vs.) ascii-kodlarını verecektir.
Eğer pozisyon belirtirsek, belirttiğimiz pozisyondaki karakterin ascii-kodunu verecektir.
Örnek: /fseek deneme 3 komutu ile pozisyonu 3 olarak belirledik. 3. pozisyon "D" harfine denk gelmektedir. (A/0 B/1 C/2 vs.)
Ve devamında; //echo -a $fgetc(deneme) yaptığımızda "68" cevabını alırız. 68 D harfinin ascii-kodudur. ($asc(A))
Tekrar uyguladığımızda, 69(E) cevabını alırız. Ve sırayla satır sonuna kadar gider bu şekilde. Veri bulamadığı taktirde zaten işlev sona erer.


5- $feof - $ferr
Bu identifiers/tanımlar $fopen(<name>|<N>).err - $fopen(<name>|<N>).eof tanımları ile aynı işlevi görür.

Zaten bunları yukarıdaki açıklamıştım. Ama yinede kısaca bahsedeyim
//echo -: $ferr yaptığınızda "1" sonucu alırsanız, dosyayı "-n" parametresi(başarılamadı) formatında yükletmişsinizdir demektir.
//echo -: $feof yaptığınızda "1" sonucu alırsanız, dosyadaki işlev sona ermiş demektir. (Bakınız: Eof = END OF FILE/DOSYA SONU)
Eğer yaptığınız işlemlerde "0" cevabını alırsanız ters manaya gelir. Bu kadar basit.

-

File handling hakkında anlatacaklarımın tamamı bu kadardır. Size basit bir örnek vereceğim, e artık gerisi size kalmış.
Örneğin; Deneme.txt içerisinde "a" harfi ile başlayan satırları okutalım.

Kod:
;alias ismi deneme - /deneme
alias deneme {
  ;burada diyoruzki eğer deneme isminde bir isim yoksa(açılmamışsa) deneme.txt dosyasını deneme ismini işle/aç.
  $iif(!$fopen(deneme),.fopen deneme deneme.txt)
  ;burada /while ile deneme isminin işlev görülecek satırı dosya sonuna gelene kadar;
  while (!$fopen(deneme).eof) {
    ;deneme isminde "a" harfi ile başlayan satırı işlev görülecek olan satır olarak belirle
    .fseek -r deneme ^a 
    ;ve bu satırları sırasıyla okut
    echo -: $fread(deneme)
  }
  ;tüm işlemler sonunda deneme ismini kapat
  .fclose deneme
}
-

File handling hakkında önemli açıklamar:

1- Açtığınız ismi/dosyayı işiniz bitince kesinlikle kapatınız. Aksi taktirde dosya isme yüklenmiş ve açık biçimdeyken dosyaya dışarıdan işlev yapamazsınız.
2- mIRC Scripting hakkında orta halli bilgiye sahip değilseniz file handling konusu ile haşır neşir olmanız tavsiye edilmez.
3- Verdiğim tüm örneklerde sadece ".txt" uzantılı dosyalar ile işlev yaptım. Bu demek değildirki sadece .txt uzantılı dosyaları işleyebiliyorsunuz. Her şekilde dosyayı işleyebilirsiniz.(.bmp, .png, .asr, .ebs vs.) .)

-

Dersimiz sona ermiştir. Yapacaklarınız ve/ya yapmak istedikleriniz size ve hayal gücünüze kalmış.
Kolay gelsin.
 

Bu konuyu okuyanlar (Üyeler: 1, Misafirler: 0)

Türkiye’nin ilk webmaster forum sitesi iyinet.com'da forum üyeleri tarafından yapılan tüm paylaşımlardan; Türk Ceza Kanunu’nun 20. Maddesinin, 5651 Sayılı Kanununun 4. maddesinin 2. fıkrasına göre, paylaşım yapan üyeler sorumludur. iyinet.com sayfalarında yer alan yazı, görsel ve linklerle ilgili hukuki şikayetleriniz için Buradan iletişime geçmeniz durumunda, ilgili kanunlar ve yönetmelikler çerçevesinde en geç 7 gün içerisinde iyinet yönetimince tarafınıza dönüş sağlanacaktır. Betcup Artemisbet Forum pulibet
Üst