| |
Visual-Basic EinsteigerInstr 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 | |
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. | |
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 | |
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. | |
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 | |
| 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 |
|
|
sevISDN 1.0
Überwachung aller eingehender Anrufe!
Die DLL erkennt alle über die CAPI-Schnittstelle eingehenden Anrufe und teilt Ihnen sogar mit, aus welchem Ortsbereich der Anruf stammt. Weitere Highlights: Online-Rufident, Erkennung der Anrufbehandlung u.v.m. Weitere InfosTipp des Monats Neu! sevCoolbar 3.0
Professionelle Toolbars im modernen Design!
Mit sevCoolbar erstellen Sie in wenigen Minuten ansprechende und moderne Toolbars und passen diese optimal an das Layout Ihrer Anwendung an (inkl. große Symbolbibliothek) - für VB und MS-Access Weitere Infos
|