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-Key: 307848

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

Printed on: April 26, 2024 at 09:04 o'clock

Member: emeriks
Solution emeriks Jun 22, 2016 updated at 06:42:14 (UTC)
Goto Top
Hi,
siehe Split-Funktion.
  dim x() as String
  x = Split(Zeile, "|")  
  Spalte1 = x(0)

E.

Edit: habe Schreibfehler korrigiert.
Member: karolson
karolson Jun 22, 2016 at 08:53:50 (UTC)
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
Member: emeriks
emeriks Jun 22, 2016 at 09:16:14 (UTC)
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
Member: karolson
karolson Jun 22, 2016 at 09:45:04 (UTC)
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
Member: Friemler
Solution Friemler Jun 22, 2016 at 10:34:48 (UTC)
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
Member: emeriks
Solution emeriks Jun 22, 2016 at 10:43:35 (UTC)
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