Yayınlama: 2000
Güncelleme: 27 Eylül 2020
Bilgileri değişkenlere aktararak bellekte tutabiliyoruz ve onlarla ilgili
işlemler yapabiliyoruz.Güncelleme: 27 Eylül 2020
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.
QuickBasic'in kullanabileceği RAM bellek sınırlıdır.
Örneğin 1500 öğrencisi bulunan bir okulda öğrencilerin kayıtlarının tutulacağını düşünün.
Bu bilgiler klavyeden veri girişi ile 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ür dosya açma ve yönetme yöntemi vardır.
- Sıralı erişimli (Sequential)
- Rasgele erişimli (Random)
- İkili (Binary)
OPEN
Belirtilen aygıt(cihaz)da G/Ç(Giriş/Çıkış = I/O: Input/Output) işlemleri yapmak için kullanılır.
Üzerinde herhangi bir G/Ç işlemi gerçekleştirilmeden önce bir dosya
açılmalıdır.
OPEN, dosyaya veya cihaza G/Ç için bir arabellek ayırır ve arabellek
ile kullanılan erişim modunu belirler.
OPEN komutunun 2 değişik söz dizimi(syntax) vardır.
1. söz dizimi:
OPEN mod , [#] dosya numarası , dosya [,kayıt genişliği]Bu söz dizimi eski BASIC sürümleri ile uyum için vardır. O yüzden ayrıntıya gerek yoktur.
Gelişmiş özelliklere sahip olduğu için 2. söz diziminin kullanılması tavsiye edilir.
2. söz dizimi:
OPEN dosya [FOR mod] [ACCESS erişim tipi] [kilit] AS [#]dosya numarası [LEN=kayıt genişliği]dosya: Cihaz veya "Sürücü:\klasör\dosyaadı.txt" şeklinde açacağınız dosya adresini ve adını tanımlayan metin.
G/Ç için kullanılabilecek cihazlar:
- KYBD:
Klavye aygıtı - SCRN:
Ekran aygıtı - COMn:
Seri port. Haberleşme aygıtı(modem) - LPTn:
Paralel port, Yazıcı - CONS:
Konsol aygıtı
Cihaz belirtilmediğinde disk dosyası kullanılır.
mod: Açılan dosyanın ne amaçla kullanılacağı mod ile belirlenir.
Mod Türleri:
- INPUT: Sıralı erişimli dosyadan veri okumak için
- OUTPUT: Sıralı erişimli dosyaya veri yazmak için
- APPEND: Sıralı erişimli dosyanın sonuna veri eklemek için
-
RANDOM: Rastgele erişimli olarak dosyayı açar. Varsayılan
moddur.
Eğer ACCESS ile dosya erişim tipi belirtilmezse dosya şu sıraya göre açılmaya denenir.
- Okuma/Yazma (Read/Write)
- Yalnız yazma (Write-only)
- Yalnız okuma (Read-only)
- BINARY: GET ve PUT kullanarak dosyadaki herhangi bir bayt konumunda bilgi okunabilir veya yazılabilir.
erişim tipi: Açık dosya için verilen izinler
Dosya erişim tipleri:
- READ(okuma),
- WRITE(yazma)
- READ WRITE (okuma ve yazma) RANDOM ve BINARY dosyalarda kullanılabilir.
Kilitleme türleri:
- SHARED: Herhangi bir makinedeki herhangi bir işlem veya program dosyayı okuyabilir veya yazabilir. Kilitli değil.
- LOCK READ: Okumaya kilitli
- LOCK WRITE: Yazmaya kilitli
- LOCK READ WRITE: Yazma ve okuma izni verilmez.
Kullanılmayan dosya numarası FREEFILE fonksiyonu ile öğrenilebilir.
kayıt genişliği : Rastgele erişimli(Random) dosyalarda kayıt
genişliğini(bir kayıttaki karakter sayısı) belirtmek içindir. 32767'den büyük
olamaz. Binary dosyalarda kayıt genişliği dikkate alınmaz
Örneğin DOS'daki 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.
C: sürücüsü içinde ORNEK klasörü içine dosya.txt adında yeni bir dosya oluşturur.
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.
Çü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 kapatmayı unutmayın.
Dikkat ! : Dosyalar açıkken elektrik kesintisi veya bilgisayar kilitlenmesi durumunda açık olan dosyalarınıza zarar gelebilir.
Eğer dosya yoksa File Not Found (Dosya bulunamadı) hatası oluşur
Dosya okuma amaçlı olarak açılır.
Aşağıdaki örneği inceleyiniz.
OUTPUT olarak açılırsa dosyadaki eski bilgiler silinir.
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ı.
Aktarılacak bilgiler: Personelin; adı, soyadı, doğum yeri, doğum yılı, maaşı.
Dikkat : Bu dosyaların yedeğini almadan bunu denemeyin.
Örnek:
'OPEN ile aygıtları kullanma '©2020 Mesut Akcan 'mesutakcan.blogspot.com CLS PRINT "-- Klavyeden oku --" PRINT "Adınız ?" dn = FREEFILE OPEN "KYBD:" FOR INPUT AS #dn INPUT #dn, a$ CLOSE #dn PRINT "-- Konsola yazdır --" OPEN "CONS:" FOR OUTPUT AS #2 PRINT #2, a$ CLOSE #2 PRINT PRINT "-- Ekrana yazdır --" OPEN "SCRN:" FOR OUTPUT AS #3 PRINT #3, a$ CLOSE PRINT "-- LPT1 deki yazıcıya yazdır --" OPEN "LPT1:" FOR OUTPUT AS #4 PRINT #4, a$ CLOSE
Sıralı Erişimli Dosya Oluşturma ve Dosyaya 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 DOS'daki 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\veriler.txt" FOR OUTPUT AS #1Bu 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şturur.
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 bir 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 var olan içeriği silinecektir
2. satırı ekleyelim.
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ı yazmamıza gerek yok, açık olan dosyanın numarası yeterli.
3. ve 4. satırı ekleyelim.
Bu satırlar açık olan dosyaya verileri kaydeder.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 bir 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 var olan 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ı yazmamıza gerek yok, açık olan dosyanın numarası yeterli.
3. ve 4. satırı ekleyelim.
PRINT #1, "bir"; "iki"; 4.5, "yedi"; TAB(30); "on" WRITE #1, "bir", "iki", 4.5, "yedi", "on"5. satırı ekleyelim.
PRINT "Dosya uzunluğu : " ; LOF(1)6. satır
CLOSE #1Bu 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 kapatmayı unutmayın.
Şimdi dosyayı kaydettiğiniz klasöre ulaşın.
Windows'daysanız dosya üzerinde çift tıklayarak,
DOS'da iseniz komut satırına EDIT C:\ORNEK\dosya.txt yazarak ya da TYPE C:\ORNEK\dosya.txt yazarak dosya içeriğini görebilirsiniz.
Windows'daysanız dosya üzerinde çift tıklayarak,
DOS'da iseniz komut satırına EDIT C:\ORNEK\dosya.txt yazarak ya da TYPE C:\ORNEK\dosya.txt yazarak dosya içeriğini görebilirsiniz.
QuickBasic editörünü kapatmadan komut satırına ulaşmak için menüden
File / DOS Shell
Editöre geri dönmek için komut satırında EXIT komutunu girin.
Windows'da dosya içeriğine bakarsanız Türkçe karakterlerin yerine farklı
karakterler olduğunu göreceksiniz. Bu normaldir.
Kodların tamamı:
OPEN "c:\ORNEK\dosya.txt" FOR OUTPUT AS #1 PRINT #1, "Edep öğrenilmeden ilim öğrenilmez." PRINT #1, "bir"; "iki"; 4.5, "yedi"; TAB(30); "on" WRITE #1, "bir", "iki", 4.5, "yedi", "on" PRINT "Dosya uzunluğu : "; LOF(1) CLOSE #1
PRINT#
PRINT komutunun ekrandaki etkisi ne ise aynen o şekilde dosyaya yazar.
PRINT# komutunda veriler arasına virgül, noktalı virgül, TAB, SPC, USING komutları da eklenebilir.
PRINT# komutunda veriler arasına virgül, noktalı virgül, TAB, SPC, USING komutları da eklenebilir.
WRITE#
Veriler arasına virgül koyarak dosyaya yazar. String veriler çift
tırnak(") ile kaydedilir
LOF
(Long Of File) Dosya numarasıyla belirtilen dosyanın uzunluğunu bayt cinsinden verir.CLOSE
Numarası belirtilen dosyayı kapatır. Dosya no belirtilmezse tüm
dosyalar kapatılır.
Açık olan birden fazla dosyayı kapatmak için;
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.
Kapatılan dosya üzerinde işlem yapılamaz.
Dikkat ! : Dosyalar açıkken elektrik kesintisi veya bilgisayar kilitlenmesi 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şturacakOPEN "c:\ORNEK\veriler.txt" FOR OUTPUT AS #1 WRITE #1, "Mesut", "Akcan", 1970, "Adana" CLOSE #1Üstteki programın oluşturduğu dosya üzerinde okuma işlemi yapacağız
OPEN "c:\ORNEK\veriler.txt" FOR INPUT AS #1Dosyayı 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.
CLOSEAçık dosya(lar) kapanır.
Kodların tamamı:
OPEN "c:\ORNEK\veriler.txt" FOR INPUT AS #1 INPUT #1, A$, S$, DT%, DY$ CLS PRINT A$, S$, DT%, DY$ CLOSE
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.
LINE INPUT#
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) 'dosya sonu değilken a = a + 1 IF a > 21 THEN a = 0: SHELL "pause" LINE INPUT #1, K$ 'sıradaki satırı oku PRINT K$ LOOP
Dosyaya Ekleme Yapma
OPEN "c:\ORNEK\veriler.txt" FOR APPEND AS #1Daha önceden kayıtlı dosyaya yeni bilgiler eklemek gerekirse dosya APPEND olarak açılır.
OUTPUT olarak açılırsa dosyadaki eski bilgiler silinir.
WRITE # 1 , "Mesut" , "Akcan" , 1970 , "Adana" CLOSEŞimdi dosyadaki bilgileri okuyup ekrana yazalım
DEFINT A-Z NO = FREEFILE 'dosya numarası CLS OPEN "c:\ORNEK\veriler.txt" FOR INPUT AS #NO DO UNTIL EOF(NO) 'dosya sonu değilken 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.
Ö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.
Okumaya başlanacak konumu(byte) belirtir.Dosyadaki kayıtların bitip bitmediği bu komutla anlaşılır.
SEEK
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
10 personeli olan bir kurumda personel kayıtları bir dosyaya aktarılacak. Bilgiler klavyeden aktarılacak.Aktarılacak bilgiler: Personelin; adı, soyadı, doğum yeri, doğum yılı, maaşı.
DECLARE SUB cizgi () DEFINT A-Z: DEFSTR S: DIM m AS LONG OPEN "C:\ORNEK\personel.txt" FOR OUTPUT AS #1 FOR n = 1 TO 10 CLS cizgi PRINT n; ". personelin bilgilerini giriniz" cizgi INPUT "Adı:"; sa INPUT "Soyadı:"; ss INPUT "Doğum yeri:"; sd INPUT "Doğum yılı:"; y INPUT "Maaşı:"; m WRITE #1, sa, ss, sd, y, m NEXT CLOSE cizgi PRINT "... İşlem tamam ! ..." SUB cizgi PRINT STRING$(40, "-") END SUBPROBLEM : 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.
Önceki Bölüm: 9: Sayılarla ilgili işlemler | Sonraki Bölüm: 11: Dosya İşlemleri-2 |
Hiç yorum yok:
Yorum Gönder