DOSYALAR Visual Basic de Sıralı ve Rasgele olmak üzere iki tür dosya vardır. Dosyalar en basit ifadesi ile verileri disk üzerinden (hard disk, disket vs.) işlemek amacıyla kullanılırlar ve bu yönü ile diğer veri saklama ve işleme yöntemlerinden ayrılırlar. Herhangibir veriyi VB de kullanmak için birkaç yol vardır; ya ilgili veri bir değişkene eşitlenir (a=5 veya b= Mehmet gibi) ki bu durumda ilgili değişkenin değerini değiştirmek için sözkonusu satıra programcının bizzat müdahalesi gerekir veya ilgili veri dizi değişkenlerine aktarılır (t(2)=13 veya gh= Ders gibi). Verinin dizi değişkenlerine aktarılması durumunda değişken değerleri geçici hafızaya kaydedileceğinden programdan çıkıldığında sözkonusu veriler yok olacaktır. Bu nedenle dosyalar; verileri saklamak, oluşturulmuş olan dosyaya ilaveler yapmak ve yanlış verileri düzeltmek konusunda yukarıda anlatılan yöntemlere göre çok avantajlıdır. Sıralı dosyalarda herbir kayıt, adından da anlaşılacağı gibi, disk üzerine birbiri ardında sıralı olarak kaydedilmektedir. Sözkonusu kayıtlara ancak mevcut kayıtlar sırasıyla okunmak suretiyle erişilebilmektedir. O halde, belirli bir kaydı bulabilmek için ondan öncekilerin tümünü okumak gerekmektedir. Rasgele dosyalar, sıralı dosyalardan farklı bir yapıya sahiptir. Belirli bir kayıta, kayıt numarasını vermek suretiyle doğrudan doğruya erişilebilir. Bir dosyanın içindeki tüm kayıtların işlem görmesi gerekiyorsa, dosyanın sıralı olarak oluşturulması, buna karşın sadece belirli kayıtlara erişim sözkonusu ise rasgele olarak oluşturulması daha uygun olacaktır. Sıralı dosyalar programcılık açısından daha kolaydır, buna karşın işlem zamanı açısından bilgisayara vakit kaybettirirler. Rasgele dosyalar programcılık açısından sıralı dosyalara göre daha zor ama veri üzerindeki işlemlerin çabukluğu açısından avantajlıdır. SIRALI DOSYALAR Dosyanın Açılması Sıralı bir dosyayı açmak için FileOpen komutundan faydalanılır. Bu komutun genel kullanılış biçimi aşağıdaki gibidir: FileOpen (Dosya numarası, Dosya ismi, Dosyanın açılış biçimi) Dosya numarası 1 ile 255 (1 ve 255 dahildir) arasında bir tamsayı olmalıdır. Dosya ismi, herhangi bir program ismi gibidir ve ona benzer (dosya ismi mutlaka olur, uzantı olmayabilir). Dosya ismi, yol ismi verilerek tanımlanabileceği gibi, yol ismi verilmeden de tanımlanabilir. Dosya için yol ismi tanımlanmazsa, söz konusu dosyanın debug işlemleri için ayrılan klasörüne yazılır (bu yol tanımı istenirse kullanıcı tarafından başka bir klasör olarak belirtilebilir) ve yine bu konumdan okunur. Bu klasöre şu şekilde ulaşılır; Ekranın sağ tarafında bulunan Solution Explorer penceresindeki, üzerinde çalışılan proje ismine sağ tıklayıp açılan menü den properties seçilir, Açılan pencereden, soldaki Debug sekmesine tıklanır, Gültekin Çağıl, Bilgisayar Programlama ders notları, Sakarya Üniv. Endüstri Mühendisliği/Hafta 13/Sayfa1
Debug sekmesindeki Working directory bu tür dosyaların yol ismi verilmezse saklandığı ve okunduğu klasördür, istenirse bu klasör değiştirilerek yol ismi verilmeyen dosyaların yazılacağı klasör yolu değiştirilebilir. Dosya ismi yol ismi verilerek tanımlanırsa, dosyanın ilgili yola göre ilgili klasörde olduğu varsayılır. Sıralı bir dosya üç değişik şekilde açılabilir 1. OpenMode.Output: Bu açılış şekli, dosyayı ilk defa oluşturmak ve ilk bilgileri dosyaya aktarmak amacıyla kullanılır. İlk defa oluşturulan ve içine ilk bilgilerin girildiği dosya aynı isimde tekrar Output şeklinde açılırsa, dosyanın içindeki bilgilerin tamamı yok olur. 2. OpenMode.Append: Bu açılış şekli, daha önce oluşturulmuş olan dosyaya ilave bilgilerin aktarılması amacıyla kullanılır. 3. OpenMode.Input: Bu açılış şekli, dosyanın içindeki bilgilerin değişkenlere aktarılması (okunması) amacıyla kullanılır. FileOpen(157, "Personel", OpenMode.Output) Personel isimli ve 157 numaralı dosya, içine ilk defa bilgi girilmek üzere açılmaktadır. Personel isimli dosya, yukarıda anlatıldığı şekilde Working directory klasöründe bilgisayar tarafından oluşturulacaktır (açılacaktır). FileOpen(3, "c:\abc\bilgi.txt", OpenMode.Append) Bilgi.txt isimli dosya, hard diskin (C de) abc isimli klasöründe, içine ilave bilgiler yazılmak üzere açılmaktadır OpenMode.Append açılış şekli iki şekilde kullanılabilir; 1- Bilgi.txt isimli dosya daha önce oluşturulmamışsa, bu satır ile bu dosya oluşturulur (OpenMode.Output gibi kullanılabilir), 2- Bilgi.txt isimli dosya daha önce oluşturulmuş ise, bu satır ile dosyanın içindeki verilere ilave veriler oluşturulmak üzere açılır (OpenMode.Append). FileOpen(2, "deneme", OpenMode.Input) Deneme isimli dosya, içindeki bilgilerin okunması amacıyla açılmaktadır. Deneme isimli dosyanın önünde yol ismi verilmediğinden, yukarıda anlatıldığı şekilde Working directory klasöründe aranacaktır. Gültekin Çağıl, Bilgisayar Programlama ders notları, Sakarya Üniv. Endüstri Mühendisliği/Hafta 13/Sayfa2
Açılmış Olan Dosyanın Kapatılması Yukarıda anlatılan üç değişik şekilden herhangibirisiyle açılan bir dosya FileClose () komutu kullanılarak kapatılır. Genel Kullanılışı: FileClose (Dosya Numarası1, Dosya Numarası2, Dosya Numarası3,...) FileClose () komutu, bu şekilde dosya numarası vermeden kendi başına da kullanılabilir. Bu durumda açık olan tüm dosyalar kapatılır. FileClose (1) FileClose (5,7,8) FileClose () 1 numaralı dosyayı kapat 5,7 ve 8 numaralı dosyaları kapat Açık olan bütün dosyaları kapat Sıralı Dosyaya Yazma İşlemi Bu işlem için kullanılan komutlardan ikisi Write (), WriteLine () komutlarıdır. Write (dosya numarası, değişken1, değişken2, ) WriteLine (dosya numarası, değişken1, değişken2, ) Her iki komutun da kullanım şekli aynıdır, fakat iki komutun sonuçları farklıdır. Write komutu, dosyaya yazılacak ifade veya hafızadaki değişkenlerin karşılıklarını ayrı satırlara değilde, peşpeşe yazar. Buna karşın WriteLine komutu, dosyaya yazılacak ifade veya hafızadaki değişkenlerin karşılıklarını ayrı satırlara yazar. Bundan dolayı WriteLine komutu, Write komutuna gore okunabilirlik ve programlanabilirlik açısından daha kullanışlıdır ve daha çok tercih edilmektedir. Aşağıda aynı programın Write ve WriteLine komutları ile yazılmış halini ve sonuçta verilerin yazıldığı dosyanın içeriği görülmektedir. Program; 1 den 4 e kadar olan sayıların ve SAU ifadesinin, deneme isimli dosyaya yazdırılması ile ilgilidir. Private Sub Form1_Load() Dim h As Byte FileOpen(7,"c:\deneme",OpenMode.Output) For h = 1 To 4 Write(7, h, "SAU") Next FileClose() End Sub Private Sub Form1_Load() Dim h As Byte FileOpen(7,"c:\deneme",OpenMode.Output) For h = 1 To 4 WriteLine(7, h, "SAU") Next FileClose() End Sub Deneme isimli dosyanın içeriği 1,"SAU",2,"SAU",3,"SAU",4,"SAU", Deneme isimli dosyanın içeriği 1,"SAU" 2,"SAU" 3,"SAU" 4,"SAU" Gültekin Çağıl, Bilgisayar Programlama ders notları, Sakarya Üniv. Endüstri Mühendisliği/Hafta 13/Sayfa3
Write (8, a,isim,yas) 8 numaralı dosyaya sırasıyla; a değişkeninin, isim değişkeninin ve yas değişkeninin hafızadaki karşılıkları yan yana yazdırılıyor. WriteLine (34, "Sakarya",56.2,u) 34 numaralı dosyaya sırasıyla; Sakarya ifadesi, 56.2 sayısı ve u değişkeninin hafızadaki karşılığı, ayrı satırlarda yazdırılıyor. Write/WriteLine komutunda kullanılan dosya numarası, FileOpen komut satırında kullanılan dosya numarası ile aynı olmalıdır. Sıralı Dosyadan Okuma İşlemi Bu işlem Input () komutu ile gerçekleştirilir. Input (dosya numarası, değişken) Input (34, isim) 34 numaralı dosyadan, sıradaki değer (veya ifade) okunup, hafızada isim değişkeninin karşılığı olarak atanır. Input (7, nt) 7 numaralı dosyadan, sıradaki değer veya (muhtemelen) sayı okunup, hafızada nt değişkeninin karşılığı olarak atanır. Input komutu, sadece ilgili dosyadan bir adet değişken okur. Input (5,a,b) örneğinde olduğu gibi aynı anda hem a ve hem de b değişkenini okuyamaz, böyle durumda hata mesajı ile karşılaşılır. Örnek olarak gösterilen bu satırın herbir değişken için ayrı ayrı ve şu şekilde kullanılması gerekir: Input (5,a) Input (5,b) Input komutunda kullanılan dosya numarası, FileOpen komut satırında kullanılan dosya numarası ile aynı olmalıdır. Gültekin Çağıl, Bilgisayar Programlama ders notları, Sakarya Üniv. Endüstri Mühendisliği/Hafta 13/Sayfa4
Dosya - Dizin İsimlerinin/Uzantılarının Değiştirilmesi Bunun için Rename() komutundan faydalanılır. Bu komutun genel kullanılışı aşağıdaki gibidir; Rename (dosyanın eski ismi, dosyanın yeni ismi) Rename ("Hedef.txt", "Personel.txt") Hedef.txt isimli dosya ismi Personel.txt olarak değiştiriliyor. Rename ("Ders.gty","Kurs.hue") Ders.gty dosya ismi Kurs.hue şeklinde değiştiriliyor. Dosyaların Silinmesi Bu işlem Kill() komutu ile gerçekleştirilir. Bu komutun genel kullanılışı aşağıdaki gibidir; Kill ("Silinecek Dosya İsmi") Kill ("deneme") deneme isimli dosya silinmek isteniyor Kill ("c:\gate\maden.kes") Hard diskin gate klasöründeki maden.kes isimli dosya silinmek isteniyor. Kill ("d:\*.txt") D nin ana bölgesindeki, uzantısı txt olan bütün dosyalar silinmek isteniyor. Kill komutu ile silinmek istenen dosyanın öncelikle Fileclose() komutu ile kapatılması gerekir, aksi halde bilgisayar açık olan dosyanın kapatılması isteği karşısında hata hesajı verir ve programı çalıştırmaz. Gültekin Çağıl, Bilgisayar Programlama ders notları, Sakarya Üniv. Endüstri Mühendisliği/Hafta 13/Sayfa5
Kayıt sonuna gelinip gelinmediğinin kontrol ettirilmesi Dosyadan bilgi okuma sırasında gerekli olan komutlardan birisi de, okuma işlemi için açılmış olan dosyadaki kayıtların sonuna gelinip gelinmediğini kontrol amacıyla kullanılan EOF () (End Of File Dosya Sonu) komutudur. Bu komut özellikle içindeki bilgilerin okunacağı dosyada kaç adet kayıt olduğunun bilinmediği durumlarda ve her kayıt okunmadan önce kayıt sonuna gelinip gelinmediğinin kontrol ettirilmesi amacıyla kullanılır. Böylece bilgisayar olmayan bir kaydı okuma işlemine girişmemiş olacaktır (böyle bir durum programın hata mesajı vermesine ve dolayısıyla kesilmesine neden olur). EOF() komutunun genel kullanılış biçimi aşağıdaki gibidir: EOF (dosya numarası) EOF komutu dosya sonunda True (doğru) aksi halde (bu durumda okunacak başka kayıt var demektir) False (yanlış) sonucunu verir. Gültekin Çağıl, Bilgisayar Programlama ders notları, Sakarya Üniv. Endüstri Mühendisliği/Hafta 13/Sayfa6