Jörn Janz
2007-08-03 05:20:21 UTC
Hallo NG,
ich muss beim Programmstart 25.000 Datensätze aus einer Textdatei
lesen.
Die Textdatei enthält 22 "Felder" und ca. 144 Zeichen pro Zeile.
Ich habe mit Array und ArrayList herumprobiert und die Datei ist
in unter einer Sekunde eingelesen und in die entsprechende Felder
aufgeteilt.
Jetzt zu meiner Frage. In den ersten 7 Zeichen der Zeile finde ich die
Artikelnummer. Die Artikelnummer möchte ich an ein Suchfeld binden.
Nett wäre eine "Autovervollständigung" wie z.B. in einer Combobox.
Wenn ich die Artikelnummer mit .Add hinzufüge benötigt das Programm
ca. 6 Sekunden für den Vorgang. Ich habe auch schon versucht mit
einer
ArrayList zu arbeiten und die ArrayList dann an die ComboBox zu binden
- dann dauert es noch länger.
Sind 6 Sekunden OK? Habt Ihr noch einen
Beschleunigungstip oder eine Idee für eine komfortable Suchmaske die
sich schneller
aufbauen lässt für mich?
Gruß - Jörn
'===================
Dim sr As System.IO.StreamReader = _
New System.IO.StreamReader("c:\Artikel.txt", _
System.Text.Encoding.GetEncoding("iso-8859-1"))
' Streamreader 1 um die Anzahl der Zeilen zu bestimmen und
' um auf ReDim und Preserve verzichten zu können
Dim row As String
' Zeilenweise lesen
Dim i As Integer = 0
Do
row = sr.ReadLine()
If IsNothing(row) Then Exit Do
i = i + 1
Loop
sr.Close()
Dim sr2 As System.IO.StreamReader = _
New System.IO.StreamReader("c:\Artikel.txt", _
System.Text.Encoding.GetEncoding("iso-8859-1"))
' Ich habe das Beispiel verkürzt - b hat später 22 Felder
Dim b(i, 2) As String
Dim x As Integer
Do
row = sr2.ReadLine()
If row <> Nothing Then
'Me.lbxAnzeige.Items.Add(row)
x = x + 1
b(x, 0) = i.ToString
b(x, 1) = Strings.Left(row.ToString, 7)
Me.cmbSuchen.Items.Add(b(x, 1))
b(x, 2) = Strings.Mid(row.ToString, 8, 3)
End If
Loop While row <> Nothing
sr2.Close()
'========
ich muss beim Programmstart 25.000 Datensätze aus einer Textdatei
lesen.
Die Textdatei enthält 22 "Felder" und ca. 144 Zeichen pro Zeile.
Ich habe mit Array und ArrayList herumprobiert und die Datei ist
in unter einer Sekunde eingelesen und in die entsprechende Felder
aufgeteilt.
Jetzt zu meiner Frage. In den ersten 7 Zeichen der Zeile finde ich die
Artikelnummer. Die Artikelnummer möchte ich an ein Suchfeld binden.
Nett wäre eine "Autovervollständigung" wie z.B. in einer Combobox.
Wenn ich die Artikelnummer mit .Add hinzufüge benötigt das Programm
ca. 6 Sekunden für den Vorgang. Ich habe auch schon versucht mit
einer
ArrayList zu arbeiten und die ArrayList dann an die ComboBox zu binden
- dann dauert es noch länger.
Sind 6 Sekunden OK? Habt Ihr noch einen
Beschleunigungstip oder eine Idee für eine komfortable Suchmaske die
sich schneller
aufbauen lässt für mich?
Gruß - Jörn
'===================
Dim sr As System.IO.StreamReader = _
New System.IO.StreamReader("c:\Artikel.txt", _
System.Text.Encoding.GetEncoding("iso-8859-1"))
' Streamreader 1 um die Anzahl der Zeilen zu bestimmen und
' um auf ReDim und Preserve verzichten zu können
Dim row As String
' Zeilenweise lesen
Dim i As Integer = 0
Do
row = sr.ReadLine()
If IsNothing(row) Then Exit Do
i = i + 1
Loop
sr.Close()
Dim sr2 As System.IO.StreamReader = _
New System.IO.StreamReader("c:\Artikel.txt", _
System.Text.Encoding.GetEncoding("iso-8859-1"))
' Ich habe das Beispiel verkürzt - b hat später 22 Felder
Dim b(i, 2) As String
Dim x As Integer
Do
row = sr2.ReadLine()
If row <> Nothing Then
'Me.lbxAnzeige.Items.Add(row)
x = x + 1
b(x, 0) = i.ToString
b(x, 1) = Strings.Left(row.ToString, 7)
Me.cmbSuchen.Items.Add(b(x, 1))
b(x, 2) = Strings.Mid(row.ToString, 8, 3)
End If
Loop While row <> Nothing
sr2.Close()
'========