Anasayfa | Akademik Forum | Sizden Gelenler | Sipariş
Menü Açıklamaları
Sorular - Cevaplar
Makaleler
Makrolar
Yerleşik İşlevler
Animasyonlar
Yumurtalar
Fonksiyonlar
MTK Programlar
ExcelCE
Dosya İndir
Neler Yaptık?
İletişim
Makaleler
TXT Dosyaları ve Excel İlişkisi - 1 - M. Temel Korkmaz - 01.07.2001
Temmuz 2001 sayımızda, son satırlarımızda “Bir TXT Dosyası Açmak” tan bahsedip, bir sonraki ay bu konuyu enine boyuna inceleyeceğiz demiştik. Excel ile ilgili sitemizi ziyaret edip “bu konu hakkında neden sitede de bilgi vermiyorsunuz?” diye epey sitemde bulunan arkadaşlarımız oldu. Burada şunu açıklıkla belirteyim ki, ExcelTurkiye sitesinin kendine has bir yayın izleme kuralı vardır. Her ne kadar sizlerden gelen mailleri cevapsız bırakmayıp, mutlaka cevap vermiş olsak da, sitede yayınlanması gereken konuları sizlerden gelen isteklerden ziyade çok ihtiyaç hissedilen konular üzerinde yoğunlaştırmaktayız. Diğer bir hususta, Dergide anlatacağımız konuları daha önceden sitede konu olarak yayınlamama kararı aldık. Ancak dergi yayınlandıktan 25-30 gün sonra sitede dergiye ait konuyu Pcmagazine Dergisi’ne atfen ExcelPC sayfaları olan http://www.excel.gen.tr sayfalarında kalıcı olarak yayınlamaktayız.

Şimdi konumuza dönelim ve kaldığımız yerden anlatmaya devam edelim. Geçen ay bir TXT dosyasının nasıl Excel’de açıldığını gördük. Şimdi de bir Excel dosyasının nasıl TXT olarak kaydedileceğini öğrenelim.

Bunun için yapılacak işlem çok kolay. Önce Şekil-1’deki gibi bir Excel Dosyası hazırlayalım.

Şekil-1:
Txt dosyasına dönüştürmeden önce Veriler.XLS dosyasını hazırlayın.

Bir XLS dosyası nasıl TXT dosyasına dönüştürülür bunu bir çoğumuz biliyoruz. Yine de bilmeyenler için kısaca bahsedelim.

1. Şekil-1’deki gibi Veriler.XLS adında bir Excel dosyası hazırlayın. Bu dosyayı bir çok kereler kullanacağımız için. Normal olarak kaydedin. Yani Dosya (File) menüsünden Kaydet (Save) komutunu tıklayın.

2. Bu defa aynı dosyayı, TXT olarak kaydetmek için, Dosya (File) menüsünden Farklı Kaydet (Save As) komutunu tıklayın.

Şekil-2:
Farklı Kaydet Penceresinden “Metin (Sekmeyle Ayrılmış) (*.txt)” seçeneğini seçin.

3. Farklı Kaydet penceresi açılacaktır. Bu pencereden Şekil-2’deki gibi Metin (Sekmeyle Ayrılmış) (*.txt) seçeneğini işaretleyin.

4. Kaydet (Save) düğmesine tıklayın.

Bu Ne Uyarısı?

Genelde  Excel97 versiyonundan itibaren Excel Çalışma kitabı açıldığında varsayılan Çalışma Sayfalarının 3 adet olarak ekrana geldiğini biliyoruz. Hemem hemen hepimizde ilk sayfada işlemlerimizi yaparız ve bazen diğer sayfaları da kaldırma ihtiyacı hissetmeyiz. Şekil-3’de aldığımız uyarı mesajı da bu konu ile alakalı.

Şekil-3: Eğer Veriler.XLS dosyanız birkaç sayfadan oluşuyorsa Şekil-3’deki gibi bir uyarı mesajı olacaksınız.

