1 Mart 1988 Tarihli Commodore Gazetesi Sayfa 65

1 Mart 1988 tarihli Commodore Gazetesi Sayfa 65
Metin içeriği (otomatik olarak oluşturulmuştur)

bilgiler okunacaksa) bu sayı daha farklı da olabilir. Şimdi aşağıdaki mi- nik program yardımı ile, herbiri 36 karakterden oluşan 1500 kayıtlık bir dosya oluşturalım ve adına da RL di- yelim. 100 OPEN 15,8,15 110 K— 1500 120 K2-INT(K/256) 130 Kl -K-K2*256 140 OPEN 1,8,2, “RL,L,” - CHRS$(36) 150 PRINT#2,“P” -- CHRS(2) * CHRS$(K1) 4 CHRS(K2) - CHRS(1) 160 PRINT#1,CHR$(255) 170 CLOSE | 180 CLOSE 15 Programı çalıştırdığınızda yaklaşık 10 dakika sürecektir. En sonda kır- mızı işık yanıp sönerse, dikkate alma- yın. Eğer disketinizde 230 blok civa- rında boş yer varsa, sonuçta istediği- niz dosyayı elde edeceksiniz. Kl ve K2 hesaplamasını 110-130 arası satır- larda görmektesiniz. 140'da dosya kayıt uzunluğu verilerek açılıyor. 150'de ise 1500 numaralı kaydın ilk byte'ı üzerine pozisyonlandırılma ya- pılıyor. Sonra da bu byte'a CHR$ (255) yazıyoruz. Aslında başka şey- ler de yazabilirdik, ancak DOS ken- disi boş kayıtlar yaratırken hepsini 255 karakter kodu ile doldurur. Biz de aynısını yapalım dedik. Şimdi sıra geldi bu dosyaya yeni kayıtlar girmeye. Daha önce, aşağı- daki gibi bir yapı belirlemiştik. Kayıt numarası: 4 basamak İsim: 15 karakter Mal kodu: 5 karakter Alış fiyatı: 6 basamak Satış fiyatı: 6 basamak Dosyamıza bilgileri kaydederken bu yapıyı korumamız gerekir. Yani kayıt numarası ilk 4 karakteri, isim ise sonra gelen 15 karakteri kapsama- h. Aynı şey mal kodu, alış fiyatı ve satış fiyatı için de geçerli. Böyle bir yapıyı nasıl sağlayabiliriz? Bunun en kolay yolu sayısal değiş- kenler yerine string'lerle uğraşmak- tır. Yukarıdaki her bilgi birimi için EKN$, IS$, MK$, AF$ ve SF$ değiş- kenlerini ayıralım. Bunların arka ar- kaya eklenmesi ile oluşacak ve diskete yazılacak değişkene de K$ diyelim. Doğrudan doğruya K$—-KENS-4IS$ 4 MK$- AF$-4-SF$ demek yanlış ola- caktır. Eğer malın adı 15 karakterden kısa ise, arkadan gelen mal kodu ve fiyat bilgileri olmaları gereken yerden daha önce gelecektir. Dolayısı ile is- mi boşluk karakteri ile 15 karaktere tamamlamalıyız. Aynı şey tam tersi durum için de geçerli. Eğer isim 15 karakterden uzunsa, 36 karakteri aşa- y e T A T rız. Bu da hataya yolaçar. Bu durum- da da malın adının ilk 15 karakterini almalı, gerisini gözardı etmeliyiz. Tüm bunları aşağıda gösterildiği gi- bi yapabiliriz. İlk satırda SP$ değiş- keninin içine 15 tane boşluk koyuyo- ruz. Sonra tüm değişkenleri olmaları gereken uzunluklara indirip, sonra da kısa kalanları SP$ ekleyerek uzatıyo- ruz. Sonunda da K$ değişkenini oluş- turuyoruz. 10 SP$-* » 15 K$-LEFTS$(KNS$ -4 SP$,4) 20 K$—-K$-4-LEFT$(IS$ 4 SP$,15) 25 K$ —- K$ 4 LEFTS(MK$ * SP$,5) 30 K$—K$4LEFTS$(AFS$ 4 SP$,6) 35 K$—K$4LEFTS$(SEF$-4 SP3,6) Programımızın bir yerinde KN$, IS$, MEK$, AF$ve SF$ içine istediği- miz değerleri yerleştirdik, K$'i oluş- turduk ve 15 numaralı kayıt olarak dosyaya yerleştirmek istedik. Yapaca- Bımız, dosyayı açıp, 15 numaralı kay- dın birinci byte'ına pozisyonlama yaptıktan sonra K$'i diskete gönder- mek. it 10 ÖPEN 15,8,15 15 ÖOPEN 1,8,2/'RL,L/ 4 CHRS(36) 20 KEN$—“0015* 25 1S$-“COMMODORE 64” 30 MK$-“15623” 35 AF$-“400000” 40 SF$-“450000” 45 SP$-* » 50 K$-LEFT$(KN$ 4 SP$,4) 55 K$—K$-4-LEFT$(S$ 4 SP$,15) 60 K$—K$4 LEFT$(MK$ 4 SP$,5) 65 K$-K$-4 LEFT$(AF$ 4 SP3,6) 10 K$—K$-4 LEFT$(SF$ 4 SP3,6) 75 PRİNT # 15 P” - CHRS$(2) * CHR$(15)4 CHRS(0) 4 CHRS0) 80 PRİNT #1,K$; 85 CLOSE 1 90 CLOSE 15 80 numaralı satırda noktalı virgül kullandığımıza dikkat edin! Bildiği- niz gibi, böyle yapmazsak, kaydın so- nuna otomatik olarak CHRS$(13), ya- ni RETURN kodu eklenmekte. Bu da, zaten 36 karaktere tamamladığı- mız kaydın uzunluğunu 37'ye çıkara- rak hataya yolaçardı. Ancak bu tabii ki her zaman nok- talı virgül kullanmak zorunda oldu- ğumuz anlamına gelmez. Eğer yuka- rıdaki gibi kayıtları oluşturursak (ve- ya sizin BASIC marifetlerinize uygun daha güzel bir programla...), kayıtla- rı geri okumak için kullanacağımız tek yöntem, geçen sayıda da gördü- ğümüz GET ile okuma yöntemidir. 65

Bu sayıdan diğer sayfalar: