Soru Text Belgesinden Veri Almak

ragnorak

Altın Üye
Katılım
4 Haziran 2016
Mesajlar
204
Excel Vers. ve Dili
Excel 2021
Altın Üyelik Bitiş Tarihi
03-09-2026
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

  • 894 bayt Görüntüleme: 3

veyselemre

Özel Üye
Katılım
9 Mart 2005
Mesajlar
3,647
Excel Vers. ve Dili
Pro Plus 2021
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
 

ragnorak

Altın Üye
Katılım
4 Haziran 2016
Mesajlar
204
Excel Vers. ve Dili
Excel 2021
Altın Üyelik Bitiş Tarihi
03-09-2026
Harika olmuş. Elinize sağlık. Teşekkür ederim.
 

veyselemre

Özel Üye
Katılım
9 Mart 2005
Mesajlar
3,647
Excel Vers. ve Dili
Pro Plus 2021
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
 

Haluk

Özel Üye
Katılım
7 Temmuz 2004
Mesajlar
12,406
Excel Vers. ve Dili
64 Bit 2010 - İngilizce
+
Google Sheets
+
JScript
Altın Üyelik Bitiş Tarihi
ADO ile hazırladığım alternatif bir dosya ektedir;

.
 

Ekli dosyalar

ragnorak

Altın Üye
Katılım
4 Haziran 2016
Mesajlar
204
Excel Vers. ve Dili
Excel 2021
Altın Üyelik Bitiş Tarihi
03-09-2026
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?
 

ragnorak

Altın Üye
Katılım
4 Haziran 2016
Mesajlar
204
Excel Vers. ve Dili
Excel 2021
Altın Üyelik Bitiş Tarihi
03-09-2026
Haluk Hocam merhaba. Ben yazarken sen atmışsın zaten :)
 

Haluk

Özel Üye
Katılım
7 Temmuz 2004
Mesajlar
12,406
Excel Vers. ve Dili
64 Bit 2010 - İngilizce
+
Google Sheets
+
JScript
Altın Üyelik Bitiş Tarihi
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.

.
 

ragnorak

Altın Üye
Katılım
4 Haziran 2016
Mesajlar
204
Excel Vers. ve Dili
Excel 2021
Altın Üyelik Bitiş Tarihi
03-09-2026
Gerçekten çok faydalı oldu. Elinize Sağlık.
 
Üst