vb@rchiv
VB Classic
VB.NET
ADO.NET
VBA
C#
Top-Preis! AP-Access-Tools-CD Volume 1  
 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

Visual-Basic Einsteiger
Instr mehrere Bedingung Textdatei 
Autor: mKs1985
Datum: 31.01.19 07:42

Hallo,

ich benötige eure expertise.

In meinem Programm durchsuche ich eine relativ große textdatei nach einem suchwort. Darauf folgen mehrere instr. befehle deren werte in einem 2 dimensionalen array gespeichert und weiterverarbeitet wird.

nun habe ich aber eine neue Anforderung die textdatei kann auch mehrere suchwörte enthalten deren ergebnis ausgegeben werden soll.

1. Bei den suchwörtern handelt es sich um einen index der so aussieht Y oder Y1 oder Y2. Wenn ich jetzt nur nach Y suche in dem Instr. befehl gibt er mir auch die werte für Y1 und Y2 aus.

2. Jedes Suchworte kommt in der Textdatei in 3 Varianten vor entweder z.b. Y; oder Y leerzeichen oder Y&

Jetzt muss das ganze irgendwie so in der schleife verknispelt werden, dass zuerst nach dem ersten suchwort in den 3 Varianten gesucht wird und dann. dass nächste suchwort in den 3 varianten gesucht wird.

Hier der Ursprüngliche code der funktioniert wenn man nur ein suchwort in der textdatei hat weil die varianten einfach ignoriert werden


	Do
            ReDim Preserve arr(5, i)
             pos1 = InStr(pos1 + 1, strSearchThis, Suchwort)
                If pos1 > 0 Then
                    ' Wort gefunden
          ' Es folgen 6 instr befehle die das ergebnis in arr(0, i) - (5,i) 
          ' speichern
 
i=i+1
 
Loop Until pos1 = 0
hier noch mein ansatz der aber nicht funktioniert

            Suchwort = rev & ";"
            Suchwortleer = rev & " "
            Suchwortabsatz = rev & "&"
 
            Do
                ReDim Preserve arr(5, i)
                pos1 = InStr(pos1 + 1, strSearchThis, Suchwort)
                posleer = InStr(posleer + 1, strSearchThis, Suchwortleer)
                posabsatz = InStr(posabsatz + 1, strSearchThis, Suchwortabsatz)
 
 
                If pos1 > 0 Then
                    ' Wort gefunden
                    XX = InStrRev(strSearchThis, "XX", pos1)
                    YY = InStr(XX, strSearchThis, "YY")
                End If
                If pos1 = 0 And posleer > 0 Then
                    ' Wort gefunden
                    XX = InStrRev(strSearchThis, "XX", posleer)
                    YY = InStr(XX, strSearchThis, "YY")
                End If
                If pos1 = 0 And posleer = 0 And posabsatz > 0 Then
                    ' Wort gefunden
                    XX = InStrRev(strSearchThis, "XX", posabsatz)
                    YY = InStr(XX, strSearchThis, "YY")
                 End If
 
' dann folgen die 6 Instr befehle
                i = i + 1
 
            Loop Until pos1 = 0
Für eine Hilfestellung bin ich sehr dankbar
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Instr mehrere Bedingung Textdatei 
Autor: Manfred X
Datum: 31.01.19 08:21

Hallo!

Schreibe zunächst eine Routine, der Du als
Parameter den Text und EINE Such-Zeichenfolge übergibst
und die in einem Array die Suchergebnisse (Indices) zurückgibt.

Im rufenden Programmteil hast Du eine Schleife über die
Suchbegriffe.
Innerhalb dieser Schleife kommen die drei Aufrufe der
obigen Routine für Y; Y(Space) und Y&.
Die Rückgaben müssen jeweils umgespeichert werden.

Auf diese Weise entsteht eine geschachtelte Schleifenstruktur.
In einer einfachen Schleife läßt sich diese Aufgabe nicht lösen.

Beitrag wurde zuletzt am 31.01.19 um 08:45:15 editiert.
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Instr mehrere Bedingung Textdatei 
Autor: mKs1985
Datum: 31.01.19 09:33

hast du eventuell ein beispiel wie ich diese Verschachtelung vornehmen kann?
So ähnlich wie du es beschrieben hast, habe ich es versucht und nicht hinbekommen
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Instr mehrere Bedingung Textdatei 
Autor: Manfred X
Datum: 31.01.19 11:38

Irgend sowas ....

Function FindWord(ByVal txt As String, ByVal tofind As String) As Collection
 
Set FindWord = New Collection
If tofind = "" Then Return
If Len(txt) < Len(tofind) Then Return
 
Dim pos As Integer
pos = 1 - Len(tofind)
 
Do
    pos = pos + Len(tofind)
    pos = InStr(pos, txt, tofind)
    If pos > 0 Then FindWord.Add pos
Loop While pos > 0 And pos < Len(txt) - Len(tofind)
 
End Function
 
 
 
Public Function AddCollections(c1 As Collection, c2 As Collection) As Collection
 
Set AddCollections = New Collection
Dim i%
For i = 1 To c1.Count
   AddCollections.Add c1.Item(i)
Next i
For i = 1 To c2.Count
   AddCollections.Add c2.Item(i)
Next i
 
End Function
 
 
Public Sub DemoFind()
 
Dim txt As String
txt = "alle meine entchen o schwimmen o; auf o dem o; see"
 
Dim tofind(1) As String
tofind(0) = "o"
tofind(1) = "schwimmen"
 
Dim i%, founded As Collection, total As New Collection
 
For i = 0 To UBound(tofind)
   Set founded = FindWord(txt, tofind(i) & " ")
   'Ergebnis speichern
   Set total = AddCollections(total, founded)
 
   Set founded = FindWord(txt, tofind(i) & ";")
   'Ergebnis speichern
   Set total = AddCollections(total, founded)
 
   Set founded = FindWord(txt, tofind(i) & "&")
   'Ergebnis speichern
   Set total = AddCollections(total, founded)
Next i
 
End Sub
Falls Du gerade anfängst, Visual Basic zu lernen,
steige sofort auf VB 2017 um.
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Instr mehrere Bedingung Textdatei 
Autor: mKs1985
Datum: 31.01.19 15:26

Danke! Hat mir sehr geholfen.

Für meinen speziellen fall musste ich meinen code nur um eine weitere schleife ergänzen und die suchwort varianten in ein array laden

Was man an deinem Beispiel gut erkennen kann ist, dass ich was funktionen angeht noch viel besser werden muss um einen strukturierten quellcode zu erstellen.

bei mir sieht das im moment eher aus wie gewollt und nicht gekonnt

Viele Grüße
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

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