Quick Basic – Bölüm 10

Quick-Basic Kursu
Bölüm 10: Dosya İşlemleri-1

Bilgileri değişkenlere aktararak bellekte tutabiliyoruz ve onlarla ilgili işlemler yapabiliyoruz. Belleğe aktarılacak ve işlenilecek bilgiler çok sayıda ve belli bir düzende ve değişme ihtimali olan bilgileri program kodları içine yazmak mantıklı olmayacaktır. Qbasic’in kullanacağı bellek de sınırlıdır. Örneğin beş bin öğrencisi bulunan bir okulda öğrencilerin kayıtlarının tutulacağını düşünün. Bu bilgiler klavyeden RAM belleğe aktarılabilse bile bilgisayarı kapattığımızda bilgiler kaybolacaktır. Bu yüzden kalıcı bellekte kalmasını istediğimiz bilgiler için dosyalar kullanılır.

Üç türlü dosya açma yöntemi vardır. Sıralı, Rasgele erişimli ve Binary

OPEN

Disk üzerinde dosya oluşturmak ve değişiklik yapmak için OPEN komutu kullanılır.

dosyaadı : “Sürücü : \ klasör\ dosyaadı” şeklinde açacağınız dosyayı tanımlayan metin
açma tipi : INPUT, OUTPUT, APPEND, RANDOM ya da BINARY tiplerinden biri
erişim tipi : Ağ ortamında dosyayı başkaları da açacaksa dosyaya erişim tipini belirleyebilirsiniz. READ(okuma), WRITE(yazma) veya READ WRITE (okuma ve yazma, RANDOM ve BINARY dosyalarda geçerlidir)
lock : dosya kilitleme
dosya numarası : açılan her dosyaya bir numara verilmelidir.
kayıt genişliği : Rasgele erişimli dosyalarda kayıt genişliğini belirtmek içindir.

Sıralı Erişimli Dosya Oluşturma ve Yazma

Çoğunlukla az sayıda veya belirli bir kayıt formatı olmayan metin içerikli dosya işlemleri için kullanılır. Örneğin DOSdaki EDIT programı bu tür dosyaları oluşturur veya açar. Sıralı erişimli dosya açmak istediğimizde bunu yalnızca OKUMA veya yalnızca YAZMA amaçlı olabilir. Dosya ne amaçla açılmışsa o amaçla kullanılır. Okumak için açtığımız dosyaya yazma yapamayız. Ancak dosya kapatıldıktan sonra yazma amaçlı olarak açıp yazdırabiliriz.

Bu satırı açıklayalım. C: sürücüsü içinde ORNEK klasörü içine dosya.txt adında yeni bir dosya oluşur. OUTPUT (YAZMA amaçlı) olarak dosya oluşur, yani okuma amaçlı olarak kullanılamaz.

Eğer C: sürücünüzde ORNEK klasörünüz yoksa “Path Not Found(Yol bulunamadı)” hatası oluşacaktır. Dos komut satırına çıkarak MD C:\ORNEK yazarak bu klasörü oluşturup tekrar çalıştırmayı deneyin.

AS # 1 ise açtığımız dosyanın dosya numarasının 1 olduğunu belirtiyoruz. Bu numara dosya yazma ve okuma için kullanılacaktır. Başka dosya açacağımızda, eğer dosya kapatılmadıysa aynı numarayı kullanamayız.

Evet bu satırı çalıştırdığımızda klasörümüz varsa içinde dosya.txt oluşacaktır.

Dikkat ! : Eğer dosya daha önceden varsa yeniden oluşacağı için önceki dosyanın varolan içeriği silinecektir

2. satırı ekleyelim

PRINT komutunu biliyorsunuz. Ekrana yazı yazmak için kullanılıyordu. Varsayılan yazma yeri ekran olduğu için yazma yeri yazılmadığında ekrana yazar. Bu satırda ekrana değilde #1 numara ile açılan dosyaya yazdırılacağını söylüyoruz. Gördüğünüz gibi burada dosya adını filan yazmamıza gerek yok, açık olan dosyanın numarası yeterli.

