vb@rchiv
VB Classic
VB.NET
ADO.NET
VBA
C#
vb@rchiv Offline-Reader - exklusiv auf der vb@rchiv CD Vol.4  
 vb@rchiv Quick-Search: Suche startenErweiterte Suche starten   Impressum  | Datenschutz  | vb@rchiv CD Vol.6  | Shop Copyright ©2000-2025
 
zurück

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

Visual-Basic Einsteiger
Re: Suche nach zwei Begriffen 
Autor: skymaster
Datum: 29.11.05 12:34

Hallo Stefan

ich habe eine Suchfunktion gefunden die jede Zeile Die mein Suchbegriff enthält in eine Lisbox kopiert ...das Problem je größer die Textdatei wird um so mehr Zeilen erhalte ich in der Listbox jetzt brauche ich fast eine Suchfunktion um die Listbox zu durchsuchen.
Daher möchte ich von Anfang an eine Möglichkeit haben nach einem zweiten Begriff zu suchen.
Also entweder Begriff1 oder Begriff2 oder beide
Das hier ist der Code funktioniert für einen Suchbegriff ganz prima.
Ich habe nur keine Ahnung wie ich das mit dem zweiten mache

Private Function FindTerm(File As String, s As String, ZZ() As String, tl As String, tr As String) As Boolean

Dim C As Long, i As Long, j As Long
Dim FLen As Long, lc As Long, p As Long
Dim v As Long, w As Long
Dim F As Integer
Dim a As String, d As String
Dim buffer As String, old As String


'Dieser Wert gibt die Paketgröße von Get# an. Er kann beliebig
'geändert werden, sollte aber nicht kleiner als die längste
'zu erwartende Zeile des zu druchsuchenden Files sein
Const PS As Long = 1024&

ReDim ZZ(0)

'Prüfen ob Parameter plausibel sind
If Len(tl) = 0 Or Len(tr) = 0 Or Len(s) = 0 Or _
Dir$(File, vbNormal) = "" Then

'Call MsgBox("Paramter stimmen nicht!")
Exit Function
End If



F = FreeFile

Open File For Binary Shared As #F
FLen = LOF(F) 'Dateigröße ermitteln


'Anzahl der Durchläufe anhand der Dateigröße ermitteln
p = FLen \ PS 'Dateilänge / Constante
If FLen Mod PS <> 0 Then p = p + 1

'Schleife starten
For C = 1 To p 'p = Anzahl der Durchläufe
buffer = Space$(PS)
Get F, , buffer
a = old & buffer

i = InStr(1, a, s)

If i <> 0 Then
'Suchbegriff wurde im aktuellen Paket gefunden
lc = 0
Do
i = InStr(i, a, s)
If i <> 0 Then

'Zeilenanfang suchen
v = 1
For j = i To 1 Step -1
d = Mid$(a, j, 1)

'gefunden
If InStr(1, tl, d) Then
v = j + 1
Exit For
End If
Next j

'Zeilenende suchen
w = 0
For j = i To Len(a)
d = Mid$(a, j, 1)

'gefunden
If InStr(1, tr, d) Then
w = j
Exit For
End If
Next j

If w <> 0 Then
' Zeile auschneiden und in einem Feld speichern
' Hier könnten auch weitere Suchkriterien abge-
' fragt werden.
ZZ(UBound(ZZ)) = Mid$(a, v, w - v)
ReDim Preserve ZZ(0 To UBound(ZZ) + 1)
lc = w
End If

i = w

End If

'Weiter schleifen, da der Suchbegriff im Paket ja
'öfters als einmal auftauchen kann
Loop Until i = 0

If lc = 0 Then
'Suchbegriff wurde im aktuellen Paket nicht ge-
'funden. Daher ganzen String für die nächste Runde
'speichern
old = a
Else
'Ab Ende der zuletzt gefundenen Zeile des aktuel-
'len Paketes für die nächste Runde speichern
old = Mid$(a, lc)
End If
Else
'Paket der aktuellen Runde speichern
old = buffer
End If
Next C
Close F

If UBound(ZZ) > 0 Then FindTerm = True
End Function
alle Nachrichten anzeigenGesamtübersicht  |  Zum Thema  |  Suchen

 ThemaViews  AutorDatum
Suche nach zwei Begriffen485skymaster29.11.05 11:40
Re: Suche nach zwei Begriffen314vbtricks29.11.05 12:14
Re: Suche nach zwei Begriffen312skymaster29.11.05 12:34
Re: Suche nach zwei Begriffen324jens5230.11.05 10:35
Re: Suche nach zwei Begriffen318vbtricks30.11.05 11:28
Re: Suche nach zwei Begriffen302skymaster30.11.05 11:50

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-2025 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