Sa arkadaslar. Bu yazida insallah sizlere ayni amaçla kullanilan, VB6’da Type, VB.Net’te de Structure olarak bilinen veri yapisindan bahsedicem. Arkadaslar bu yapiyi çogu programlama dilinde bulabilirsiniz. Akilda “Ne için kullanilir?” sorusuna getirilecek en basit cevap olarak, “Bu islemi verileri paketlemek için kullaniyoruz.” diye düsünebilirsiniz.
Kullaniminin baslica amaci sudur: Belirlenecek degiskenleri bir grup altinda toplamak, rasgele erisimli (Random modu ile açilan) dosyalara grup halinde yazip okumak ve sonuçta degisken kullanimini basitlestirmektir.
Yapilan is ayni olmasina ragmen kodun yazilisi iki dilde de farklidir. Bu yüzden kullanimi anlatirken, VB6 ve VB.Net’te paralel olarak gösterecegim.
Deklarasyon
------- VB6 -------
Private Type KitapInfo
Isim As String
Yazar As String
Aciklama As String
End Type
Dim Kitap As KitapInfo
------- VB.NET -------
Structure KitapInfo
Dim Isim As String
Dim Yazar As String
Dim Aciklama As String
End Structure
Dim Kitap As KitapInfo
Yukaridan görülecegi üzere her iki dilde de yapilan islem aynidir. Önce grupta toplanacak veriler Type / Structure bloklariyla tek çati altinda toplanir, ardindan bu gruba bir isim verilir.
Kullanim
Az önceki kodun simdi açiklayacagim kullanimi her iki dil için de aynidir ve gayet basittir. Örnek olarak Text1, Text2 ve Text3 isimli 3 adet textboxtan bir kitabin ismini, yazarinin ismini ve hakkinda açiklamasini degiskenlere kaydedip bir “paket” haline getirelim.
Kitap.Isim = Text1.Text
Kitap.Yazar = Text2.Text
Kitap.Aciklama = Text3.Text
Artik elimizde Kitap isimli bir “paket” var ve hakkindaki herhangi bir bilgiye sonuna nokta (.) koyduktan sonra bilginin ismini yazarak ulasabiliriz.
Temel olarak buraya kadar bir Type / Structure yapisinin en basit halini gördük. Ancak bu paket degiskeni bir dosyaya kayit altina almak istersek, dosyayi Random modu ile açmamiz ve yapiya bazi sinirlamalar getirmemiz gerekiyor. Random modu ile dosyalama bilmeyenler için kisaca bize gereken bölümünü anlaticam.
Rasgele (Random) erisimli dosyalama
Arkadaslar ileride dosyalamayla ilgili bir yazi hazirlayinca tüm modlari ele alicaz ama simdilik bize lazim olan kisima göz atiyoruz. Bu dosyalama modu da bir bakima paketlerle çalisiyor. Hemen örnek dosya açilimini görerek baslayalim.
------- VB6 -------
Open “C:\\dosyam.txt” For Random as #1 Len = 100
------- VB.NET -------
FileOpen(1, "C:\\dosyam.txt", OpenMode.Random, , , 100)
Verilen kodlarda #1 veya 1 rakami, dosya numarasini gösterir. 100 rakami ise bahsettigimiz “paket”in byte olarak uzunlugudur. Yani dosyaya kaydedilecek her paket max 100 byte (100 karakter) uzunlugunda olacak demektir. Simdi yazinin basinda olusturdugumuz paketi dosyaya yazalim.
------- VB6 -------
Put #1, 10, Kitap
------- VB.NET -------
FilePut(1, Kitap, 10)
Evet bu komutlarla Kitap paketini 1 numarali açilmis dosyada 10. siraya yazdirdik. 1.ye degil de 10. siraya yazmamin tek nedeni anlatirken diger 1 ile karismamasi içindir. Yoksa siz tabiiki ilk kaydi 1. siraya yazdiricaksiniz.
Gelelim dosyadan “paket” okumaya... Neredeyse tüm islem ayni.
------- VB6 -------
Get #1, 10, Kitap
------- VB.NET -------
FileGet(1, Kitap, 10)
Burada da yine 1 numarali açilmis dosyada 10. siradaki paketi, Kitap isimli paketimize aldik. Okuma veya yazma isleminden sonra mutlaka unutulmamasi gereken islem ise dosyayi kapatmaktir.
------- VB6 -------
Close(1) veya Close()
------- VB.NET -------
FileClose(1) veya FileClose()
Parantez içine rakam yazarsaniz komut sadece o dosya numarasina ait dosyayi kapatacaktir, bos birakirsaniz tüm açik dosyalari kapatacaktir.
Arkadaslar ögrendigimiz bu dosyalama seklini birazdan kapsamli bir örnekte ele alarak daha iyi kavrayacagiz. Yalniz son olarak “paket”lerimizi sinirlandirmayi ögrenmeliyiz ki paket, dosyada her bir paket için verdigimiz max büyüklüge (az önceki örnekte 100 byte) sigabilsin.
Type / Structure içindeki bilgileri sinirlandirma
Simdi dosyalardaki boyutu belirleyecek paketlerin büyüklügünü ayarlamayi görecegiz. Yine ayni örnek üzerinden düzenleyerek görelim.
------- VB6 -------
Private Type KitapInfo
Isim As String * 50
Yazar As String * 30
Aciklama As String * 100
End Type
Dim Kitap As KitapInfo
------- VB.NET -------
Structure KitapInfo
<VBFixedString(50)> Dim Isim As String
<VBFixedString(30)> Dim Yazar As String
<VBFixedString(100)> Dim Aciklama As String
End Structure
Dim Kitap As KitapInfo
Görüldügü gibi eklenen sayilar, paket içindeki her bir bilginin büyüklügünü belirleyerek toplamda paketin büyüklügünü belirlemis oluyor (Örnekte: 50 + 30 + 100 = 180 byte). Böylece artik Kitap paketimiz dosyadaki paket bölümleriyle ayni boyutta olacagindan, yazarken tasma, okurken de eksik bilgi okuma gibi sorunlarla karsilasmayacagiz.
Evet artik tam bir örnek için haziriz. Göreceginiz örnekte satir satir okuyarak, az önce ögrendiklerimizi de hatirlayarak yapilanlari kavramaya çalisin. Ben de her satirda açiklamalarimla size yardimci olmaya çalisicam insallah.
Kitap bilgilerini dosyaya yazma / okuma
Örnekte kullanilacak elementler: 4 Textbox, 2 buton
Textbox isimleri: KitapKodu, KitapIsim, KitapYazar, KitapAciklama
Buton isimleri: Yaz, Oku
------- VB6 -------
Private Type KitapInfo
Isim As String * 50 `Isim max 50 karakter olacak
Yazar As String * 30 `Yazar max 30 karakter olacak
Aciklama As String * 100 `Aciklama da max 100 karakter olsun
End Type
Dim Kitap As KitapInfo `Kitap isimli 180 bytelik paketimiz hazir
Private Sub Yaz_Click() `-Yaz butonu-
Dim Kod As Integer
Kod = KitapKodu.Text `Kitap kodu dosyadaki satir olacak
Kitap.Isim = KitapIsim.Text
Kitap.Yazar = KitapYazar.Text
Kitap.Aciklama = KitapAciklama.Text
Open “C:\\dosyam.txt” For Random as #1 Len = Len(Kitap)
`Len(Kitap): Burada dosya uzunlugunu paket uzunluguna esitliyoruz.
Put #1,Kod,Kitap
Close()
End Sub
Private Sub Oku_Click() `-Oku butonu-
Dim Kod As Integer
Kod = KitapKodu.Text `Okunacak kodu textboxtan al
Open “C:\\dosyam.txt” For Random as #1 Len = Len(Kitap)
Get #1,Kod,Kitap
Close()
KitapIsim.Text = Kitap.Isim
KitapYazar.Text = Kitap.Yazar
KitapAciklama.Text = Kitap.Aciklama
End Sub
------- VB.NET -------
Structure KitapInfo
<VBFixedString(50)> Dim Isim As String
<VBFixedString(30)> Dim Yazar As String
<VBFixedString(100)> Dim Aciklama As String
End Structure
Dim Kitap As KitapInfo
Dim Kitap As KitapInfo `Kitap isimli 180 bytelik paketimiz hazir
Private Sub Yaz_Click(ByVal sender As System.Object, ByVal e As _ System.EventArgs) Handles Yaz.Click
Dim Kod As Integer
Kod = Val(KitapKodu.Text) `Kitap kodu dosyadaki satir olacak
Kitap.Isim = KitapIsim.Text
Kitap.Yazar = KitapYazar.Text
Kitap.Aciklama = KitapAciklama.Text
FileOpen(1, "C:\\dosyam.txt", OpenMode.Random, , , Len(Kitap))
`Len(Kitap): Burada dosya uzunlugunu paket uzunluguna esitliyoruz.
FilePut(1, Kitap, Kod)
FileClose()
End Sub
Private Sub Oku_Click(ByVal sender As System.Object, ByVal e As _ System.EventArgs) Handles Oku.Click
Dim Kod As Integer
Kod = Val(KitapKodu.Text) `Okunacak kodu textboxtan al
FileOpen(1, "C:\\dosyam.txt", OpenMode.Random, , , Len(Kitap))
FileGet(1, Kitap, Kod)
FileClose()
KitapIsim.Text = Kitap.Isim
KitapYazar.Text = Kitap.Yazar
KitapAciklama.Text = Kitap.Aciklama
End Sub
Medrese-i Yusufiye TiM TnTBLoW - Murat BULUT