karolson
Goto Top

Jede Zeile einer Textdatei bis zum Trennzeichen durchsuchen

Hallo an alle,

Ich möchte mit VBA eine 50MB große Textdatei nach einer Zeichenkette durchsuchen und einige Begriffe aus gefundener Zeile auslesen.
Dazu habe ich schon einen Algorithmus gefunden: siehe Suchmaschine
Dieses Programm funktioniert schon sehr gut und schnell.

Nun hat meine Textdatei folgende Form:
D.h. jede Spalte wird mit "|" abgetrennt.

Der Algorithmus durchsucht jede Zeile von oben nach unten und schreibt die Zeile, wo der Suchbegriff steht, in eine Listbox ein.

Meine frage ist, wie kann ich den Quellcode so ändern, dass das Programm nur die erste "Spalte" der Textdatei durchsucht - nur bis zum ersten Trennzeichen "|"?
Soll aber, wie vorher, die ganze Zeile ausgeben.


Mit freundlichen Grüßen

Content-ID: 307848

Url: https://administrator.de/contentid/307848

Ausgedruckt am: 25.11.2024 um 20:11 Uhr

emeriks
Lösung emeriks 22.06.2016 aktualisiert um 08:42:14 Uhr
Goto Top
Hi,
siehe Split-Funktion.
  dim x() as String
  x = Split(Zeile, "|")  
  Spalte1 = x(0)

E.

Edit: habe Schreibfehler korrigiert.
karolson
karolson 22.06.2016 um 10:53:50 Uhr
Goto Top
Hallo,
danke für die schnelle Antwort.
mit split habe ich schon mehrmals probiert, bin zu keinem Ergebnis gekommen.
kannst du mir bitte mit Quellcode helfen und an welcher Stelle dieser eingefügt werden soll?
Das wäre sehr nett
mfG
emeriks
emeriks 22.06.2016 um 11:16:14 Uhr
Goto Top
Ich denke hier:
        For x = 0 To UBound(Zeilen) - 1
            If x < 32736 Then
                List1.AddItem Split(Zeilen(x), "|")(0)  
            Else
                Call MsgBox("ListBox kann nicht mehr Einträge fassen!")  
                Exit For
            End If
        Next x
karolson
karolson 22.06.2016 um 11:45:04 Uhr
Goto Top
Naja, damit hat man nur die erste Spalte von den gefundenen Zeilen in Listbox stehen.
Ich möchte aber, dass nur die erste Spalte durchgesucht wird:

Bsp: so stehts in der Textdatei:

Eintrag1|Eintrag2|Eintrag3|....usw
Eintrag21|Eintrag22|Eintrag23|....usw
Eintrag31|Eintrag32|Eintrag33|....usw
usw

Zu durchsuchende Elemente sind Eintrag1, Eintrag21, Eintrag31 (alle Zeilen, nur bis zum ersten Strich "|" sollen mit Suchbegriff überprüft werden).
Weil das aktuelle Programm, prüft die ganze Zeile bis zum Zeilenumbruch nach - was ich nicht will.
mfG
Friemler
Lösung Friemler 22.06.2016 um 12:34:48 Uhr
Goto Top
Hallo karolson,

da sich die erste Spalte am Zeilenanfang befindet, nimm
If Left(Zeilen(x), Len(Suchbegriff)+1) = "Suchbegriff|" Then
zum Suchen nach den gewünschten Zeilen.

Len(Suchbegriff)+1 kannst Du vor der Schleife noch in eine Variable packen, dann wird das Script noch schneller.

Gruß
Friemler
emeriks
Lösung emeriks 22.06.2016 um 12:43:35 Uhr
Goto Top
        For x = 0 To UBound(Zeilen) - 1
            If x < 32736 Then
                If Split(Zeilen(x), "|")(0) = s Then  
                   List1.AddItem Zeilen(x)
                end if
            Else
                Call MsgBox("ListBox kann nicht mehr Einträge fassen!")  
                Exit For
            End If
        Next x