• DİKKAT

    DOSYA İndirmek/Yüklemek için ÜCRETLİ ALTIN ÜYELİK Gereklidir!
    Altın Üyelik Hakkında Bilgi

Soru Text Belgesinden Veri Almak

ragnorak

Altın Üye
Katılım
4 Haziran 2016
Mesajlar
208
Excel Vers. ve Dili
Excel 2021
Kod:
dosya = Application.GetOpenFilename(("Text Files (*.csv; *.txt), *.csv; *.txt"), 1, "Dosya Seçiniz")
If dosya <> "False" Then xx = dosya

Dim fn As String, ff As Integer, txt As String

txt = Space(FileLen(xx))
ff = FreeFile
Open xx For Binary As #ff
Get #ff, , txt
Close #ff

Dim myArray() As String
Dim i As Integer

myArray = Split(txt, vbCrLf)

fx = ListBox2.ListCount

For i = 0 To UBound(myArray)
With ListBox2
.AddItem
.LIST(i + fx, 1) = Split(myArray(i), ";")(0)
.LIST(i + fx, 2) = Format(Split(myArray(i), ";")(1), "#,###0.000")
End With
Next

Ekli text dosyasından yukarıdaki kod ile listbox'a veri çekiyorum. Sorunum; Mükerrer kayıtların toplam şeklinde gelmesini istiyorum.
Not: Dosyadaki ";" den sonraki ilk sayı miktar, gerisinin bir önemi yok.
 

Ekli dosyalar

  • 001.txt
    001.txt
    894 bayt · Görüntüleme: 3
Kod:
    Dim dosya, ff As Integer, txt As String
    dosya = Application.GetOpenFilename(("Text Files (*.csv; *.txt), *.csv; *.txt"), 1, "Dosya Seçiniz")
    If dosya = "False" Then Exit Sub

    txt = Space(FileLen(dosya))
    ff = FreeFile
    Open dosya For Binary As #ff
    Get #ff, , txt
    Close #ff

    With CreateObject("Scripting.Dictionary")
        For Each b In Split(txt, vbCrLf)
            If InStr(b, ";") Then
                bl = Split(b, ";")
                If Not .exists(bl(0)) Then
                    ListBox2.AddItem
                    ListBox2.List(ListBox2.ListCount - 1, 0) = bl(0)
                    ListBox2.List(ListBox2.ListCount - 1, 1) = Format(bl(1), "#,###0.000")
                    .Item(bl(0)) = ListBox2.ListCount - 1
                Else
                    ListBox2.List(.Item(bl(0)), 1) = Format(Val(ListBox2.List(.Item(bl(0)), 1)) + bl(1), "#,###0.000")
                End If
            End If
        Next b
    End With
 
Harika olmuş. Elinize sağlık. Teşekkür ederim.
 
Kod:
    Dim dosya, b As String, bl
    dosya = Application.GetOpenFilename(("Text Files (*.csv; *.txt), *.csv; *.txt"), 1, "Dosya Seçiniz")
    If dosya = "False" Then Exit Sub

    With CreateObject("Scripting.Dictionary")
        Open dosya For Input As #1
        Do While Not EOF(1)
            Line Input #1, b    '
            If InStr(b, ";") Then
                bl = Split(b, ";")
                If Not .exists(bl(0)) Then
                    ListBox2.AddItem
                    ListBox2.List(ListBox2.ListCount - 1, 0) = bl(0)
                    ListBox2.List(ListBox2.ListCount - 1, 1) = Format(bl(1), "#,###0.000")
                    .Item(bl(0)) = ListBox2.ListCount - 1
                Else
                    ListBox2.List(.Item(bl(0)), 1) = Format(Val(ListBox2.List(.Item(bl(0)), 1)) + bl(1), "#,###0.000")
                End If
            End If
        Loop
        Close #1
    End With
 
ADO ile hazırladığım alternatif bir dosya ektedir;

.
 

Ekli dosyalar

Veysel Hocam bunun içinde teşekkür ederim. Bir sorum daha olacak; Dosyayı açmadan ADO ile yapmak mümkün müdür?
 
Haluk Hocam merhaba. Ben yazarken sen atmışsın zaten :)
 
ADO ile *.txt veya *.csv dosyasından veri alırken, ADO bulunduğu yerde Schema.ini dosyasını arar. Eğer bulursa, içinde tarif edilenlere göre işlem yapar. Bulamazsa, elinde ne varsa yetinmeye çalışır ve ihtiyaç duyduğunda Windows ayarlarına bakar.

Excel dosyasındaki kodları incelediyseniz, orada text dosyasından "Malzeme" ve "Adet" alanlarını kullanarak verileri aldığımızı görürsünüz. Ama, sözkonusu text dosyasını açtığınızda, aslında hiç de veri tabanına uygun olmayan düzende bazı veriler olduğunu görüyoruz.

Schema.ini dosyasını kullanarak, text dosyasındaki verileri ";" ile ayrıştırıp elde edilen ayrıştırılmış verilerden ilk bölümünü "Malzeme", ikinci bölümünü ise "Adet" olarak isimlendirdiğimizi görürsünüz. Aslında, text dosyasında bu şekilde alanlar yok .....

Daha sonrasında bu bilgiler ışığında kullanılan SQL sorgusunu zaten anlatmama gerek yok, gayet açık....

"Schema.ini" dosyasını Notepad gibi bir metin editörüyle açıp, içeriğini inceleyebilirsiniz.

.
 
Gerçekten çok faydalı oldu. Elinize Sağlık.
 
Geri
Üst