(Geçen sayıdan devam) Okuma ile yazma arasındaki tek fark, pozisyonlama işleminden sonra kul- lanılan komutların yazmaya değil okumaya yönelik olması. Örneğin de- min yazdığımız 15 numaralı kaydı geri okuyalım: 10 OPEN 15,8,15 15 OPEN 1,8,1/'RL,L, * CHRS(36) 20 PRİNT #15;“P”4- CHRS(2) * CHRS$(15) 4 CHRS(0)4- CHRS(1) 25 K$-s ” 30 FOR I-1 TO 36 35 GETHİ,AŞ$ 40 K$—K$tAS 45 NEXT I 50 EN$-LEFTS$(K$,4) 55 1IS$-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 pozisyon- lama yapıp sadece 15 karakter oku- mak suretiyle, yalnızca malın adını el- de etme imkanımız da vardı: Eğer GET — yöntemini beğenmi- yorsak (nedense?) INPUT 'u da kullanabiliriz. Tabii ki bazı şartları ye- rine 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 CHRS$(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$Ü3) kodlarının bulunmaması gerekir. Yine geçen sayıdan bildiğiniz gibi, bu kodlar INPUT # komutu için kaydın sonunun geldiğini belirti- yor. 3) Birinci şarta uygun açtığınız dos- yaya ikinci şarta uygun bir kaydı ya- zarken, mutlaka kaydın birinci byte* ının üzerine pozisyonlayıp noktalı vir- gülsüz PRINT # ile yazmalısınız. 4) Okurken de, gene kaydın ilk ka- rakterine pozisyonlayıp İNPUT # ile okumanız gerekir. Gördüğünüz gibi bu yöntem GET #'den daha karmaşık ve zah- metli. Üstelik esnekliği de daha az. Şu ana kadar anlattıklarımız size relatif dosyayı bütün yönleriyle kul- lanmanızı göstermekte. Bir iki ufak not daha... Daha önceden yazdığınız bir kaydı değiştirmek isterseniz yapa- cağınız şey, eski kaydın üzerine pozis- yonlayıp yeni bilgiyi yazmak. Sıralı dosyada olduğu gibi dosyayı parçala- yı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ıt- lık yer açtınız. Daha sonra da 110 nu- maralı bir kaydı yazmaya kalkıştınız. Gerçi 1541 göz kırpmaya başlayıp RECORD NOT PRESENT diyecek- tir ama, bu arada da 101-110 arası ka- yıtları yaratıp, hepsini CHR$(255) ile doldurup, 100 numaraya da sizin gön- derdiğiniz bilgiyi yazacaktır. Yani, dosyanız otomatik olarak uzayacak- tir. Ancak bu uzatma işlemi, eklene- cek 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ı önlemek- ti. Eğer bu genişletme sırasında dis- kette yer kalmazsa, FILE TOO LAR- GE hata mesajı gelecektir. Bir başka hata da, o anda dosyada bulunabile- cek en büyük kayıt numarasından da- ha büyük bir kayıt numarası ile oku- ma yapmaya kalkıştığınızda gelecek- tir. Bu da, RECORD NOT PRE- SENT olacaktır. Relatif dosyaların programlanma- sına dair sözlerimiz bu kadar. Şimdi de, relatif dosyaların disket üzerinde nasıl yeraldığını ve DOS'un nasıl ka- yıtlara eriştiğini görelim. Bunun için DISKMON'u kullanacağız... Önce baş bir disket alın ve format- layın. Aman disketin gerçekten boş olmasına dikkat edin! Sonra da for- matlayınca kaybolabilecek bilgiler için beni suçlamayın... Formatlama işlemi bitince, aşağı- daki programı yazıp çalıştırın: 10 OPEN2,8,2;'RELATİF,L/ 4 CHRS$(100) 20 OPENİ,8,15 30 PRİNT #1;P”-4- CHRS(2) 4 CHRS$(70)4- CHRS(0) 4 CHRS() 40 PRİNT #2;*70 NUMARA” 50 CLOSE2:CLOSEİ Gördüğünüz gibi, RELATİF adı al- tında, herbiri 100 byte tutan, 79 ka- yıtlık bir relatif dosya yaratıp, 70 nu- maralı kaydın ilk byte'ından itibaren “70 NUMARA” yazısını yazdık (nok- -talı virgülsüz...)