Siz dosyayı Txt olarak kaydetmek istediğiniz sadece aktif olan sayfanın dönüştürüleceği hakkında uyarıldınız. Tamam düğmesine tıklayın.

Haydaa Yine mi Uyarı?
Evet, yine bir uyarı. Fakat bu uyarı penceresi her bilgisayarda çıkmayabilir.(Şekil-4) Bizim uygulamamızda çıkmasının sebebi açık. 1. satırın dolgu rengi ve yazıtipi formatı farklı. Oysa bir Txt dosyası bu tür biçimleri desteklemez. Buradan hemen şunu anlayabiliriz, Excel’de farklı bir çok formatlar değişken olaylar vardır ve txt dosyaları bu işlemleri asla desteklemez. O halde bu tür desteklenmeyen işlemler dosyanızda varsa bu uyarılara razı olacaksınız demektir.

Şekil-4:
Bu defa txt dosyası ile ilgili uyumsuz özelliklere rastladık.

Evet düğmesine tıklayın ve dosyayı artık txt olarak kaydedin.

Şimdi hemen, “ama hiçbir şey olmadı, herhangi bir değişiklik olmadı, sayfa sayısından tutun formatlara kadar herşey aynı kaldı.” Diyen arkadaşlarımız sanırım biraz dikkatsiz. Sanki bir şey değişmemiş gibi görülebilir. Fakat Şekil-5’te kırmızı daire içerisine aldığımız bölgeye dikkat ederseniz, dosya adının “Veriler.xls” den “Veriler.txt” ye dönüştüğünü göreceksiniz. Ayrıca o anda verileriniz bulunduğu yani aktif olan sayfanızın adının da “Veriler” olarak değiştiğine dikkat edin.

Şekil-5:
Çalışma Kitabının Adı ve Çalışma sayfasının adının değiştiğine dikkat edin.

Sıra geldi asıl değişikliği görmeye.

Dosyanızı kapatın ve Windows Gezgini’nden dosyanızı kaydettiğini klasörün içersine gelin. Burada Veriler.XLS ve Veriler.TXT adında iki dosya göreceksiniz. Veriler.TXT tıklayın ve açın. Şekil-6 ile karşılaşacaksınız.

Şekil-6:
TXT dosyası Sekme ile ayrılmış olduğundan uzun isimler düzeni bozmuş gibi görünüyor.

Buraya kadar olan kısımda Bir XLS dosyasının TXT ye dönüşmesini manuel olarak gördünüz ve bu kadar işlemleri yapmak sizi belki de çok sıktı. O halde, artık bu işlemlerin makro ile nasıl yapıldığını öğrenelim.

Unutmayın!!! Her defasında Veriler.txt dosyasını silin ki, karışıklığa yol açmasın.

Sub TxtKaydet()
    ChDir "C:\Belgelerim\Dergi"
    ActiveWorkbook.SaveAs Filename:="C:\Belgelerim\Dergi\Veriler.txt", _
        FileFormat:=xlText, CreateBackup:=False
End Sub

Yukarıdaki kodu yazıp çalıştırdığınızda, yaptığımız bütün işlemleri Excel kendi başına halledecek ve size herhangi bir zahmet vermeden txt dosyanızı hazırlamış olacaktır. Şekil-6’daki görüntünün aynısı ile karşılaşacaksınız.

Şimdi, bu konuda bir adım ileri atalım ve bir TXT dosyasına nasıl veri yazdırılır bunu inceleyelim. Ama unutmayın bundan sonraki satırları iyi takip etmelisiniz. Çünkü artık Excel’den bir başka dosyayı kontrol edeceksiniz. Dos tabanlı programlama dillerini bilen arkadaşlar bu konuyu hemen anlayacaklardır.


DOSYALAMA ve VERİTABANI FONKSİYONLARI


