Bu sayfadaki yazılar
Sayfanın metni
Sayfa 52
TUNA ERTEMALP
Klavyeyle gezinmek için ← ve → tuşları.
Sayfa 53
(Geçen sayıdan devam)
Okuma ile yazma arasındaki tek fark, pozisyonlama işleminden sonra kullanılan komutların yazmaya değil okumaya yönelik olması. Örneğin demin yazdığımız 15 numaralı kaydı geri okuyalım:
10 OPEN 15,8,15 15 OPEN 4-CHR$(36) 20 PRİNT 4 CHR$(2) 4 CHR$(15) 4 CHRS(0) 4 25 K$-“ ” 30 FOR I-1 TO 36 35 40 45 NEXT I 50 KN$—LEFT$(K$,4) 55 IS$-MID$(K$,5,15) 60 MK$-MID$(K$,20,5) 65 AF$-MID$(K$,25,5) 70 SFE$—-MID$(K$,31,6) 80 CLOSE 1 85 CLOSE 15
Artık gerekli bilgiler değişkenlerin içine yerleşmiştir. 20 numaralı satırda kaydın ilk byte'ı yerine beşinci byte'ı üzerine pozisyonlama yapıp sadece 15 karakter okumak suretiyle, yalnızca malın adını elde etme imkanımız da vardı: Eğer GET yöntemini beğenmiyorsak (nedense?) INPUT 'u da kullanabiliriz. Tabii ki bazı şartları yerine getirirsek:
1) Bir kaydın uzunluğu en fazla 87 karakter ise. Unutmayın, INPUT ile en fazla 88 karakter okunabilir. 87 karakterin arkasına bir de otomatik eklenecek CHR$(13)'ü sayarsak 88'e ulaşırız.
2) Eğer kayıdın içinde bir yerlerde (örneğin arkadaşlarınızın adreslerini saklayacaksanız, adreslerin içinde) noktalı virgül, iki nokta üstüste ve CHR$(13) kodlarının bulunmaması gerekir. Yine geçen sayıdan bildiğiniz gibi, bu kodlar INPUT # komutu için kaydın sonunun geldiğini belirtiyor.
3) Birinci şarta uygun açtığınız dosyaya ikinci şarta uygun bir kaydı yazarken, mutlaka kaydın birinci byte: 1nın üzerine pozisyonlayıp noktalı virgülsüz PRINT # ile yazmalısınız.
4) Okurken de, gene kaydın ilk karakterine pozisyonlayıp INPUT # ile okumanız gerekir.
Gördüğünüz gibi bu yöntem GET #'den daha karmaşık ve zahmetli. Üstelik esnekliği de daha az. Şu ana kadar anlattıklarımız size relatif dosyayı bütün yönleriyle kullanmanızı göstermekte. Bir iki ufak not daha... Daha önceden yazdığınız bir kaydı değiştirmek isterseniz yapacağınız şey, eski kaydın üzerine pozisyonlayıp yeni bilgiyi yazmak. Sıralı dosyada olduğu gibi dosyayı parçalayıp tekrar birleştirme gibi bir dert yok. Ya dosyanın başlangıçta belirlediğiniz uzunluğu yetmezse?.. Sorun yok. Diyelim ki, en başta 100 kayıtlik yer açtınız. Daha sonra da 110 numaralı bir kaydı yazmaya kalkıştınız. Gerçi 1541 göz kırpmaya başlayıp RECORD NOT PRESENT diyecektir ama, bu arada da 101-110 arası kayıtları yaratıp, hepsini CHR$(255) ile doldurup, 100 numaraya da sizin gönderdiğiniz bilgiyi yazacaktır. Yani, dosyanız otomatik olarak uzayacaktır. Ancak bu uzatma işlemi, eklenecek kayıt sayısına bağlı olarak, zaman alacaktır. Zaten en başta belli sayıda kayıt için yer açmamızın nedeni de, normal dosyalama işlemleri sırasında böylesine zaman kayıplarını önlemekti. Eğer bu genişletme sırasında diskette yer kalmazsa, FILE TOO LAR-
GE hata mesajı gelecektir. Bir başka hata da, o anda dosyada bulunabilecek en büyük kayıt numarasından daha büyük bir kayıt numarası ile okuma yapmaya kalkıştığınızda gelecektir. Bu da, RECORD NOT PRE-SENT olacaktır. Relatif dosyaların programlanmasına dair sözlerimiz bu kadar. Şimdi de, relatif dosyaların disket üzerinde nasıl yeraldığını ve DOS'un nasıl kayıtlara eriştiğini görelim. Bunun için DISKMON'u kullanacağız... Önce boş bir disket alın ve formatlayın. Aman disketin gerçekten boş olmasına dikkat edin! Sonra da formatlayınca kaybolabilecek bilgiler için beni suçlamayın... Formatlama işlemi bitince, aşağıdaki programı yazıp çalıştırın:
10 *-CHR$(100) 20 OPENİ,8,15 30 PRİNT CHR$(2) *-CHR$(70)4 CHR$(0) 4 CHR$(1) 40 PRINT #2;“70 NUMARA” 50 CLOSE2:CLOSE1
Gördüğünüz gibi, RELATİF adı altında, herbiri 100 byte tutan, 79 kayıtlık bir relatif dosya yaratıp, 70 numaralı kaydın ilk byte'ından itibaren “70 NUMARA” yazısını yazdık (nok- -talı virgülsüz...)