RASGELE ERİŞİMLİ DOSYAYA YAZMA VE OKUMA
Random modu ile acılan dosyaya bilgi yazmak icin Put, bilgi okumak icin ise Get komutu kullanılır.
Random dosya acma komutu
Open “dosya yolu ve adı” for random as #dosya no
Acılan bu random dosyaya bilgi yazmak ve okumak icin
Put #dosya no, kayıt no, değişken Bilgi yazmak icin
Get #dosya no, kayıt no, değişken Bilgi okumak icin
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 icin kullanılan komut satırına baktığımız zaman sadece bir değişken kullanıldığını goruruz. 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.
Orneğin tek bir kayıt yazılacağını duşunursek 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 iceriğini kaydetmek istiyorsak ne yapmalıyız?
Bu soruya verilebilecek en guzel cevap Kullanıcı tarafından yeni tip oluşturulmasıdır. Yani değişkenlerimizi Tip icinde tanımlayacağız.
Bu işlem icin Kod penceremizin en ust bolumune 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 butun 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 tum değişkenlerimizi bir tip icinde tanımladık. Ve bu değişkenlere tip değişkeni ile beraber(ert) bilgi girdik. Bu bilgileri random olarak actığımız dosyaya kaydettik ve bu dosyayı Close #1 komutu ile actığımız dosyayı kapatıyoruz. Burada dikkat etmemiz gereken nokta actığımız dosyayı işimiz bitince kapatmamızdır. Cunku program buyudukce yanlışlıkla aynı dosya iki defa acı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ı gorduk şimdi ise bir dosyadan nasıl bilgi okunacağını goreceğ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 once 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. Orneğin bir işyerindeki calışanların kayıtlarını tutuyorsak calış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 icin istediğimiz kadar kayıt yapabiliriz. Put yerine Get komutu getirilerek dosya icinde istenilen kayıta erişebiliriz.
Şimdiye kadar tip icinde birden fazla değişken kullanarak bilgileri aldık. Bir duşunelim, bir kişiye ait 30 bilgi alacağımızı. Bu tip icinde 30 tane değişken mi kullanacağız. Bunun icinde bir cozumu var. Bu gibi durumlarda değişken yerine dizileri kullanacağız. Ayrıca text kutularını kopyala yapıştır yontemiyle coğaltmalıyız ki index numaraları oluşsun.
Orneğimiz icin :
1. Formumuza 1 tane text kutusu yerleştiriyoruz.
2. Bu text kutusunun uzerine 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 yontemi ile.
Text kutularımızı diziye for dongusu ile aktarmış olduk. Bu şekilde bir cok kayıt diziler yardımı ile kaydedebiliriz.
Okuma işlemi icin 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
Boylece Random dosyaya nasıl bilgi yazıldığını ve okunduğunu gorduk.
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ı goreceğiz.
Bunun icin dongu ve karşılaştırmaları kullanacağız.
Dosyamızı random modunda acıyoruz. Kayıt yapacaksak ilk boş kayıdı aratıyoruz.
Orneğimizde 100 kayıt oluşturacağımızı duşunelim
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 dongusu 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 icinde dosya numarasını bilmemiz gerekmiyor. Ad ve soyada gore arama yaptırmak mumkun. Bunun icinde dongu 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 gore arama yapıyoruz. Ve bulunan bilgiler text3 ve text4’e yazdırılıyor.
__________________
Rasgele Erişimli Dosyaya Yazma Ve Okuma
Programlama0 Mesaj
●28 Görüntüleme
- ReadBull.net
- Programlama ve Yazılım
- Programlama
- Rasgele Erişimli Dosyaya Yazma Ve Okuma