Excel Çalışma kitabının sürekli olarak bir Elektronik Hesap Tablosu olduğunu vurgularız. Çünkü Excel ile çok güçlü hesaplamalar yapılabilir. Hemen hemen hiçbir programlamada olmayan çalışma rahatlığını Excel sayfalarında bulabilirsiniz. Bu hesaplamalar ister  Matematiksel ve Trigonometrik, ister İstatistiksel veya Finansal, isterse Mühendislik ile ilgili olsun, her sahada size rahat çözümler sunar. Bunun yanında ara sırada Excel’in bir veri ambarı olarak da kullanılabileceğini söyledik. Yani saklamak istediğiniz verileri Excel sayfalarını kullanarak saklayabilirsiniz. Sakladığınız bu veriler üzerinde rahatlıkla işlem yapabilir, düzenleyebilir, veri filtreleyebilir ve daha bir çok işlemi gerçekleştirebilirsiniz. Bunun örneklerini elinizdeki kitabın bir çok yerinde bulabilirsiniz.

Oysa şimdi anlatacağımız fonksiyonlar Excel’de hazırlanmış formlar ile ayrı bir veri tabanı oluşturmaya yönelik  bu tür bir veri tabanını diğer bir çok programlama dili kullanmaktadır. Burada anlatacaklarımız da Visual Basic Programlama dilinden hiç farklı değil. Dış bir veri tabanı oluşturmak, bu veritabanına veri göndermek ve bu veritabanından veri almak. İşte bu işleri yapabilmek için bazı fonksiyonları bilmemiz gerekiyor. Bu konuda, bu tip fonksiyonlardan bahsedeceğiz.

OPEN (Dosya Açmak) ve CLOSE (Dosya Kapatmak)


Belirlediğiniz dizinde bir dosya açmak ve içerisine veriler yazdırabilmek için aşağıdaki yöntemler kullanılabilir.

Open “.............” For Input As #1
Open “.............” For Binary Access Write As #1
Open “.............” For Output Shared As #1
Open “.............” For Binary Access Read Lock Read  As #1
Open “.............” For Random As #1 Len=Len(Kayit)

Açılan dosyaları kapatmak içinde Close deyimi kullanılır. Tabi ki kapanacak dosyanın dosya numarası da belirtilmelidir.

Close #[DosyaNo]

Aşağıda anlatacağımız örneklere başlamadan evvel “C” dizinin de boş bir klasör oluşturun ve klasöre herhangi bir isim verin. Oluşturacağımız veri dosyalarının bu klasörde toplanmasını istiyoruz. Biz bu klasöre “Veri” ismini verdik, dosyalarda kullanacağımız yolda “C:\Veri\......” oldu.

Aşağıdaki kodları yazın ve çalıştırın. (Şekil-7)

Sub Veriler1()
    Open "C:\Veri\Test.TXT" For Output As #1
       Print #1, "M.Temel Korkmaz"
    Close
End Sub

Şekil-7: Veriler klasöründe Test .TXT dosyasını açtık ve verimizi yazdırdık.

İlk olarak “Open” deyimini kullanarak bir dosya açtık. Açtığımız dosyaya ise “Test.TXT” ismini verdik. Bu dosyayı “C:\Veri” dizininde açtık. “Output” deyimini kullanarak sıralı erişim olarak dosyayı açtık. Dosya numaramızı ise “” olarak belirttik. Birinci satırda kısaca şu işlemi yaptık.

“C:\Veri\” dizinine sıralı erişimli olmak üzere 1 numaralı Test.TXT dosyası açtık.

İkinci satırda ise “Print” deyimini kullanarak 1 numara lı dosyaya “M. Temel Korkmaz” verisini yazdırdık.

Üçüncü satırda ise açtığımız dosyayı kapattık.

“C:\Veriler\Test.TXT” klasörüne dosyasına baktığınızda yukarıdaki resmin benzerini göreceksiniz. Şimdi örneği biraz daha geliştirelim. Bu arada eğer dikkat ettiyseniz, bütün işlemleri VBA sayfasından hallettik, yani Excel Çalışma tablosunu daha kullanmadık. (Şekil-8)

