8. VİSUAL BASİC İLE TEMEL DOSYALAMA İŞLEMLERİ Programda bilgilerin kalıcı olarak saklanabilmesi için VB’de dosya oluşturma komutlarından yararlanılmaktadır. Dosyalar yapılan işe göre iki gruba ayrılırlar: 1. Sıralı Erişimli Dosyalar 2. Rasgele Erişimli Dosyalar Visual Basic’de bir dosya 5 farklı biçimde açılabilir: Output Append Input Random Binary
Dosya Açma : (OUTPUT Modu) SIRALI DOSYA ERİŞİMİ Dosya Açma : (OUTPUT Modu) Bir dosyaya bilgi yazmak için kullanılır. Disk üstünde var olmayan bir dosyayı oluşturur. Dosya mevcut ise her çalıştığında mevcut dosyanın üzerine yazar. Open DosyaYolu For Output As #DosyaNo DosyaYolu: Açılacak dosyanın sabit disk üstündeki adresidir. Türü String'dir. DosyaNo: Açılacak dosyaya program içinde erişilirken kullanılan 0-255 arasındaki tam sayıdır. Farklı iki dosya için aynı sayı kullanılamaz Dosyaya bilgi yazmak için Print# veya Write# komutları kullanılır. Print #DosyaNo, Değişken Write #DosyaNo, Değişken
Örnek : Dim a, b, c As String Open "c:\saha\dout1.txt" For Output As #1 a = " Bilgisayar" b = " Programlama" c = " 1. Arasınav" Print #1, a, b, c Close #1 Örnek : Dim a(3) As Integer a(0) = 1: a(1) = 2: a(2) = 3: a(3) = 4 Open "c:\saha\dout2.txt" For Output As #1 For i = 0 To 3 Print #1, a(i) Next i Close #1
Dosya Açma : (APPEND Modu) Var olan bir dosyada önceki verileri korur ve satırların sonuna yeni veri ekler. Open DosyaYolu For Append As #DosyaNo DosyaYolu: Açılacak dosyanın sabit disk üstündeki adresidir. Türü String'dir. DosyaNo: Açılacak dosyaya program içinde erişilirken kullanılan 0-255 arasındaki sayıdır. Farklı iki dosya için aynı sayı kullanılamaz Dosyaya bilgi yazmak için Print# veya Write# komutları kullanılır. Print #DosyaNo, Değişken Write #DosyaNo, Değişken
Örnek : Dim a, b, c As String Open "c:\saha\dout1.txt" For Append As #1 a = " Bilgisayar" b = " Programlama" c = " 2. Arasınav" Print #1, a, b, c Close #1 Örnek : Dim b(1) As Single b(0) = 3.14: b(1) = 6.28 Open "c:\saha\dout2.txt" For Append As #1 For i = 0 To 1 Print #1, Str(b(i)) Next i Close #1
Dosya Açma : (INPUT Modu) Okuma amaçlı dosya açar. Dosyayı okumak için dosyanın disk üstünde var olması gerekir. Yapılan her okuma işleminde yeni okuma için otomatik olarak bir alt satıra konumlanılır. Aksi halde hata oluşur. Open DosyaYolu For Input As #DosyaNo DosyaYolu: Açılacak dosyanın sabit disk üstündeki adresidir. Türü String'dir. DosyaNo: Açılacak dosyaya program içinde erişilirken kullanılan 0-255 arasındaki sayıdır. Farklı iki dosya için aynı sayı kullanılamaz Dosyadan bilgi okumak için Input veya Line Input komutları kullanılır. Input ile formatlı okuma, yani bir satırdaki veriler ayrı ayrı okunabilir. Line Input ile tüm satırdaki veri String olarak okunur. Input # DosyaNo, Değişken Line Input # DosyaNo, Değişken
Örnek : Dim a As String Open "c:\saha\dout1.txt" For Input As #1 Input #1, a Close #1 Form1.AutoRedraw = True Show Print a Örnek : Dim b(1) As Single Open "c:\saha\dout2.txt" For Input As #1 For i = 0 To 1 Input #1, b(i) Print b(i) Next i Close #1
Bu dosya bir matris elemanlarının bilgilerini saklar. Örnek : Dim mesaj As String Dim n As Integer Open "c:\saha\dinp1.txt" For Input As #10 Line Input #10, mesaj Input #10, n ReDim a(n-1), b(n-1) As Single For i = 0 To n-1 Input #10, a(i), b(i) Print Str(a(i)), Str(b(i)) Next i Close #10 Print mesaj Print n dinp1.txt Bu dosya bir matris elemanlarının bilgilerini saklar. 4 1.1, 2.2 3.3, 4.4 5.5, 6.6 7.7, 8.8
Dosya Kontrol Fonksiyonu : EOF(DosyaNo) Dosya okuma işlemlerinde, sıralı dosyalarda dosya sonuna gelinip gelinmediğini anlamak için kullanılır. Dosya sonuna gelindiğinde fonksiyon True değer gönderir. EOF(DosyaNo) Örnek : Open "c:\saha\dout2.txt" For Input As #1 Do Until EOF(1) = True Line Input #1, xc n = n + 1 Loop Close #1 Print n
RASGELE DOSYA ERİŞİMİ Rasgele dosya erişim yöntemini kullanabilmek için öncelikle dosya içinde saklanacak veriler modellenmelidir. Veriler modellendikten sonra herbir veri grubu için bir değişken türü oluşturulmalıdır. Rasgele erişimli dosyanın sıralı erişimli dosyalardan program kodlama açısından en büyük farkı dosyaya yazma ve okuma için tek bir yöntem kullanılmasıdır ve sabit disk üstünde bulunmayan bir dosyayı oluşturmak işlemininde bu yöntem tarafından yapılmasıdır. Rasgele erişimli dosyalarda kayıtların uzunluğu sabit olduğundan dosya içindeki her kaydın byte cinsinden adresi bellidir. Bu yüzden dosya içindeki istenilen kayda ait bilgiler direkt olarak değiştirilebilir. Bu özellik bu yöntemin en önemli özelliğidir. Bu modda her kayıta belirli bir uzunluk verilerek sadece bu uzunluktaki alana yazılması sağlanır, Eksik olan her bir karakter için boşluk atanacaktır.
Open DosyaYolu For Random As #DosyaNo Len=KayıtUzunluğu Rasgele Erişimli dosya kullanma yönteminde dosya açma işlemi aşağıdaki şekilde kullanılır. Open DosyaYolu For Random As #DosyaNo Len=KayıtUzunluğu DosyaYolu: Açılacak dosyanın sabit disk üstündeki adresidir. Türü String'dir. DosyaNo: Türü Integer'dır. Açılacak dosyaya daha sonra program içinde bu dosyayı temsil edecek olan ve başka bir dosya tarafından kullanılmayan bir dosya numarasıdır. KayıtUzunluğu: Türü Integer‘dır. Açılacak olan dosyada kayıtların adreslenmesinde kullanılan üzere her bir kaydın byte cinsinden boyutudur. Dosyaya kayıt eklemek için Put, dosyadan kayıt okumak için Get komutları kullanılır. Put #DosyaNo, KayıtNo, KayıtDeğişkeni Get #DosyaNo, KayıtNo, KayıtDeğişkeni
Örnek : Private Sub Form_Load() Dim a As String * 11 Open "c:\saha\drand1.txt" For Random As #1 Len = 11 a = "Bilgisayar" Put #1, 1, a a = "Programlama" Put #1, 2, a Close #1 End Sub Örnek : Private Sub Form_Load() Dim b As String * 11 Open "c:\saha\drand1.txt" For Random As #1 Len = 11 Get #1, 2, b Close #1 Show Print b End Sub
Dosya Kontrol Fonksiyonu : LOF(DosyaNo) Numarası verilen dosyanın Byte olarak uzunluğunu verir. LOF() fonksiyonu ile boyutu öğrenilecek olan dosyanın Open komutuyla açılmış olması gerekir. LOF(DosyaNo) Dosya içindeki kayıt sayısı dosyanın byte cinsinden olan boyutunu kaydın byte cinsinden olan boyutuna bölümünden ibarettir. Aşağıda bu işlemi gerçekleştiren program kodu verilmiştir. Ks = LOF(DosyaNo) / KayıtUzunluğu Örnek : Private Sub Form_Load() Open "c:\saha\dout2.txt" For Input As #1 ku = LOF(1) Show Print ku Close #1 End Sub