Posted under Visual Basic
RASGELE ERİŞİMLİ DOSYAYA YAZMA VE OKUMA
Random modu ile açılan dosyaya bilgi yazmak için Put, bilgi okumak için ise Get komutu kullanılır.
Random dosya açma komutu
Open “dosya yolu ve adı” for random as #dosya no
Açılan bu random dosyaya bilgi yazmak ve okumak için
Put #dosya no, kayıt no, değişken Bilgi yazmak için
Get #dosya no, kayıt no, değişken Bilgi okumak için
Dosya no: Open komutu ile belirlenen dosya numarasıdır.
Kayıt no : Yazılacak ve okunacak bilginin dosyadaki kayıt numarası
Değişken : Kaydedilecek bilginin bulunduğu değişken
Yazma ve okuma işlemi için kullanılan komut satırına baktığımız zaman sadece bir değişken kullanıldığını görürüz. Yani kayıt yaparken tek bir değişken kaydedebiliriz. Bizim programımızda sadece tek bir değişken kaydedilmeyebilir. Birden fazla kayıt yazacağımız zaman başka metodlar kullanmalıyız.
Örneğin tek bir kayıt yazılacağını düşünürsek işlem kolay
Private Sub Command1_Click()
Open “c:\ert.txt” For Random As #1
Dim x
Put #1, 1,x
x=Text1
Close #1
End Sub
Bu program satırları ile yalnızca text1’deki bilgiyi dosyaya yazabiliriz. Fakat birden fazla text kutularımız varsa yada birden fazla değişkenin içeriğini kaydetmek istiyorsak ne yapmalıyız?
Bu soruya verilebilecek en güzel cevap Kullanıcı tarafından yeni tip oluşturulmasıdır. Yani değişkenlerimizi Tip içinde tanımlayacağız.
Bu işlem için Kod penceremizin en üst bölümüne yani General kısmına şu şekilde tip oluşturacağız. Bunu yapmamızın nedeni tanımladığımız değişkenleri tek bir değişken altında toplayabilmemizdir.
Private Type kisi
adi As String
soyadi As String
okul As String
yaşı As Integer
End Type
Dim ert As kisi
Artık bilgileri alacağımız zaman
adi=text1.text
diye tanımlamayacağız. Bunun yerine
ert.adi = Text1.Text
kullanacağız. Hani bütün değişkenleri tek bir değişken altında toplayacağız demiştik. Şimdi bu değişkenlere bilgi girelim ve bu bilgileri kaydedelim.
Private Sub Command1_Click()
Open “c:\ert.txt” For Random As #1
ert.adi = Text1.Text
ert.soyadi = Text2.Text
ert.okul = text3.Text
ert.yasi = text4.Text
Open “c:\ert.txt” For Random As #1
Put #1, 1, ert
Close #1
End Sub
Koda bakıldığı zaman tüm değişkenlerimizi bir tip içinde tanımladık. Ve bu değişkenlere tip değişkeni ile beraber(ert) bilgi girdik. Bu bilgileri random olarak açtığımız dosyaya kaydettik ve bu dosyayı Close #1 komutu ile açtığımız dosyayı kapatıyoruz. Burada dikkat etmemiz gereken nokta açtığımız dosyayı işimiz bitince kapatmamızdır. Çünkü program büyüdükçe yanlışlıkla aynı dosya iki defa açılmak istenebilir. Bu durumda da hata ile karşılaşırız.
Şimdiye kadar olan kısımda tip tanımlayıp, bu tipe veri girilmesini ve bu tipin random dosyaya yazılmasını gördük şimdi ise bir dosyadan nasıl bilgi okunacağını göreceğiz.
Bilgileri dosyadan okuyacağımız zaman yine aynı şekilde kullanıcı tipine ihtiyacımız olacak. Ama kullanıcı tarafından ayrı bir tip tanımlamaya gerek yok. Az önce oluşturduğumuz tipi tekrar kullanacağız.
Private Sub Command2_Click()
Open “c:\ert.txt” For Random As #1
Get #1, 1, ert
Text1 = ert.adi
Text2 = ert.soyadi
Text3 = ert.okul
Text4 = ert.yasi
Close #1
End Sub
Burada dosya numarası 1 olan ve dosya numarası 1 olan kayıttaki bilgileri ert tipine aktarıyoruz. Daha sonra ert tipinde bulunan değişkenleri text kutularına yazdırıyoruz.
Dosyamızda birden fazla kayıt olabilir. Örneğin bir işyerindeki çalışanların kayıtlarını tutuyorsak çalışanların sayısı kadar kayıtımız olmalıdır.
Put #1, val(text5), ert dersek kayıt numarasını biz belirleyeceğimiz için istediğimiz kadar kayıt yapabiliriz. Put yerine Get komutu getirilerek dosya içinde istenilen kayıta erişebiliriz.
Şimdiye kadar tip içinde birden fazla değişken kullanarak bilgileri aldık. Bir düşünelim, bir kişiye ait 30 bilgi alacağımızı. Bu tip içinde 30 tane değişken mi kullanacağız. Bunun içinde bir çözümü var. Bu gibi durumlarda değişken yerine dizileri kullanacağız. Ayrıca text kutularını kopyala yapıştır yöntemiyle çoğaltmalıyız ki index numaraları oluşsun.
Örneğimiz için :
1. Formumuza 1 tane text kutusu yerleştiriyoruz.
2. Bu text kutusunun üzerine fareyi sağ tıklayıp copy komutunu veriyoruz.
3. Formun boş bir alanında fareyi sağ tıklayıp paste komutunu veriyoruz.
4. Gelen soruya evet cevabını veriyoruz.
5. 3. işlemi yerleştirmek istediğimiz text kutusu kadar yapıyoruz.
Tip tanımlama işlemini yapıyoruz.
Private Type bilgi
kisi(4) As String
End Type
Dim ert As bilgi
Bu defa değişken yerine 4 elemanlı dizi kullandık.
Private Sub Command1_Click()
Dim i As Integer
Open “c:\ert.txt” For Random As #1
For i = 0 To 3
ert.kisi(i) = Text1(i).Text
Next
Put #1, val(text2), ert
Close #1
End Sub
Formumuzda 4 tane text kutusu var bunların adları text1(0),text1(1),text1(2),text1(3) oldu kopyala yapıştır yöntemi ile.
Text kutularımızı diziye for döngüsü ile aktarmış olduk. Bu şekilde bir çok kayıt diziler yardımı ile kaydedebiliriz.
Okuma işlemi için ise
Private Sub Command2_Click()
Dim i As Integer
Open “c:\ert.txt” For Random As #1
Get #1, val(text2), ert
For i = 0 To 3
Text1(i).Text= ert.kisi(i)
Next
Close #1
End Sub
Böylece Random dosyaya nasıl bilgi yazıldığını ve okunduğunu gördük.
Ama bizim yaptığımız programlarda dosya numarasını hep kullanıcı tarafından girilmesini istedik.
Şimdi kullanıcı tarafından dosya numarası girilmeden nasıl kayıt yapılacağını göreceğiz.
Bunun için döngü ve karşılaştırmaları kullanacağız.
Dosyamızı random modunda açıyoruz. Kayıt yapacaksak ilk boş kayıdı aratıyoruz.
Örneğimizde 100 kayıt oluşturacağımızı düşünelim
Open “c:\ert.txt” For Random As #1
For i = 1 To 100
Get #1, i, ert
If (ert.adi = “”) Then
ert.adi = Text1
ert.soyadi = Text2
ert.okul = Text3
ert.yasi = Text4
End If
Next
Put #1, i, ert
Close#1
Programımızda ad kısmının boş oluğu ilk kayıda bilgilerimizi kaydediyor. Burada for döngüsü ve if şartı ile dosya numaraları tek tek dolaşılıyor ve bu dosya numaralarında ad kısmının boş olduğu kayıt bulunduğu zaman bu kayıda bilgilerimizi kaydediyor.
Aynı şekilde arama yapmak içinde dosya numarasını bilmemiz gerekmiyor. Ad ve soyada göre arama yaptırmak mümkün. Bunun içinde döngü ve karşılaştırmaları kullanacağız.
Open “c:\ert.txt” For Random As #1
For i = 1 To 100
Get #1, i, ert
If (text1=ert.adi and text2=ert.soyadi) Then
Text3 =ert.okul
Text4 =ert.yasi
End If
Next
Close#1
Burada text1 e girilen ad ve text2 ye girilen soyada göre arama yapıyoruz. Ve bulunan bilgiler text3 ve text4’e yazdırılıyor.