Sub Veriler2()
    Dim i As Integer

    Open "C:\Veri\Test1.TXT" For Output As #1
    For i = 1 To 10
        Print #1, "M.Temel Korkmaz"
    Next i
    Close
End Sub

Şekil-8:
TXT dosyasına dilediğimiz miktarda aynı veriyi kolayca yazdırabiliriz.

Mantık olarak yukarıda gerçekleştirdiğimiz işlemlerin aynısı yaptık. Arada tek bir fark var. O da For...Next döngüsünü kullanarak, “M.Temel Korkmaz” verisini 10 defa sıralı erişim olarak yazdırdık. (Şekil-9)

Sub Veriler3()
  Open "C:\Veri\Test2.TXT" For Output As #1
    Print #1, "M.Temel Korkmaz", "Merve Korkmaz", "Mücahide Korkmaz"
  Close
End Sub

Şekil-9: Bu defa 2 ve 3 yaşlarındaki kızlarımın ismini de kendi ismimin yanına virgül koyarak ekledim. İlk yazdığımız kod ile aynı mantığı kullandık.

Yukarıda kullandığımız For...Next döngüsünü bu defa birkaç dosyayı aynı anda açmak için kullanalım. Bu arada dosya numarası dediğimiz deyimin ne olduğunu daha iyi kavrayacaksınız. Aşağıdaki kodu yazın ve çalıştırın. (Şekil-10)

Sub Veriler4()
    Dim i As Integer

    For i = 1 To 4
        Open "C:\Veri\Deneme" & i & ".TXT" For Output As #i
            Print #i, "M.Temel Korkmaz"
        Next i
    Close
End Sub

Şekil-10: Windows Gezgini’nden siz de yaptıklarınızı kontrol edin.

Kodu çalıştırdığınızda “Veri” klasörünün içerisinde 4 adet “Deneme” dosyası açılacak ve her birisine bir sıra numarası verilecek.

Bu dosyalardan hangisine tıklarsanız Şekil-11’deki görüntünün aynısını alacaksınız.

Şekil-11: 4 dosyanında aynı olduğunu kontrol edin.

For i = 1 To 4

Bu satırla, For...Next bloğu arasında yapılacak işlemlerin 4 defa tekrarlanacağı bildiriliyor. İlk döngüde “i” sayacına 1 değeri atanacak.

Open "C:\Veri\Deneme" & i & ".TXT" For Output As #i 

“C:\Veri” klasörünün altında “Deneme1.TXT” olarak bir dosya açılıyor ve bu dosyaya i=1 olduğu için “” dosya numarası veriliyor. İkinci döngüde ise aynı satıra gelindiğinde bu defa i=2 olacak ve “” dosya numaralı “Deneme2.TXT” dosyası açılacak.

Print #i, "M.Temel Korkmaz"

İlk döngüde “” numaralı dosyaya “M.Temel Korkmaz” yazdıracak. İkinci döngüde ise aynı işlemi i=2 olduğu için 2 numaralı dosyaya yazdıracak. Döngü bu şekilde 4 defa tekrarlanacak ve aynı işlemleri 4 dosya için gerçekleştirecek.

Test2.TXT dosya örneğine benzer bir örnek daha veriyoruz. Aralarındaki tek fark kod içerisinde, veriler  arasına bu defa virgül “,” yerine noktalı virgül “;” koyduk.

Sub Veriler5()
  Open "C:\Veri\Test3.TXT" For Output As #1
  Print #1, "M.Temel Korkmaz"; "Merve Korkmaz"; "Mücahide Korkmaz"
  Close
End Sub

Kodu çalıştırdığınızda Şekil-9’a benzer bir görüntü elde edeceksiniz.

Sıra geldi VBA sayfası ile Excel Çalışma Sayfası arasında ilişki kurmaya. Aslında bu çok kolay bir yöntem. Verileri VBA sayfasına yazmak yerine Excel Çalışma sayfasına yazılmış verileri alıp, oluşturacağımız dosyaya kaydedeceğiz.

Kodu çalıştırmadan evvel “Sayfa1” deki A1 hücresine bir veri girin. Biz “Muhammed Temel Korkmaz” verisini girdik.

Sub Veriler6()
    Open "C:\Veri\Test4.TXT" For Output As #1
        Print #1, Worksheets("Sayfa1").Cells(1, 1).Value
    Close
End Sub

Bu defa birkaç tane hücreyi kullanarak dosyaya veri aktarma işlemini gerçekleştirelim. Bunun için biz Excel Çalışma sayfasını aşağıdaki gibi hazırladık. (Şekil-12)

Sub Veriler7()
    Open "C:\Veri\Test5.TXT" For Output As #1
    For i = 1 To 10
      Print #1, Cells(i, 1), Cells(i, 2)
    Next i
    Close
End Sub

Şekil-12: Belirlediğimiz Excel hücrelerini TXT dosyasına aktardık.

Aklınıza bazı sorular takıldığını biliyoruz. Mesela “neden dosyaya aktardığımız veriler düzgün sıralar halinde çıkmıyor? gibi. Daha bu ne ki? İleride karma karışık dosyalar göreceksiniz. Şimdilik konuyu sırasıyla takip edin, bir çok sorunuza cevap alacaksınız.

Buraya kadar anlattığımız kodlar sıralı erişim örneklerinden biri olan “Output” deyimi ile ilgiliydi. Aşağıda verdiğimiz örnek ise Rasgele erişim metodu olan “Random”  deyimini ve buna bağlı olarak da “Put” fonksiyonunu kullanacağız. Konuyu açıklığa kavuşturmadan evvel aşağıda verdiğimiz örnekleri inceleyin. (Şekil-13)

Sub Veriler8()
    Dim veri1 As String * 20
    Dim veri2 As String * 20
    Dim veri3 As String * 20
 

    Open "C:\Veri\Test6.TXT" For Random As #1 Len = 20
      veri1 = "Muhammed Temel Korkmaz"
      veri2 = "Ahmet Demirkol"
      veri3 = "Sami Eren"
      Put #1, 1, veri1
      Put #1, 2, veri2
      Put #1, 3, veri3
    Close
End Sub

Şekil-13: Belirlediğimiz alan miktarına göre verilerimiz yazıldı.

İlk verimiz olan “Muhammed Temel Korkmaz”ın son iki harfinin yazılmadığına dikkat edin.  Bunun nedenini şu şekilde açıklayabiliriz. Dosyalara yazdırılacak her veri, bir kayıt uzunluğuna sahiptir. Bunu şu şekilde düşünün: Kaydettiğiniz dosya bir Excel Ça lışma sayfası  gibi tablolardan oluşsun. Sizin yapacağınız kayıtın verileri karakterlerden oluşacaktır. Her karakter 1 hücreye yerleşsin. Mesela “M. Temel Korkmaz” verisi dosya alanına aşağıdaki gibi yerleşecektir.
M .   T e m e l   K o r k m a z            

Sayım yaptığınızda, bu verinin dosyada 16 hücrelik yer kapladığını göreceksiniz. Tabi bu sayıma nokta ve boşluklarda dahil edilecektir. Klavyeden tuşladığınız  her şeyi bir karakter olarak düşünün ve bu karakterlerin de dosya alanında 1 baytlık yer tuttuğunu düşünün.

Yukarıda verdiğimiz örnekte ise her veriye 20 karakterlik yer ayırmıştık.

    Dim veri1 As String * 20
    Dim veri2 As String * 20
    Dim veri3 As String * 20

Bu verilerin her biri için dosya alanında 20 karakterlik yer ayrılmıştır. Yani, dosya alanı aşağıdaki gibi olacak.

“Muhammed Temel Korkmaz” verisi boşluklar dahil 22 karakterden oluşmaktadır. Oysa bu veriye ayrılan alan 20 karakterliktir. Dolayısı ile bu verinin son iki karakterinin dosyaya yazdırılması mümkün olmayacaktır.

Şimdi dosyaya yazma fonksiyonları hakkında genel bilgileri verelim.

Konunun başında da belirttiğimiz gibi dosyaya veri yazdırmanın 3 yöntemi vardır. Bunlar Sıralı Erişim, Rasgele Erişim ve Binary (Karakterlere) Erişim’lerden oluşmaktadır. Dosya açmak için kullanılan yöntem ise Open komutudur. Bir dosya açabilmek için aşağıdaki yöntemi izlemelisiniz.

Open
“Dosya Adı ve Yolu” For [Açma Metodu] Access [Erişim Modu] [lock] As #  [Dosya Numarası] Len [Kayıt Uzunluğu]

Dosya Adı ve Yolu :
Açmak istediğiniz dosyanın bulunduğu dizin ve adıdır.

Açma Modu :
Dosyaların açılacağı yöntemi belirlemek için kullanılır.

Erişim Modu :
Dosyanın açılacağı parametreyi belirler.

Lock :
Dosyanın açılması sağlandığında, farklı programların bu dosyaya erişimini engellemek için kullanılır.

Dosya Numarası :
Dosyanın kayıt numarası denilebilir. Her açılan dosyaya bir numara verilir ve dosyaya  ulaşmak istenildiğinde bu numara kullanılır.

Kayıt Uzunluğu :
Dosyaya kaydedilecek verinin uzunluğunu belirler.

Şimdi bu tariflerin açıklamalarını yapalım.

Açma Modu

Dosyalar 5 ayrı şekilde açılırlar. Bunlar sırasıyla; Random, Binary, Input, Output, Append modlarıdır.

Random Modu

Kayıtlar dosyaya yazılırken, belirtilen kayıt uzunluğuna göre yazılırlar. Kaydedilen veri ister belirlenen uzunluktan az, isterse fazla olsun,  dosyada kaplayacağı alan belirtilen kayıt uzunluğu kadardır.

Binary Modu
Kayıtlar dosyaya bu modda yazdırıldığı zaman, ulaşmak istediğiniz karaktere karakterin numarasını vererek ulaşabilirsiniz. Diğer modların aksine bu mod kayıtlara sadece bir bütün olarak değil, karakter karakter olarak ulaşabilir.

Input Modu
Sıralı erişim olan bu mod, dosyadaki kayıtları okumak için kullanılır.

Output Modu
Bu da sıralı erişim modudur. Input’un tersine bu mod dosyaya yazdırmak için kullanılır.

Append Modu
Input ve Output modları gibi sıralı erişimi olan bir moddur. Bu modun Output’tan tek farkı dosya göstericisinin dosyanın sonunda durmasıdır. En son yazılan kayıt, dosyanın en sonuna eklenecektir.

Erişim Modu

3 ayrı erişim modu bulunmaktadır. Read, Write, Read Write

Read Modu : Dosyayı salt okunur olarak açmak için kullanılır.
Write Modu : Dosyaya sadece yazmak için kullanılır.
Read Write Modu : Dosyaya hem okumak hem de yazmak için kullanılır.

Lock

Shared : Diğer programlar dosyayı hem açar, hem de yazarlar.
Read : Diğer programlar sadece yazabilirler, okuyamazlar.
Write : Diğer programlar sadece okuyabilirler, yazamazlar.
Read Write : Diğer programlar okuyamaz ve yazamazlar.

Bu ay da Excel makrolarına ayrılan sayfaların sonuna geldik fakat, anlattığımız konuyu henüz bitirmedik. Değişik örneklerle önümüzdeki ay yine konumuza devam edeceğiz.

Destek
M.ÖZTÜRK - Y.KARAMAN
Bu siteyi, "Hayatını çocuklarının Ahlâklı ve Dürüst yetişmesi için harcamış olan Cefakar ve Fedakar, Canım ANNEM'e adadım."
Copyright © 1998-2011 M. Temel Korkmaz - Tüm hakları saklıdır.