QBasic Dersleri 10

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.
OPEN dosyaadı [FOR açma tipi] [ACCESS erişim tipi] [lock] AS [#]dosyanumarası [LEN=kayıt genişliği] 
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.
OPEN "c:\ORNEK\dosya.txt" FOR OUTPUT AS # 1
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 #1 , "Edep öğrenilmeden ilim öğrenilmez."
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.
PRINT "Dosya uzunluğu : " ; LOF(1)
LOF : Dosya numarasıyla belirtilen dosyanın uzunluğunu byte cinsinden verir
4. ve 5. satırı ekleyelim.
PRINT #1, "bir" , "iki" ;"yedi" ; TAB(30) ; "on"
WRITE #1, "bir" , "iki" , "yedi", "on"
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
CLOSE #1
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
OPEN "c:\ORNEK\veriler.txt" FOR OUTPUT AS #1
WRITE #1, "Mesut", "Akcan", 1968, "Adana"
CLOSE #1
Üstteki programın oluşturduğu dosya üzerinde okuma işlemi yapacağız
OPEN "c:\ORNEK\veriler.txt" FOR INPUT AS #1
Dosyayı okuma amaçlı açacağımızı INPUT ekiyle belirtiyoruz. Eğer dosya yoksa File Not Found(Dosya bulunamadı) hatası oluşur
INPUT #1, A$, S$, DT%, DY$
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.
CLS : PRINT A$, S$, DT%, DY$
Değişkenlere aktarılan değerler ekrana yazdırılıyor.
CLOSE
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.
CLS : dosya$ = "c:\bootlog.txt"
OPEN dosya$ FOR INPUT AS #1
PRINT dosya$; " dosyası içeriği:"
PRINT "--------------"
DO WHILE NOT EOF(1)
 a = a + 1
 IF a > 21 THEN a = 0: SHELL "pause"
 LINE INPUT #1, K$
 PRINT K$
LOOP

 Dosyaya Ekleme Yapma

OPEN "c:\ORNEK\veriler.txt" FOR APPEND AS #1
Daha önceden kayıtlı dosyaya yeni bilgiler eklemek gerekirse APPEND kullanılır. OUTPUT kullanılırsa eski bilgiler silinir.
WRITE # 1 , "Ahmet" , "Akgül" , 1972 , "Ankara"
CLOSE
Şimdi dosyadaki bilgileri okuyup ekrana yazalım
DEFINT A-Z
NO = FREEFILE: CLS
OPEN "c:\ORNEK\veriler.txt" FOR INPUT AS #NO
DO UNTIL EOF(NO)
INPUT #NO, A$, S$, DT, DY$
PRINT A$, S$, DT, DY$
LOOP
SEEK #NO, 1
'baştan tekrar okunuyor
PRINT "-------------"
INPUT #NO, A$, S$, DT, DY$
PRINT A$, S$, DT, DY$
CLOSE #NO
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 OFile) 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
DEFINT A-Z: DEFSTR P: DIM m AS LONG
OPEN "c:\ornek\personel.txt" FOR OUTPUT AS #1
FOR n = 1 TO 10
CLS : PRINT STRING$(40, "-")
PRINT n; ". personelin bilgilerini giriniz"
PRINT STRING$(40, "-")
INPUT "Adı"; pa
INPUT "Soyadı"; ps
INPUT "Doğum yeri"; pd
INPUT "Yaşı"; y
INPUT "Maaşı"; m
WRITE #1, pa, ps, pd, y, m
NEXT
CLOSE
PRINT STRING$(40, "-")
PRINT "... işlem tamam ..."
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.

0 yorum:

Related Posts Plugin for WordPress, Blogger...