6. Metin dosyaları
Metin dosyası, metin satırları içeren bir dosyadır. Örnekler üzerinden bu tür dosyaların oluşturulmasını ve kullanımını inceleyelim.
6.1. Oluşturma ve kullanım
Program |
![]() |
Sonuçlar |
Açıklamalar
- 7. satır, CreateObject("Scripting.FileSystemObject") işlevi aracılığıyla "Scripting.FileSystemObject" türünde bir dosya nesnesi oluşturur. Bu tür bir nesne, sadece metin dosyalarına değil, sistemdeki tüm dosyalara erişim sağlar.
- 9. satır, "TextStream" nesnesini oluşturur. Bu nesnenin oluşturulması, testfile.txt dosyasının oluşturulmasıyla ilişkilidir. Bu dosya, c:\dir1\dir2\....\testfile.txt gibi mutlak bir adla değil, testfile.txt gibi göreceli bir adla belirtilir. Dolayısıyla, dosyanın çalıştırma komutunun verildiği dizinde oluşturulacaktır.
- Windows dosya sistemi, metin dosyası veya metin dışı dosya gibi kavramları tanımaz. Sadece dosyaları tanır. Dolayısıyla, bu dosyayı metin dosyası olarak işleyip işlemeyeceğine karar vermek, dosyayı kullanan programa kalmıştır.
- 9. satır, atama için kullanılan set komutunun kaynağı olan bir nesne oluşturur. Bir metin dosyası nesnesinin oluşturulması, 2 nesnenin oluşturulmasını gerektirir:
- Scripting.FileSystemObject nesnesinin oluşturulması (7. satır)
- ardından, birden fazla parametre kabul eden Scripting.FileSystemObject nesnesinin OpenTextFile yöntemi aracılığıyla "TextStream" (metin dosyası) nesnesinin oluşturulması:
- işlenecek dosyanın adı (zorunlu)
- dosyanın kullanım modu. Bu, 3 olası değeri olan bir tamsayıdır:
- 1: dosyanın okuma modunda kullanılması
- 2: Dosyanın yazma modunda kullanılması. Dosya henüz mevcut değilse ve 3. parametre mevcutsa ve değeri true ise, dosya oluşturulur; aksi takdirde oluşturulmaz. Dosya zaten mevcutsa, üzerine yazılır.
- 8: dosyaya ekleme modunda kullanım, c.a.d. dosyanın sonuna yazma. Dosya henüz mevcut değilse ve 3. parametre mevcutsa ve değeri true ise, dosya oluşturulur; aksi takdirde oluşturulmaz.
- 11. satır, oluşturulan TextStream nesnesinin WriteLine yöntemini kullanarak bir metin satırı yazar.
- 13. satır dosyayı "kapatır". Bundan sonra dosyaya ne yazılabilir ne de okunabilir.
- 16. satır, daha önce olduğu gibi aynı dosyayı işlemek üzere, ancak bu sefer "ekleme" modunda yeni bir "TextStream" nesnesi oluşturur. Yazılacak satırlar, mevcut satırların arkasına eklenecektir.
- 18. satır, vbCRLF sabitinin metin dosyalarında satır sonu işareti olduğunu bilerek iki yeni satır yazar.
- 20. satır dosyayı tekrar kapatır
- 23. satır dosyayı "okuma" modunda yeniden açar: dosyanın içeriğini okuyacağız.
- 27. satır, TextStream nesnesinin ReadLine yöntemini kullanarak bir metin satırını okur. Dosya "açıldığında", dosyanın ilk metin satırında konumlandırılırız. Bu satır ReadLine yöntemi ile okunduktan sonra, imleç ikinci satıra geçer. Böylece Readline yöntemi sadece geçerli satırı okumakla kalmaz, ardından otomatik olarak bir sonraki satıra "ilerler".
- Tüm metin satırlarını işlemek için, ReadLine yöntemi bir döngü içinde tekrar tekrar uygulanmalıdır. Bu döngü (26. satır), TextStream nesnesinin AtEndOfStream özniteliği true değerine ulaştığında sona erer. Bu, dosyada okunacak satır kalmadığı anlamına gelir.
6.2. Hata durumları
Sık karşılaşılan iki hata durumu vardır:
- var olmayan bir dosyanın okuma modunda açılması
- OpenTextFile yönteminin çağrılmasında üçüncü parametre olarak false değerinin kullanılmasıyla, mevcut olmayan bir dosyanın yazma modunda açılması veya eklenmesi.
Aşağıdaki program, bu hataları nasıl tespit edebileceğinizi gösterir:
6.3. IMPOTS uygulaması ve bir metin dosyası
Vergi hesaplama uygulamasını, vergi hesaplaması için gerekli verilerin data.txt adlı bir metin dosyasında olduğunu varsayarak ele alıyoruz:
12620 13190 15640 24740 31810 39970 48360 55790 92970 127860 151250 172040 195000 0
0 0,05 0,1 0,15 0,2 0,25 0,3 0,35 0,4 0,45 0,5 0,55 0,6 0,65
0 631 1290,5 2072,5 3309,5 4900 6898,5 9316,5 12106 16754,5 23147,5 30710 39312 49062
Bu üç satır, sırasıyla uygulamanın sınır tabloları olan coeffR ve coeffN'teki verileri içermektedir. Uygulamamızın modüler yapısı sayesinde, değişiklikler esas olarak bu üç tabloyu oluşturmakla görevli getData prosedüründe yapılmaktadır. Yeni program şu şekildedir:
Program |
|
Açıklamalar:
- data.txt metin dosyasında değerler bir veya daha fazla boşlukla ayrılmış olabilir; bu nedenle satırdaki değerleri almak için split işlevini kullanmak mümkün değildir. Bu nedenle bir düzenli ifade kullanmak zorunda kalındı
- getData işlevi, üç sınır tablosunun yanı sıra (coeffR, coeffN), hata olup olmadığını belirten bir sonuç da verir. Bu sonuç, iki öğeden oluşan bir tablo varyantıdır. İlk eleman bir hata kodudur (hata yoksa 0), ikincisi ise hata olması durumunda hata mesajıdır.
- getData işlevi, data.txt dosyasında bulunan değerlerin geçerliliğini kontrol etmez. Gerçek bir senaryoda bunu yapması gerekir.
