vb@rchiv
VB Classic
VB.NET
ADO.NET
VBA
C#
NEU! sevCoolbar 3.0 - Professionelle Toolbars im modernen Design!  
 vb@rchiv Quick-Search: Suche startenErweiterte Suche starten   Impressum  | Datenschutz  | vb@rchiv CD Vol.6  | Shop Copyright ©2000-2024
 
zurück

 Sie sind aktuell nicht angemeldet.Funktionen: Einloggen  |  Neu registrieren  |  Suchen

VB.NET - Ein- und Umsteiger
Re: Datenbank/Satz suche mit fast 4 Millionen Zeilen 
Autor: Manfred X
Datum: 12.11.14 20:58

Schau Dir mal diese Funktion an ...

   ''' <summary>Klasse zur Aufbewahrung eines SortierSchlüssels und 
   ' zugehörigem Index
    ''' </summary>
    Public Class SortItem
        Implements IComparable(Of SortItem)
 
        Public Property FileSortString As String
        Public Property FileRowIndex As Integer
 
        Public Function CompareTo(other As SortItem) As Integer _
            Implements System.IComparable(Of SortItem).CompareTo
            Return Me.FileSortString.CompareTo(other.FileSortString)
        End Function
    End Class
 
 
    ''' <summary>Aufbau eines Sortier-Zeigers zu Zeilen einer CSV-Datei</summary>
    ''' <param name="CSVFile">Pfad einer CSV-Datei</param>
    ''' <param name="TextEncoder">Text-Encoding (meist: UTF8)</param>
    ''' <param name="columnindex">Array mit nullbasierten Indices der 
    ''' hierarchischen Sortierspalten (0=höchste Hierarchie-Stufe)</param>
    ''' <param name="columnlength">Array mit Angaben zur Länge der 
    ' Sortier-Teilschlüssel</param>
    ''' <param name="sortlst">sortierte Liste mit den Sortierschlüsseln und 
    ' den FileRowIndices</param>
    Public Function FillSortList(ByVal CSVFile As String, _
                                 ByVal TextEncoder As System.Text.Encoding, _
                                 ByVal columnindex() As Integer, _
                                 ByVal columnlength() As Integer, _
                                 ByRef sortlst As List(Of SortItem)) As Integer
 
        sortlst = New List(Of SortItem)
 
        If Not IO.File.Exists(CSVFile) Then Return -1
        If Not IO.Path.GetExtension(CSVFile).ToLower = ".csv" Then Return -1
 
        If columnindex Is Nothing OrElse columnindex.Length = 0 Then Return -1
        If columnlength Is Nothing OrElse _
            Not columnlength.Length = columnindex.Length Then Return -1
 
        Dim mincolumnindex As Integer = _
           Aggregate ind As Integer In columnindex Distinct Into Min()
        If mincolumnindex < 0 Then Return -1
 
        Dim maxcolumnindex As Integer = _
            Aggregate ind As Integer In columnindex Distinct Into Max()
 
        If (Aggregate ind As Integer In columnlength _
            Distinct Into Min()) < 3 Then Return -1
 
        Try
 
            Dim fri As Integer = -1, fss As String = "", content As String = ""
            Using sr As New IO.StreamReader(CSVFile, TextEncoder)
                While Not sr.EndOfStream
                    Dim fields() As String = sr.ReadLine.Split(";"c)
                    If fields.Length > maxcolumnindex Then
                        fri += 1 : fss = ""
 
                        For i As Integer = 0 To columnindex.Length - 1
                            content = fields(columnindex(i)).ToString.ToLower
 
                            'Länge des Inhalts an Vorgabe anpassen
                            Dim adds As Integer = columnlength(i) - _
                              content.Length
                            If adds > 0 Then
                                content &= New String(" "c, adds)
                            ElseIf adds < 0 Then
                                content = content.Substring(0, columnlength(i))
                            End If
                            fss &= content & " "
                        Next i
 
                        sortlst.Add(New SortItem With _
                                    {.FileRowIndex = fri, .FileSortString = _
                                    fss})
                    End If
                End While
            End Using
 
            If sortlst.Count = 0 Then Return 0
 
            sortlst.Sort()
 
            Return sortlst.Count
        Catch ex As Exception
            Return -1
        End Try
    End Function
Anwendungsbeispiel:

Dim lst As New List(Of SortItem)
 
'Liste mit Sortierschlüsseln füllen und sortieren
Dim index As Integer = FillSortList("C:\daten\sortable.csv", _
  System.Text.Encoding.UTF8, {0, 1}, {5, 3}, lst)
 
'Suche nach einem Schlüssel
index = lst.BinarySearch(New SortItem With {.FileSortString = "xxxx  yyy "})
alle Nachrichten anzeigenGesamtübersicht  |  Zum Thema  |  Suchen

 ThemaViews  AutorDatum
Datenbank/Satz suche mit fast 4 Millionen Zeilen1.899lastyle11.11.14 23:58
Re: Datenbank/Satz suche mit fast 4 Millionen Zeilen1.212Manfred X12.11.14 00:19
Re: Datenbank/Satz suche mit fast 4 Millionen Zeilen1.286lastyle12.11.14 20:46
Re: Datenbank/Satz suche mit fast 4 Millionen Zeilen1.238Manfred X12.11.14 20:58
Re: Datenbank/Satz suche mit fast 4 Millionen Zeilen1.141effeff13.11.14 12:16
Re: Datenbank/Satz suche mit fast 4 Millionen Zeilen1.179Manfred X13.11.14 12:42
Re: Datenbank/Satz suche mit fast 4 Millionen Zeilen1.148effeff13.11.14 14:25
Re: Datenbank/Satz suche mit fast 4 Millionen Zeilen1.199Manfred X13.11.14 14:51
Re: Datenbank/Satz suche mit fast 4 Millionen Zeilen1.167effeff13.11.14 15:33
Re: Datenbank/Satz suche mit fast 4 Millionen Zeilen1.166lastyle16.11.14 12:58
Re: Datenbank/Satz suche mit fast 4 Millionen Zeilen1.102Chris748321.11.14 12:01
Re: Datenbank/Satz suche mit fast 4 Millionen Zeilen1.079Manfred X21.11.14 13:27
Re: Datenbank/Satz suche mit fast 4 Millionen Zeilen1.118Chris748321.11.14 21:29
Re: Datenbank/Satz suche mit fast 4 Millionen Zeilen1.094Christoph197222.11.14 09:38
Re: Datenbank/Satz suche mit fast 4 Millionen Zeilen1.070Manfred X22.11.14 10:13
Re: Datenbank/Satz suche mit fast 4 Millionen Zeilen1.105Christoph197222.11.14 10:29

Sie sind nicht angemeldet!
Um auf diesen Beitrag zu antworten oder neue Beiträge schreiben zu können, müssen Sie sich zunächst anmelden.

Einloggen  |  Neu registrieren

Funktionen:  Zum Thema  |  GesamtübersichtSuchen 

nach obenzurück
 
   

Copyright ©2000-2024 vb@rchiv Dieter Otter
Alle Rechte vorbehalten.
Microsoft, Windows und Visual Basic sind entweder eingetragene Marken oder Marken der Microsoft Corporation in den USA und/oder anderen Ländern. Weitere auf dieser Homepage aufgeführten Produkt- und Firmennamen können geschützte Marken ihrer jeweiligen Inhaber sein.

Diese Seiten wurden optimiert für eine Bildschirmauflösung von mind. 1280x1024 Pixel