Şimdi kaydettiğiniz klasöre ulaşın. Windowsdaysanız dosya üzerinde çift tıklayarak, DOS da iseniz
EDIT C:\ORNEK\dosya.txt
yazarak dosya içeriğini görebilirsiniz. Windowsda dosya içeriğine bakarsanız Türkçe karakterlerin yerine farklı karakterler olduğunu göreceksiniz. Bu normaldir.

3. satırı ekleyelim.

LOF : Dosya numarasıyla belirtilen dosyanın uzunluğunu byte cinsinden verir

4. ve 5. satırı ekleyelim.

WRITE komutu; verileri, arasına virgül koyarak dosyaya(yazma amaçlı açılan) yazar. PRINT komutunun ekrandaki etkisi ne ise aynen o şekilde dosyaya yazar. PRINT #de veriler arasına virgül , noktalı virgül , TAB SPC USING komutları da eklenebilir.

6. satır

Numarası belirtilen dosyayı kapatır. Bu satırı yazmasak da program çalışır ve hata vermez. Çünkü program sonlandığında programın açtığı tüm açık dosyalar kapatılır. Ama siz yine de alışkanlık olarak dosya ile ilgili işlem bittiğinde kapatma komutunu yazmayı unutmayın. Numara belirtilmezse tüm dosyalar kapatılır. Açık olan birden fazla dosyayı kapatmak için CLOSE #1,#3,#6 gibi bir komut kullanılabilir. Kapatılan dosya üzerinde işlem yapılamaz.

Dikkat ! : Dosyalar açıkken elektrik kesintisi veya kilitlenme durumunda açık olan dosyalarınıza zarar gelebilir.

Sıralı Erişimli Dosyadan Okuma

Aşağıdaki programı yazıp çalıştırın. Bu kodlar bir dosya oluşturacak

Üstteki programın oluşturduğu dosya üzerinde okuma işlemi yapacağız

Dosyayı okuma amaçlı açacağımızı INPUT ekiyle belirtiyoruz. Eğer dosya yoksa File Not Found(Dosya bulunamadı) hatası oluşur

INPUT komutunu hatırlarsanız daha önceden klavyeden veri girmek amacıyla kullanılmıştı. Şimdi ise dosyada kayıtlı olan veriler okunup belirtilen değişkenlere aktarılıyor.

Değişkenlere aktarılan değerler ekrana yazdırılıyor.

Dosya(lar) kapanıyor.

Satır Satır okuma

Daha çok düz metin içerikli dosyaları okumak için kullanılan bir yöntemdir. Dosya okuma amaçlı olarak açılır.
Kullanımı:
LINE INPUT # dosya numarası , String Değişken adı
Komut yürütüldüğünde dosyadaki ilk satırı komple okuyarak belirtilen değişkene aktarır. Aşağıdaki örneği inceleyiniz.

Dosyaya Ekleme Yapma

Daha önceden kayıtlı dosyaya yeni bilgiler eklemek gerekirse APPEND kullanılır. OUTPUT kullanılırsa eski bilgiler silinir.

Şimdi dosyadaki bilgileri okuyup ekrana yazalım

FREEFILE dosya numarası olarak kullanılmayan bir numara verir. Özellikle çok sayıda dosya açtığınızda hangi numaraların kullanıldığını bulmak zor olabilir. Bu durumlarda işe yarar bir komut.

EOF : Dosya sonu demektir(End Of File) Dosyadaki kayıtların bitip bitmediği bu komutla anlaşılır.

SEEK : Okumaya başlanacak konumu(byte) belirtir. Başlangıçta 1 dir. Bu komutu kullanmasaydık okuma konumu dosya sonuna geldiği için Input past end of file(Okuma dosya sonuna taştı) hatası çıkardı.

UYGULAMA

5 Personeli olan bir kurumda personel kayıtları bir dosyaya aktarılacak. Aktarılacak bilgiler: Personelin; adı, soyadı, doğum yeri, yaşı, maaşı. Bilgiler klavyeden aktarılacak

PROBLEM : Bilgisayarınızdaki C: kök klasöründeki AUTOEXEC.BAT ve CONFIG.SYS dosya içeriğini ekrana yazan program yazınız. Dikkat : Bu dosyaların yedeğini almadan bunu denemeyin.

Yorum Bırak

E-posta hesabınız yayımlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir