txt den sıralı veri almak...

1 2
05/12/2008, 01:16

karaayhan

değerli forum üyesi arkadaşlar,
elimde bir txt veri dosyası var ama ekte de göreceğiniz gibi bir kişiye ait veriler
beş(5)satır da yazılı ve bunu yazı boyutunu küçültsemde tek satır yapmak için çok veri bulunduğundan kolay olmuyor ve pratik de değil bunu Access veritabanına çektiğimde(metin dosyasından veri al) örnek mdb de göreceğiniz gibi bir tabloya aynı kişiye ait olsa bile bir kişinin verilerini 5 satırda gösteriyor ve araya boş bir satır ekliyor benim yapmak istediğim
bir kişiye ait olan o 5 satırlık veriyi tek satır halinde elde etmek

bunu yapabilirmiyiz teşekkürler kolay gelsin..
05/12/2008, 01:52

mehmetdemiral

Bence verileri veri alma sihirbazı ile elle değil, bir modülle almalısınız. O zaman değerleri değişkenlere atayıp "not" şeklinde belirlenmiş alanlarda & veya + işaretleriyle birleştirirsiniz. Bunu yapmak için basit bir Sql sorgusu yeterli.. Birleştirme yapacaksınız sonuçta.

Verileri vb ile alma konusunda karar verirseniz satır satır okutmanız lazım. Aralardaki boş satırları seperator olarak kullanacaksanız sorun olmaz. Seperatorlere gelene kadar okuma eylemi sürer. Ben size bununla ilgili benim kullandığım bir modülün kodlarını buraya aktarayım. (Not: Modül bana ait değildir, ama kendi isteğime göre düzenledim. Şu andaki halini göndereyim size. Bu şekilde 8 adet farklı dosyadan veri alabiliyorum. Dosyaların yerlerini de elle gösterme şeklinde düzenledim.


Kod:
Sub OpenTextFileTest1()
    Const ForReading = 1, ForWriting = 2, ForAppending = 8
    Dim fs, f
    Dim name, name1, text, path As String
    Dim txtLen, adetYıldız, adetTarih As Long
    Dim cnn As New ADODB.Connection
    Dim rst As New Recordset
    Dim fileName As String
    Dim result As Integer
    Dim i As Integer
    Dim dosya, Klasor
    Dim strKlasöradı As String
    On Error GoTo Err
    strKlasöradı = BrowseFolder("Seçmek istediğiniz klasör?")
    Klasor = strKlasöradı

'******işletme***************
    ChDir (Klasor)
       dosya = Dir("*İsletmeBilgileri.txt")
    DoCmd.SetWarnings True
  
            name = dosya
            Set fs = CreateObject("Scripting.FileSystemObject")
            Set f = fs.OpenTextFile(name, 1, -2)
            text = f.ReadAll
        
    Set fs = CreateObject("Scripting.FileSystemObject")
    Set f = fs.OpenTextFile(name, 1, -2)
    Set cnn = CurrentProject.Connection
    rst.Open "işletme", cnn, adOpenKeyset, adLockOptimistic, adCmdTableDirect
    s = 0
    Do While f.AtEndofStream <> True
    text = f.readLine
    s = s + 1
    If s = 1 Then madi = Trim(text)
    If s <> 1 Then
        STRarray = Split(text, "$")
        rst.AddNew
        rst("işletmekodu") = STRarray(0)
        rst("işletmeadi") = STRarray(1)
        rst("ilbölgekodu") = STRarray(3)
        rst("ilçekodu") = STRarray(4)
        rst("kasabakodu") = STRarray(5)
        rst("köykodu") = STRarray(6)
        rst("anaişletmekodu") = STRarray(7)
        rst.Update
    End If
    Loop
    f.Close
    Set f = Nothing
    Set fs = Nothing
    Set rst = Nothing
    Set cnn = Nothing
Err:
If Err.Number = 62 Then
MsgBox "Belirttiğiniz dosya boş", vbOKOnly, "UYARI"
Else
End If

'***************işletme sonu**************

Burdan sonra başka dosyaya geçiliyor ama sizin örnekte tek txt dosyası olduğu için gerekli değil. Kodları iyi inceleyin, kendinize uyarlayın. Bu arada projenizin referans penceresinde önce ado2.1 sonra da dao 3.6 şeklinde sıralansın. Aksi taktirde gözat eylemi çalışmaz.

Kolay gelsin.
05/12/2008, 13:45

karaayhan

sayın mehmet bey,
ado2.1 referansını bulamadım
size zahmet uygulama içerisinde gösterebilirmisiniz..

teşekkürler..
05/12/2008, 14:08

alpeki99

ADO = Microsoft ActiveX Data Control 2.x oluyor. Tahminim XP kullanıyorsunuz o halde 2.8 vardır sizde. Yoksa bile en yüksek hangi versiyon varsa onu işaretleyin.
05/12/2008, 20:39

mehmetdemiral

Sevgili karaayhan
Ben bende çalışan haliyle mevcut projedeki referansları yazdım. Ama sevgili alpeki'nin dediği gibi, daha yeni versiyonlarda da sorun çıkmayacaktır. Ama sıralama önemli. Önce ado sonra dao olmazsa, komutlar hata veriyor. Bu arada ado için

c:\program files\common files\system\ado\msado21.tlb
(eğer daha yenisi varsa aynı yerde msado27 veya 28 olarak bulunacak)

dao için

c:\program files\common files\microsoft shared\dao\dao360.dll

dosyalarını kullanabilirsiniz.
06/12/2008, 13:13

karaayhan

sayın demiral isterseniz konuya buradan devam edelim zira otomatik olarak yükleme yapıyor bu kodlar.

ancak, istediğim kritere henüz ulaşamadım şöyleki;
txt de veriler bazen 5-6-7-8 satır olabiliyor ancak benim buradaki ayraç olarak kullanabileceğim olsa olsa aradaki boşluklar olabilir( 5-6-7-8 satırlık veri kümeleri arasındaki boşluklar) bunların arasındaki veriler bir kişiye ait o yüzden de bir satırda olmaları lazım ki bu kodlar o işi yapıyor ..

ilk satıların başındaki 11 karakterlik rakamlar tc kimlik numaralarını içeriyor.
bunlar başlangıç ikinci tc kimlik no'suna kadar bu kişiye ait oluyor bilgiler sonra ikinci kişiye geçiyor ...
teşekkürler.
1 2