Commodore sayı 24, sayfa 35
Sayfanın metni

Sayfa 35

tıyoruz. Yukarıda verdiğimiz bazı değişiklikleri de yaparak çeşitli dosyalar yaratın ve onları bu programla okumaya çalışın. Ne zaman hata çıktığını, ne zaman beklediğinizden farklı sonuçlar oluştuğunu gözlemleyin. 10. satırda dosyayı açarken eğer o isimde bir SEQ dosyası yoksa, gene kırmızı ışık yanıp sönerek size haber verecektir. Bunu programımızın içine de koyabilirdik. Örneğin;

15 OPEN 2,8,15 16 INPUT # 2,A,A$,B,C 1? CLOSE 2 18 IF A < > 0 THEN CLOSE 1:END

BU PROGRAM YANLIŞ! Halbuki ne kadar doğru duruyor, değil mi? 17. satıra kadar her şey iyi güzel... komut kanalını açıp gelen mesajı okuyoruz. Ama 17. satırda bu kanalı KAPATMAMAMIZ gerekiyordu. Başka dosyalar açıkken bu kanalı açmak onlara bir zarar vermez. Ancak açık olan komut kanalını kapatmanız, aynı zamanda o sırada açık duran diğer tüm dosyaların da kapanmasına yol açacaktır. Dolayısı ile 18. satırda her şey yolunda görünse ve program 20. satırdan devam etse bile, 1 numaralı kanal da 17. satırdaki komut kanalının kapanmasından etkilenerek kapanmış olacağından, INPUT # komutları işe yaramayacaktı. Kıssadan hisse, komut kanalı, eğer kullanılacaksa, programın EN BAŞINDA açılmalı ve EN SONUNDA kapanmalı, arada ellenmemelidir! Şimdi aşağıdaki programlardan biriyle dört satırlık bir sıralı dosya yarattığımızı düşünelim:

10 OPEN 1,8,2,“DEN,S,W” 20 PRİNT 30 PRİNT #1,“SATIR2” 40 PRİNT #1,“SATIR3” 50 PRİNT #1,“SATIR4” 60 CLOSE |

veya

10 OPEN 1,8,2,“DEN,S,W”” 20 PRİNT #1,“SATIRI,SATIR2” 30 PRİNT # 1,“SATIR3,SATIR4” 40 CLOSE 1

Şimdi de bunu okuyacak çeşitli programlar görelim. Bunlar 1541 ile ilgili olmaktan çok, 64-1541 arasındaki bilgi alışverişini sağlayacak programlama tekniklerinin küçük bir gösterisi...

Disket sürücünüz en az bilgisayarınız kadar karmaşık ve mükemmel. O'nu iyi ve verimli kullanmak için çok şey öğrenmeniz gerekli. Ancak bundan sonra 1541'inizi tanıyabilirsiniz.

10 OPEN 1,8,2,'“DEN,S,R” 20 30 INPUT #1,B$ 40 INPUT #1,C$ 50 INPUT #1,D$ 60 PRINT A$ 70 PRİNT B$ 80 PRINT C$ 90 PRİNT D$ 100 CLOSE |

veya

10 OPEN 1,8,2,“DEN,S,R” 20 INPUT # 1,A$,B$,C$,D$ 30 PRİNT A$,B$,C$,D$ 40 CLOSE i

(Bu programın kötülüğü, tek satırda yapılan INPUT #'un tüm değişkenlerinin toplam karakter sayısının 88'i geçmemesi gerektiği. Dolayısı ile, DS'in uzunluğu 88'den büyükse, başımız belada demektir.)

5 DIM A$(4) 10 OPEN 1,8,2,“DEN,S,R” 15 TO4 20 INPUT #1, AS(I) 30 NEXT 1 40 TO4 50 PRİNT 60 NEXT I 70 CLOSE |

veya

10 OPEN 20 INPUT #1,A$ 30 PRINT A$ 40 1F ST< > 64 THEN 20 1

Tüm bunlarda INPUT # kullandık ve bu komutun eksik yanlarını biliyoruz. Bunu düzeltmenin yolunun da GET #'den geçtiğini hatırlıyor olmalısınız. GET # ile kayıtları okurken kayıtlar arasındaki ayırımı biz yapacağımız için hangi tahta perde rolünü oynayacağına karar vermek bizim işimiz. Eğer sadece $0D byte'ını ayırıcı olarak kabul edersek, yukarıda verdiğimiz dört satırlık dosya yaratan iki programın sonuçları farklı olacak demektir. INPUT # ile her ikisinden de dört kayıt okuduğumuz halde, GET # ile birincisi dört, ikincisi ise iki kayıt halinde görünecektir. Şimdi böyle bir okumayı yapan programı görelim:

10 OPEN 1,8,2,“DEN,S,R” IŞ 20 GET #1,N$ 25 IF X$-CHRS(13) THEN 60 30 XS 401FST < > 64 THEN 20 45 PRINT A$ 50 CLOSE 1 55 END 60 PRINT A$ 70 IF ST < > 64 THEN 15 80 CLOSE 1

Görüldüğü gibi dosyayı karakter karakter okuyup kayıtları oluşturuyoruz. Bu arada devamlı ayırıcı byte'ın ve dosya sonunun gelip gelmediğinin de kontrolünü eksik etmiyoruz. Böylece INPUT # için 88 olan karakter sayısı sınırını 255'e çıkarmış oluyoruz. 255'in nedeni, BASIC'te bir değişkenin en fazla 255 karakter alabilmesi. Bunun için elimizden bir şey gelmez. Disketin üzerinde daha önceden yaratılmış bir sıralı dosyanın arkasına yeni kayıtlar eklemek istediğimizde ise A modunu kullanacağımızı söylemiştik. Şimdi DENEME dosyamıza dört satır daha ekleyelim:

10 OPEN 1,8,2,“DENEME,S,A” 20 PRİNT #1,“DONALD” 30 PRİNT & 1, “DUCK” 40 PRİNT S0 PRİNT 60 CLOSE |

10. satırın sonundaki A parametresine dikkat!

Şimdi de bu dosyayı en son verdiğimiz GET # metodu ile okuyun. Tabii dosya adı olarak DEN yerine DENEME kullanılacak. Yeni satırların dosyanın arkasına eklendiğini göreceksiniz. Ama diyelim ki dosyanın ortasına bir kayıt eklemek istediniz. Bunu, ya dosyanın tamamını bilgisayarın hafızasına okuyup istediğiniz sırada geri diskete yazarak (tabii ki, eski dosyayı sildikten sonra!) ya da şimdi vereceğiniz yöntem ile direkt disketin üzerinde halledebilirsiniz. Yöntem, dosyanın kayıt kayıt bir kopyasını çıkarmaya, bu arada da istenen yere önceden hazırlanmış yeni kaydı yerleştirmeye yarıyor. Ancak uzun dosyalarda bu iş de uzun zaman alacaktır. Ayrıca disketin üzerinde, dosyanın eski uzunluğundan yeni kaydedilecek bilginin uzunluğu kadar fazla boş yer olması gerekiyor. Yani disketin yarısını kaplayan bir dosyanız varsa bu işlemi uygulayamazsınız. Gelelim programa...

Klavyeyle gezinmek için ← ve → tuşları.